Linux权限管理

简介

  在Linux多用户系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力.

权限身份类别

  • user  
    •   U ,文件的所有者,默认为文档的创建者. 
  • group
    •   G,文件所属组的用户,默认是创建文件的用户的主组.
  • other
    •   O,既不是文件的创建者,也不在文件属组里的用户,称为其他用户.
  • root
    •   超级管理员,在所有用户中它拥有最大的权限,可以管理普通用户.设置文档权限时无需考虑root用户.

  注意 : 除了ugo以外还有一个字母a(all users)表示所有用户,包含ugo.

  ugo身份各自对应 read读  write写  execute执行 权限.

 

文件权限详解

  

普通文件权限

  chmod 设置权限

    -R : 递归设置权限. 用来设置文件夹权限.

  语法 : chmod  [选项]   权限信息   文档路径

 

字母设置形式

字母选项作用
u(谁) user 文件拥有者
g(谁) group 与拥有者同组的组内用户
o(谁) other 其他用户
a(谁) all 所有人(包含ugo)
+(作用) 增加作用
-(作用) 移除作用
=(作用) 等于 赋值作用
r(权限) read 可读权限
w(权限) write 可写权限
x(权限) execute 可执行权限
-(权限) - 没有任何权限

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

示例 :

  chmod  u=rwx , g=rwx ,o=r   ./ word.txt  //给当前文件夹下的word.txt文件的用户u和用户组g设置读,写,执行权限.给其他用户o设置可读权限.

  chmod u+x , g-r ,o=-    ./word.txt    //给当前文件夹下的word.txt文件的用户u增加执行权限,用户组删除读取权限,其他用户清除权限.

  注意 :

  1. 如果ug权限相同时可以简写 ug=rwx .
  2. 设置权限时如果不指定用户默认应用所有用户.  
  3. 设置多个身份时,多个身份之间需要用英文逗号分开.

数字设置形式

  含义 :  read = 4   write = 2   execute = 1

数字权限作用
0 - 不能读,不能写,不能执行
1 execute 不能读,不能写,可执行
2 write 不能读,可写,不能执行
3 2+1 不能读,可写,可执行
4 read 可读,不能写,不能执行
5 4+1 可读,不能写,可执行
6 4+2 可读,可写,不能执行
7 4+2+1 可读,可写,可执行

  

 

 

 

 

 

 

 

 

 

 

 

 

 

示例 :

  chmod -R 741  /test  //给/test文件夹设置权限 用户u 读 写 执行  用户组 读  其他  执行.

  注意 ;

    1.权限设定时应注意不要设置 2,3 的权限数字,一般都是有问题的. 写入和执行应配合读取权限一起使用.

    2.如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写和执行权限,有才可以删除.

 特殊权限

       设置位S    

    SetUID :  针对可执行文件有效  chmod  u+s  ./test 

    -rwsr-xr-x.  //原本表示文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为 SetUID,简称 SUID 特殊权限。SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。

    SetGID : 针对可执行文件有效  chmod  g+s  ./test

    -rwxr-sr-x.      //原本表示文件所属组权限中的 x 权限位,却出现了 s 权限, 此种权限通常称为 SetGID,只要用户对设有 SGID 的文件有执行权限,那么当用户执行此文件时,会以文件所属组的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。

    SGID 和 SUID 的不同之处就在于,SUID 赋予用户的是文件所有者的权限,而 SGID 赋予用户的是文件所属组的权限.

 

  粘贴位T

    SetBIT :  针对目录有效 Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位等。

    d rwx rwx rwt  //SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件.用户只能操作自己创建的文件或目录,而无法修改甚至删除其他用户创建的文件或目录

  

  示例:

    /usr/bin/passwd在执行修改密码任务时会修改/etc/passwd和/etc/shadow等文件.这些文件除了root外其他用户都没有写权限,通过加s权限让普通用户能够修改密码.

    chmod  u-s  /usr/bin/passwd  //取消s权限普通用户不能修改密码

    chmod u+s /usr/bin/passwd  //添加s权限普通用户能够修改密码

    chmod  0755   /usr/bin/passwd   //前置位0代表清除任何特殊权限.

    注意:

      1.which命令可以查看二进制执行文件所在位置.

      2.s权限只能应用在二进制可执行文件上.

 

 设置位参数

数字 权限 作用
0 --- 无任何权限
1 --t SetBIT粘贴位,针对公共目录,只有root和文件的创建者可以删除文件,其他人只能自己管理自己。设置方式:o+t 或 o-t 或 1xxx
2 -s- SetGID强制位,针对目录,任何在该目录里创建的任何文件的属组都继承了该目录的属组。设置方式:g+s 或 g-s 或 2xxx
3 -st SetGID , SetBIT 两个选项的组合. g-s , o-t 取消
4 s-- SetUID冒险位,针对二进制文件,用户临时拥有文件拥有者的权限。设置方式:u+s 或 u-s 或 4xxx
5 s-t SetUID , SetBIT 两个选项的组合. u-s , o-t 取消
6 ss- SetUID , SetGID 两个选项的组合. u-s ,g-s 取消
7 sst SetUID , SetGID , SetBIT 三个选项的组合. u-s ,g-s ,o-t 取消

 

 

 

 

 

 

 

 

 

 

 

 

 

