Linux系统中的权限管理

1.权限的查看及读取

(1)权限查看

ls -l file 查看文件权限

ls -ld dir 查看目录权限

(2)权限的读取

文件的属性称为文件的元数据(meta data),一种元数据用1个byte来记录内容

(3)文件和目录权限信息的解读

我们以上图中目录的权限为例进行介绍

drwxr-xr-x . 2 root root 6 May 18 17:10 dir

第一位是文件类型,- 为普通文件,d 为目录,l 为软链接,b 为快设备,c 为字符设备,s (socket)为套接字,p 为管道“ | ”

 rwxr-xr-x 这九位表示用户权限,具体表示含义将在后续普通权限中进行介绍

‘ . ’表示系统的selinux开启

数字 2 在文件和目录中表示的含义不同,对于文件,表示文件内容被系统记录的次数(即硬链接的个数),对于目录,表示目录中子目录的个数

第一个 root 表示文件的拥有者,紧接着的 root 表示文件的拥有组

数字 6 在文件中表示文件内容的大小,在目录中表示目录中子文件的元数据大小

May 18 17:10 表示文件内容被修改的时间  dir 表示文件名称

2.普通权限的类型及作用

(1)用户对文件的身份

在用户权限 rw-r--r-- 中,前三位表示文件的拥有者的权限,中间三位表示文件的拥有组的权限,最后三位表示除了文件的拥有者和拥有组之外其他用户的总称

(2)权限类型

-         表示权限未开启

r         可读

          对于文件:可以读取文件的内容

          对于目录:可以 ls 列出目录中的文件

w       可写

          对于文件:可以更改文件的内容

          对于目录:可以在目录中新建或者删除文件

x        可执行

          对于文件:可以用文件名称调用文件内记录的程序

          对于目录:可以进入目录中

(3)用户身份匹配

       user > group > other

3.设定普通权限的方法 

chmod                        设定文件的权限

使用 chmod 命令可以对文件或目录的普通权限进行设定,主要有以下几种方式一是复制权限,二是字符方式,三是数字方式 

(1)chmod复制权限

chmod --reference=/root/Desktop/dir /root/Desktop/file     将目录dir的权限复制到文件file上

chmod -R --reference=/root/Desktop/file /root/Desktop/dir/   将文件file的权限复制到目录dir及目录dir中的所有文件上

 (2)字符方式设定权限

监控命令:  watch -n 1 ' ls -lR /mnt ' 

上图是各目录与文件的权限初始状态

chmod (u g o)(+ - =)(r w x) file                     用字符的方式来设定file的权限

例如:

chmod u+x file                           设定file文件的拥有者可执行权限

chmod g+w /mnt/dir/file1           设定file1文件的拥有组可写权限

chmod o-rx dir                           设定dir目录的其他用户无可读、可执行权限

chmod u-w,g+w /mnt/dir/file2 设定file2文件的拥有者无可读权限,拥有组可读权限

chmod g=rwx /mnt/dir/file3       设定file3文件的拥有组可读、可写、可执行权限

chmod -R u=x o=--- /mnt/dir/    设定dir目录中所有文件的拥有者可执行权,其他用户无权限

(3)数字方式设定权限

使用三位二进制数来表示不同使用者的权限,将其转换为八进制数,再将文件的拥有者、拥有组和其他用户的三个八进制数组合在一起,便可表示其文件的权限

例如:

某一文件中,u:rwx=111=7     g:r-x=101=5    o:-w- =010=2

所以该文件的用户普通权限可表示为752

chmod 453 /mnt/file              将file的用户权限更改为453

分析: u:4=100=r--    g:5=101=r-x   o:3=011=-wx

即更改后file的权限表示为r--r-x-wx

4.系统默认权限设定

意义:系统本身存在的意义是共享资源,从安全角度来看,系统共享的资源越少,开放的权力越少,系统的安全性就会越高,而如果既要保证系统安全,又要系统创造价值,就应该把开放的权力默认开放,把不安全的权力默认保留

(1)如何保留权力

umask表示系统保留权力

umask                      查看保留权力

umask  权限制         临时设定系统预留权力

目录默认权限=777-umask

文件默认权限=777-umask-111

由此可见,当umask值越大时,系统的安全性就越高

(2)临时修改umask值

umask 077                    修改系统的umask值为077

注:此更改仅在当前shell生效,退出shell重新打开,umask值恢复默认022

 (3)永久修改umask值

若要永久修改umask值,需要修改/etc/bashrc和/etc/profile的两个文件中umask的数值

操作方法:

<1> 用vim修改文件中的数值内容

修改后的结果如下

 <2> 用source命令使系统应用该文件内容

<3> 使用umask命令查看当前umask值

