一、前言
1. 权限包含三种:w、r、x
2. 对于文件来讲,只需拥有r的权限就可读取文件内容
3. 对于目录来讲,必须拥有r、x权限才能访问目录内容,单有r权限是没有意义的
4. root用户不受任何权限限制
二、修改普通权限
命令:chmod
作用:用以修改文件的权限
参数:-R 递归地修改目录下的所有文件的权限
用法1:chmod g+w 1.txt ; chmod u+r 1.txt ; chmod o+x 1.txt
用法2:chmod u=rwx,g=r--,o=r-- 1.txt
用法3:chmod 777 1.txt ; chmod 735 1.txt
说明:
1. u、g、o分别代表用户,组和其他用户;a可以代指ugo
2. +、- 代表添加或删除对应权限
3. r、w、x代表三种权限
4. 普通权限用数字表示为:r = 4 w = 2 x = 1 如:rw- = 4+2 = 6;rwx = 4+2+1 = 7
三、修改默认权限
前言:每一个终端都拥有一个umask属性,用来确定新建文件的默认权限,比如我们新建一个目录,它的默认权限是rwxr-xr-x;我们新建一个文件,它的默认权限是rw-r--r--
umask值用数字表示:
[[email protected] ~]# umask 0022
说明:
1. 第一个0表示特殊权限,后面三个代表ugo权限
2. 在Linux中,默认目录权限是755,文档权限是644
如何修改umask值:
[[email protected] ~]# umask 055
如何通过umask值来计算默认权限:
目录的计算:(rwxrwxrwx)– (umask值)=(目录权限)
文件的计算:(rw-rw-rw-)–(umask值)= (文件权限)
例子:
如果设置 umask 为 001 (用字母表示为--------x), 那么用户默认创建的目录和文件的权限是什么样子的?
目录的权限是:(rwxrwxrwx)–(--------x)=(rwxrwxrw-)= 776
文件的权限是:(rw-rw-rw-)–(--------x)=(rw-rw-rw-)= 666
所以得出结论,当umask为001时,目录权限是776,文件权限是666
四、修改特殊权限
1 特殊权限:suid
suid是什么:suid(set_uid)让普通用户对可执行的二进制文件(如passwd这个命令)临时拥有该文件所属用户的权限来运行(这里要注意的是suid权限只对可执行的二进制文件有效,对普通文件是无效的)
我们来举个例子:
假设我们现在是以普通用户登录,当我们要改密码时使用passwd命令,我们改密码需要借用/etc/shadow这个配置文件(/etc/shadow是用来存放密码的配置文件),但是如下,/etc/shadow是没有任何权限的,也就是说这个文件我们不可读不可写不可执行
[[email protected] ~]# ls -l /etc/shadow ----------. 1 root root 629 11月 3 03:28 /etc/shadow
这时我们怎么办呢?我们就要借助root用户的权限(注意:root用户不受任何权限的限制)来执行passwd这个命令以修改/etc/shadow这个配置文件
如果你不想让普通用户修改自己的密码,只需要chmod u-s /usr/bin/passwd
怎样添加suid权限?
语法一:chmod u+s 文件名
语法二:chmod 4755 文件名 (4表示s权限,755表示普通权限)
说明:与普通权限一样,特殊权限也可以使用数字方式表示:suid = 4、sgid = 2、sticky = 1
我们来举个例子:
我们知道,普通用户是不能浏览/root目录的,因此我们要给ls这个命令添加s权限(注意只有该文件的所属用户才能添加特殊权限),以临时拥有所属用户的权限来查看/root目录
[[email protected] ~]# su – pzk //我们先切换到普通用户 [[email protected] ~]$ ls /root/ //普通用户没有权限浏览/root目录 ls: 无法打开目录/root/: 权限不够 [[email protected] ~]$ su - //我们切换到root用户去把ls命令添加s权限 密码: [[email protected] ~]# chmod u+s /bin/ls [[email protected] ~]# su - pzk [[email protected] ~]$ ls /root/ //ls拥有了s权限就可以浏览了 test.sh test.txt
那么,我们再来看一个现象,如下图,在权限位第3位出现了s和S,这又是什么情况呢?
为什么特殊权限有的大写有的小写?
系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母(s, s, t)否则显示为大写字母(S, S, T),我们知道,权限位的前3位是user的权限,当出现s的时候,表明user还拥有x权限,当出现S的时候,user就不拥有x权限了,但是普通用户使用ls命令的时候,使用的权限位是other的权限位,因此对于S不拥有x权限就没关系了,只要other这个权限位中有x权限就可以运行ls这个命令了(root用户倒是无所谓了,因为root用户不受任何权限限制)
2 特殊权限:sgid
sgid是什么:我们前面讲过,当s这个标志出现在文件所有者的x权限上时,则就被称为Set UID。那么把这个s放到文件的所属用户组x位置上的话,就是SGID
当出现s的时候,表明拥有x权限,当出现S的时候,不拥有x权限
sgid有什么用:和suid一样,只是sgid是获得该程序所属用户组的权限,以所属组的权限去执行。
对sgid有几点需要我们注意:
1. sgid对二进制程序有用;
2. 程序执行者对于该程序来说,需具备x的权限;
3. sgid主要用在目录上;
如何添加sgid权限?
语法一:chmod g+s 文件名
语法二:chmod 2755 文件名 (2表示sgid权限,755表示普通权限)
说明:与普通权限一样,特殊权限也可以使用数字方式表示:suid = 4、sgid = 2、sticky = 1
3 特殊权限:sticky
sticky是什么:前面的suid和sgid是针对user和group来设置的,那么sticky就是针对others来设置的了,和suid/sgid一样,只是功能不同而已
sticky有什么用:SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件,但仅有该文件/目录建立者与root能够删除自己的目录或文件。
当出现t的时候,表明拥有x权限,当出现T的时候,不拥有x权限
如何添加sticky权限?
语法一:chmod o+s 文件名
语法二:chmod 1755 文件名 (1表示sticky权限,755表示普通权限)
说明:与普通权限一样,特殊权限也可以使用数字方式表示:suid = 4、sgid = 2、sticky = 1