目录
①文件属性mode
②文件权限判断逻辑
③Linux的进程安全上下文法则
④文件特殊权限SUID、SGID、SBIT
set uid
set gid
sticky bit
⑤文件默认权限:umask
⑥更改文件的权限:
更改文件属主和属组 :chown
更改文件属组:chgrp(被chown替代,不常用)
更改文件的权限:chmod
更改文件的特殊属性:chattr(重要)
⑦文件权限实战
>>>Linux一切皆文件,多个用户登录操作系统,系统有默认文件,root文件,每个用户也有自己的文件,此时需要对文件系统进行
权限分配和管理,如何分配管理? 在每个文件分配属主owner、属组group、其他other三个权限属性
>>>ls -al test :输入命令查看文件权限
drwxrwxrwx. 2 bei bei 4096 Sep 13 18:35 test
>>>属主:用户若是文件的主人,则匹配属主的权限,权限在文件的左三位,即第一个rwx
>>>属组:用户与属组在同一个组,则匹配属组的权限,权限在文件的中三位,即第二个rwx
>>>其他:用户既不是属主也不是属组,则匹配其他的权限,权限在文件的右三位,即第三个rwx
r、w、x对于文件而言
权限 |
说明 |
r |
可以使用文件查看类工具获取文件中的内容 |
w |
可以修改文件中的内容 |
x |
可以把二进制可执行文件向内核申请,将文件启动为一个进程 |
r、w、x对于目录而言:
权限 |
说明 |
r |
可以使用ls命令查看此目录中的文件列表 |
w |
可以在此目录中创建、删除文件 |
x |
可以cd进入此目录,可以使用ls -l查看目录中的文件列表 |
>>>前提条件:用户能够成功进入到文件所在的目录,即对操作的文件所在目录有x权限
例:这个test/目录,other即使有w权限(无x权限)不能在test/目录中删除、创建、修改文件
>>>删除文件:看用户是否具备对目录的w权限
(1)先判断用户是以什么身份删除文件,按照owner->group->other顺序进行匹配
(2)若是目录的属主,目录权限的左三位有w权限,删除文件成功,无w权限,删除失败
(3)若不是目录属主,但在目录的属组中,如果目录权限的中三位有w权限,则删除文件成功,无则失败
(4)若不是目录属主,也不在目录的属组中,如果目录权限的右三位有w权限,则删除文件成功,无则失败
>>>创建文件:和用户删除文件判断逻辑一致
>>>修改文件:看用户是否具备对修改的文件的w权限
(1)先判断用户是以什么身份修改文件,按照owner->group->other顺序进行匹配
(2)若是文件的属主,文件权限的左三位有w权限,修改文件成功,无w权限,修改失败
(3)若不是文件属主,但在文件的属组中,如果文件权限的中三位有w权限,则修改文件成功,无则失败
(4)若不是文件属主,也不在文件的属组中,如果文件权限的右三位有w权限,则修改文件成功,无则失败
>>>前提条件:用户能够成功进入到目录所在的目录,即对操作的目录所在的目录有x权限
例:想要删除、创建、修改test/目录下的test/dir/目录,前提条件是对test/目录有x权限
>>>删除目录:看用户是否具备对上一级目录的w权限
(1)先判断用户是以什么身份删除文件,按照owner->group->other顺序进行匹配
(2)若是上一级目录的属主,上一级目录权限的左三位有w权限,删除目录成功,无w权限,删除失败
(3)若不是上一级目录属主,但在上一级目录的属组中,
如果上一级目录权限的中三位有w权限,则删除目录成功,无则失败
(4)若不是上一级目录属主,也不在上一级目录的属组中,
如果上一级目录权限的右三位有w权限,则删除目录成功,无则失败
>>>创建目录:和用户删除目录判断逻辑一致(包括改名、改时间戳)
>>>修改目录(在目录下创建、删除文件):看用户是否具备对修改的目录的w权限,与上一级目录是否有w权限无关
(1)先判断用户是以什么身份修改目录,按照owner->group->other顺序进行匹配
(2)若是目录的属主,目录权限的左三位有w权限,修改目录成功,无w权限,修改失败
(3)若不是目录属主,但在目录的属组中,如果目录权限的中三位有w权限,则修改目录成功,无则失败
(4)若不是目录属主,也不在目录的属组中,如果目录权限的右三位有w权限,则修改目录成功,无则失败
启动进程的权限问题:(先不讨论特殊权限SBIT)
>>>能否启动一个可执行程序文件作为一个进程PID,取决于此用户是否对这个文件有可执行权限x
例:能否将/bin/cat执行为一个进程,取决于用户是否对此文件有x权限
/bin/cat的owner,group,other都具备x权限,所以都可以将此文件启动为一个进程
[root@localhost ~]# ls -al /bin/cat
-rwxr-xr-x. 1 root root 48568 Mar 22 2017 /bin/cat
>>>若进程启动成功,进程就拥有启动者对应的权限,进程对文件的访问(修改)权限,就是启动者对文件的访问(修改)权限
例:#/bin/cat /etc/sudoers :/bin/cat进程是否能读sudoers文件的内容,取决于进程是以谁的身份启动,
进程启动者若是owner或group,则可读取sudoers文件,若是other,则不可读取
[root@localhost ~]# ls -al /etc/sudoers
-r--r-----. 1 root root 3876 Aug 6 20:40 /etc/sudoers
>>>文件特殊权限有三种:set uid、set gid、sticky bit
>>>前提条件:用户具备此二进制可执行文件的x权限
[root@localhost ~]# ls -al executable_file
-rwxr--r--. 1 root root 0 Jul 11 20:44 executable_file
[root@localhost ~]# chmod u+s executable_file :通过chmod命令赋予二进制可执行文件suid权限
[root@localhost ~]# ls -al executable_file
-rwsr--r--. 1 root root 0 Jul 11 20:44 executable_file
>>>前提条件:用户具备此目录的x权限和w权限
[root@localhost ~]# ls -al dir/
drwxr-xr-x. 2 root root 4096 Sep 13 19:32 .
[root@localhost ~]#chmod g+s dir/ :通过chmod命令赋予目录sgid权限
[root@localhost ~]# ls -al dir/
drwxr-sr-x. 2 root root 4096 Sep 13 19:32 .
>>>前提条件:用户具备此目录的x权限和w权限
[root@localhost ~]#chmod o+t dir/:通过chmod命令赋予目录sbit权限
[root@localhost ~]# ls -al dir/
drwxr-xr-t. 2 root root 4096 Sep 13 19:32 .
>>>全称:user file-creation mode mask(用户文件创建掩码)是用户在创建文件或目录时默认权限的基础
>>>在没有umask时,文件的默认权限是0666(rw-rw-rw-),目录的默认权限是0777(rwxrwxrwx)
[root@localhost ~]# umask :umask默认值为0022
0022
>>>默认权限(目录0777,文件0666)- umask权限(0022) = 实际权限(目录0755,文件0644)
目录的权限为 “rwxrwxrwx”-“----w--w-”=“rwxr-xr-x”
文件的权限为 “rw-rw-rw-”-“----w--w-”=“rw-r--r--”
默认情况下,创建目录的权限值为755 即rwxr-xr-x ,创建普通文件的权限值为644 即rw-r--r--
>>>当前登录窗口临时修改方式:(退出重新登录umask又变回0022)
[root@localhost ~]# umask 0002 :修改umask值为0002
[root@localhost ~]# umask
0002
>>>永久有效的修改方式
[root@localhost ~]# vim /etc/profile :输入此命令修改配置文件/etc/profile第64行
第一个umask不用修改,只需修改第二个umask,然后重新登录即可永久修改
更改文件属主和属组 :chown
更改文件属组: chgrp
更改文件的权限: chmod
更改文件的特殊属性: chattr (查看特殊属性 lsattr)
chown - change file owner and group
>>>修改文件的属主 #chown username file
>>>修改文件的属组 #chown :groupname file (属组名前需要加: )
>>>修改文件的属主和属组 #chown username:groupname file (属组名前需要加: )
>>>可以用数字用户标识替代用户名,数字组标识替代属组名
>>>重要参数:-R :递归修改目录及目录下所有文件及其子目录的所有属主和属组
(1)字符修改方式 (推荐,不容易错)
>>>chmod u=rwx,g=r-x,o=r-- dir/ :将目录的权限设置为rwxr-xr--
>>>chmod u+w dir/ :给owner增加w权限
>>>chmod u-w dir/ :给owner减去w权限
(2)数字修改方式
#chmod 664 file :将file权限设置为rw-rw-r--
chattr - change file attributes on a Linux file system
重要属性 |
描述 |
A |
表示文件或目录的atime不可修改 |
a |
表示只能追加不能删除 [root@localhost tmp]# mkdir test [root@localhost tmp]# chattr +a test :给test目录赋予a属性 [root@localhost tmp]# touch test/test.txt [root@localhost tmp]# rm -f test/test.txt :由于有a属性,无法删除 rm: cannot remove `test/test.txt': Operation not permitted |
s |
表示会将数据同步写入磁盘中 |
c |
表示自动压缩该文件,读取时会自动解压 |
i |
表示文件不能写入、删除、重命名、设定硬链接、新增数据 |
查看文件的特殊属性:lsattr
lsattr - list file attributes on a Linux second extended file system
>>>lsattr dir file :查看文件的特殊权限
1.不允许任何用户在root下添加定时任务
/var/spool/cron/root (-rwx------)赋予特殊属性i 即对此文件用chattr命令+i参数
2.Linux上所有用户都只能在dir目录下管理自己的文件,不允许管理其他用户的文件
#chmod o+w dir/ :目录所有人都可读可写可执行
#chmod o+t dir/ :用户不能管理该目录下其他用户的文件
3、把dir目录及目录下的文件和子目录的属主属组都修改为gentoo
#chown -R gentoo:gentoo :使用-R参数递归修改整个文件夹的属主属组
4.Linux系统中目录创建的默认权限是多少?文件的权限是多少?如何修改文件和目录的默认权限
目录创建的默认权限:rwxr-xr-x
文件创建的默认权限:rw-r--r--
修改默认权限:(1)#umask 数值 :临时修改umask的值
(2)vim /etc/profile:、永久修改umask的值
5.修改文件的权限,使得文件所有者可读可写可执行,文件属组可读可写,其他用户可写可执行
#chmod u=rwx,g=rw,o=wx file
#chmod 763 file
6.如何使得文件只能写不能删除?如何使得文件不能被写入、删除、重命名、设定硬链接和新增数据
#chattr +a file:文件只能写不能删除
#chattr +i file:件不能被写入、删除、重命名、设定硬链接、新增数据
7.疏理普通用户修改账号密码的过程,并对修改过程的权限判断进行梳理,说明密码修改成功的原因
/usr/bin/passwd是用户修改密码的二进制可执行文件
/etc/shadow是存放用户密码的配置文本
普通用户修改密码过程:执行passwd(rwsr-xr-x)二进制可执行文件时,用户有对passwd的x权限,并且passwd有set uid权限,
用户临时获得该passwd文件属主root的权限,可以去修改/etc/shadow(---------)的文本内容
说明:
>>>以上内容是本人学习的总结
>>>如还有错误,请留言,指正
>>>亦可分享自己的想法,互相学习