修改文件或目录的隐藏属性(chattr命令)

chattr  专门用来修改文件或目录的隐藏属性,//只有 root 用户可以使用.

 

[root@localhost ~]# chattr [+-=] [属性] 文件或目录名  //+ 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性。
属性选项 功能
i

如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;

a

如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据;
如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件;

u 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。
s 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。

 

 

 

 

 

 

 

 

 

 

【例 1】为文件赋予i属性. 

//设置有 i 属性的文件,即便是 root 用户,也无法删除和修改数据。
[root@localhost ~]# touch ftest
#建立测试文件
[root@localhost ~]# chattr +i ftest
[root@localhost ~]# rm -rf ftest
rm:cannot remove 'ftest':Operation not permitted
#无法删除"ftesr",操作不允许
#被赋予i属性后,root不能删除
[root@localhost ~]# echo 111>>ftest
bash:ftest:Permission denied
#权限不够,不能修改文件中的数据

 

【例 2】为目录赋予 i 属性。

//设置有 i 属性的目录,即便是 root 用户,也无法在目录内部新建或删除文件,但可以修改文件内容。
[root@localhost ~]# mkdir dtest
#建立测试目录
[root@localhost dtest]# touch dtest/abc
#再建立一个测试文件abc
[root@localhost ~]# chattr +i dtest
#给目录赋予i属性
[root@localhost ~]# cd dtest
[root@localhost dtest]# touch bed
touch: cannot touch 'bed':Permission denied
#无法创建"bcd",权限不够,dtest目录不能新建文件
[root@localhost dtest]# echo 11>>abc
[root@localhost dtest]# cat abc
11
#可以修改文件内容
[root@localhost dtest]# rm -rf abc
rm: cannot remove 'abc': Permission denied
#无法删除"abc",权限不够

给设置有 i 属性的文件删除此属性也很简单,只需将 chattr 命令中 + 改为 - 即可。

 

【例 3】演示 a 属性的作用。

假设有这样一种应用,我们每天自动实现把服务器的日志备份到指定目录,备份目录可设置 a 属性,变为只可创建文件而不可删除。可以修改但是因为不能删除的原因会产生很多缓存文件.

命令如下:

[root@localhost ~]# mkdir -p /back/log
#建立备份目录
[root@localhost ~]# chattr +a /back/log
#赋予a属性
[root@localhost ~]# cp /var/log/messages /back/log
#可以复制文件和新建文件到指定目录中
[root@localhost ~]# rm -rf /back/log/messages
rm: cannot remove '/back/log/messages': Permission denied
#无法删除 /back/log/messages,操作不允许

 

lsattr   用于显示文件或目录的隐藏属性  //只有 root 用户可以使用.

[root@localhost ~]# lsattr [选项] 文件或目录名

 

选项 功能
-a 后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
-d 如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息;
-R 和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。

 

 

 

 

 

 

 

【例 1】仅显示文件的隐藏信息

[root@localhost ~]# touch attrtest
-----------e- attrtest
[root@localhost ~]# chattr +aij attrtest
[root@localhost ~]# lsattr attrtest
----ia---j-e- attrtest

 

【例 2】不带目录名称,表示显示所有文件和目录属性,包括隐藏文件和目录.

[root@localhost ~]#lsattr -a
-----------e- ./.
------------- ./..
-----------e- ./.gconfd
-----------e- ./.bashrc
...

 

【例 3】仅显示目录的隐藏信息

[root@localhost ~]#lsattr -d /back/log
-----a------e- /back/log
#查看/back/log目录,其拥有a和e属性

注意:

  通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chatrr 命令常与 lsattr 命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功

 

 ACL访问控制

  getfacl  查看文件的CAL策略及权限.

  setfacl  给文件针对某个用户或者某个组来增加ACL策略.

    -m  修改acl策略

    -x  去掉某个用户或者某个组的权限

    -b  删除所有的acl策略

    -R  递归操作子目录

     mask   定义除other和拥有者外的最大权限

  示例:

    setfacl  -m u:test:rwx  ./file.txt  //file文件增加test用户的rwx权限

    setfacl  -m g:test:rwx  ./file.txt      //file文件增加test用户组rwx权限.

    setfacl  -x  u:test:rwx  ./file.txt  //删除file文件test用户的rwx权限

    setfacl  -x  g:test:rwx  ./file.txt      //删除file文件test用户组rwx权限.

    setfacl  -b  ./file.txt      //删除所有acl策略

 

 文件属主属组设置

  chown  修改所属主

    -R  递归修改文件夹所属主

    示例:

      chown  mysql  ./test.txt  //修改test文件所属主

  chgrp  修改所属组

    -R  递归修改文件夹所属组

    示例:

      chgrp  -R mysql  ./shop   //递归修改shop文件夹所属组

  chown  同时修改属主和属组

    chown root:root ./test.txt  //同时修改test文件的属主和属组

 

   注意: 一般来说,chown这个指令只由root有权限使用.

 

 

 

posted @ 2020-11-26 17:25  丿上善若水  阅读(221)  评论(0编辑  收藏  举报