<4>  建立文件和目录,验证umask值和文件权限值的关系

 由上图可知,文件file的权限值为600=777-077-111=777-umask-111,目录dir的权限值为700=777-077=777-umask

5.文件用户用户组的管理

chown                 更改文件的拥有者                  chgrp               更改文件的拥有组

下图为文件和目录的初始拥有者和拥有组

chown westos file                 更改file文件的拥有者为westos

chgrp jishu file                       更改file文件的拥有组为jishu

chown linux.westos file       同时更改file文件的拥有者和拥有组为linux和westos

(chown、chgrp) -R (user、group) dir            更改目录本身及其中内容的拥有者或拥有组

如:

chown -R westos dir                          更改dir及其内容的拥有者为westos

chgrp -R   jishu dir                           更改dir及其内容的拥有组为caiwu 

6.特殊权限

(1)stickyid            粘制位

作用对象:一般针对于目录

作用效果:如果一个目录的stickyid开启,那么这个目录中的文件只能被文件的拥有者删除,即可提高目录中文件的安全性

方法:chmod  1原始权限  dir         或        chmod  o+t  dir

操作步骤:

<1> 实验对象的准备

mkdir /mnt/cmm                                              //在mnt里建立cmm目录
chmod 777 /mnt/cmm                                     //修改cmm目录的权限为777
su - westos                                                     //切换到westos用户
touch /mnt/cmm/westosfile                             //在cmm目录下建立westosfile文件
exit                                                                  //退出westos用户
su - linux                                                         //切换到linux用户
touch /mnt/cmm/linuxfile                      //在cmm目录下建立linuxfile文件

结果如下

<2> 不同用户建立文件的删除

此时,在linux用户下,执行以下命令

rm -fr /mnt/cmm/westosfile

结果如下

       

发现westosfile文件被删除,可知stickyid 未开启

<3> 开启stickyid并进行文件删除操作

exit                                             //退出linux用户
chmod 1777 /mnt/cmm              //将cmm的权限设置为1777(其中1为特殊权限)

此时,cmm目录的权限显示为


su - westos                                //切换到westos用户
rm -fr /mnt/cmm/linuxfile            //删除linuxfile文件

结果如下:

出现cannot remove '/mnt/cmm/westosfile': Operation not permitted 报错,表示stickyid 已开启,保护cmm目录中文件的安全

(2)sgid             强制位

作用对象:目录和文件

效果:使得目录中新建的文件自动归属到目录的所属组中

方法:chmod  2源文件权限  dir           或           chmod g+s  dir

针对于目录的操作步骤:

<1> 实验对象的准备

mkdir dir                                                            //建立dir目录
touch /mnt/dir/file                                              //在dir目录下建立file文件
chmod 777 /mnt/dir                                           //修改dir的权限为777

结果如下

上图为此实验的初始文件权限

<2> 设置sgid权限并验证
chmod g+s /mnt/dir = chmod 2777 /mnt/dir      //给dir设置sgid特殊权限

此时dir目录的权限显示

su - westos                                                       //切换到westos用户
touch /mnt/dir/file1                                            //在dir目录下建立file1文件

结果如下

 发现此时file1文件的所有组为root,证明sgid权限生效

(3)suid              冒险位

作用对象:只针对二进制的可执行文件(c程序)

效果:当运行二进制可执行文件时,都是用文件拥有者身份运行的,和执行用户无关

方法:chmod 4原权限  file             或             chmod u+s file

操作步骤:

<1> 设定监控命令

执行该命令   watch -n 1 "ps ax -o user,group,comm | grep cat " 

效果如下

<2> 实验对象的准备

su - westos                                   切换到westos用户

/bin/cat                                         进入cat

执行以上命令后,效果如下

由上图可知,该cat的拥有者和拥有组均为westos 

exit                                                                 退出westos用户

chmod u+s /bin/watch                                   给/bin/watch目录添加suid权限

su - westos                                                    切换到westos用户

/bin/cat                                                           进入cat

执行上述命令后,cat的拥有者变为root,拥有组仍为westos,表明suid权限添加成功

7.acl权限列表

全称:Aiccess Control Lists                     访问控制列表

功能:在列表中可以设定特殊用户对于特殊文件有特殊权限

(1)acl列表开启标识

执行该命令 ls -l file 结果如下

若图中红色处有“+”,则表示acl列表功能开启,无“+”贼表示acl列表功能未开启

(2)acl列表权限读取

getfacl  file                                获取file文件的acl列表权限

结果如下:

 (3)acl列表的控制

setfacl  -m  u:linux:rw     /mnt/file                                    给linux用户设定rw的acl特殊权限

此时特殊用户权限已添加成功,再运行ls -l 命令,可查看acl权限开启的标识

上图中有“ + ”表示acl列表权限已开启

setfacl  -m  g:caiwu:rx    /mnt/file                                    给caiwu用户组设定fx的acl特殊权限

 

setfacl   -x  u:linux   /mnt/file                                           删除列表中的linux用户

 

setfacl   -x  g:caiwu  /mnt/file                                          删除列表中的caiwu用户组

 

setfacl   -b  /mnt/file                                                        关闭acl权限列表

 

在上图中可以看出,acl权限列表的标识已消失,此时acl权限列表已关闭

(4)acl权限优先级

    拥有者(user) > 特殊指定用户 > 权限多的组 > 权限少的组 > 其他用户

(5)acl列表中mask控制 

含义:系统能够赋予特殊用户和特殊用户组的最大权限阈值

例:

touch file
setfacl -m u:westos:rwx /mnt/file
getfacl /mnt/file

运行以上命令后,结果如下:


chmod g-x /mnt/file                                   
getfacl /mnt/file                                          

上述命令操作是将file组权力中的可执行权限x删去,并查看acl权限列表,运行结果如下:

 

此时mask权限发生变化,其权限小于所有者的权限,我们运行以下命令解决此问题

setfacl -m m::rwx /mnt/file                        
getfacl /mnt/file

此操作是将mask的权限恢复,运行结果如下:

由上图可知,mask权限恢复正常

(6)acl列表的默认权限

setfacl -m u:westos:rwx /mnt/dir              添加westos用户的特殊权限给dir目录

setfacl  -Rm g:caiwu:rwx /mnt/dir/           添加caiwu用户组的特殊权限给dir目录及dir目录中的内容

mkdir dir
touch /mnt/dir/file{1..5}
setfacl -m u:westos:rwx /mnt/dir             
getfacl /mnt/dir/file1

以上命令运行结果如下图所示

 

不难发现,此时目录下文件的特殊权限并未添加,继续执行以下命令

setfacl  -Rm g:caiwu:rwx /mnt/dir/           //添加caiwu用户组的特殊权限给dir目录及dir目录中的内容

getfacl  /mnt/dir/file1

运行结果如下:

 

发现dir目录下的file1文件的特殊权限已添加,此时再继续新建文件,运行以下命令

touch /mnt/dir/file6

getfacl /mnt/dir/file6

运行结果如下:

 

发现file6文件的特殊权限并未添加,可得出以上命令只针对于已经存在的文件生效,新建的文件无法生效,若希望其对新建的文件也同样生效,可执行以下命令

setfacl -Rm d:u:westos:rwx /mnt/dir         //添加westos用户的特殊权限给dir目录及dir目录中的文件
touch /mnt/dir/file7
getfacl /mnt/dir/file7                                   

运行结果如下:

 

由上图可知,westos用户的特殊权限也添加到新建的文件file7上

8.attr权限

作用对象:所有用户

种类:  i      不能做任何修改                a    能添加不能删除

方法:lsattr  dir/file                     查看attr权限

          chattr  ±i/a     dir/file          设定attr权限

操作步骤:

<1> 实验对象准备

mkdir dir
touch /mnt/dir/file
lsattr -d /mnt/dir                                //查看文件的attr权限

运行结果如下图所示

 

由上图可知,无任何标识,表明attr权限未开启

<2> 添加 a 权限
chattr +a /mnt/dir                              //添加attr权限使用户只能添加不能删除
lsattr -d /mnt/dir

运行结果如下:

 

此标识表明attr中a权限已开启

<3> 验证 a 权限
touch /mnt/dir/file1

运行结果如下:

 

发现可以正常新建文件,继续执行以下命令
rm -fr /mnt/dir/file1                           

运行结果如下:

 

发现执行此命令会报错,表明attr权限正常运行
chattr -a /mnt/dir                              //取消attr权限
rm -fr /mnt/dir/file1                           

运行结果如下:

 

发现正常删除,表明attr权限已关闭

<4> 添加 i 权限
chattr +i /mnt/dir                              //添加attr权限使用户只能看而不能进行其他操作

lsattr  -d  /mnt/dir               

运行结果如下:

 

此标识表明attr权限已开启

<5> 验证 i 权限
touch /mnt/dir/file1                           
rm -fr /mnt/dir/file     
ls /mnt/dir                                       

运行结果如下:

 

不难发现,可以正常查看文件,但无法新建和删除文件,表明 i 权限正常运行

chattr  -i /mnt/dir

lsattr  -d /mnt/dir

运行结果如下:

 

表明attr权限已关闭,使用者可正常对文件进行新建和删除操作

 


版权声明:本文为my990209原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。