目录
1 权限
权限的作用:规定哪些用户对哪些资源可以如何使用。
1.1 权限的查看
(1)以root身份在tmp目录下创建一个目录test与一个文件test.txt。
(2)查询文件与目录的权限信息。使用命令 ls -l 文件名
查询文件权限,使用命令 ls -ld 目录名
查询目录权限。可以分别缩写为 ll 文件名 、 ll -d 目录名 。
1.2 权限解读
如上图中的test.txt文件,前10位为“- rw- r– r-- ”,各位表示含义如下:
(1)第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:
- -代表文件
- d 代表目录
- l 代表链接
- c 代表字符型设备
- b 代表块设备
- n 代表网络设备
(2)之后每3个字符组成一个组,共有3组。这三组的含义分别为,①第1组表示对象的所属者owner权限;②第2组表示对象所属组group权限;③第3组表示系统其他用户other权限(其他用户是指既不是文件的所有者又不是文件所属组中的用户)。每一组定义了3种访问权限:
- r 代表对象是可读的
- w 代表对象是可写的
- x 代表对象是可执行的
(3)而对于文件和目录,这三种权限的详细解读如下:
-
1)文件权限:
① r(read):可读取此文件的实际内容,如读取文本文件的文字内容;
② w(write):可以编辑、新增或是修改文件的内容(不包含删除文件);
③ x(eXecute):该文件具有可以被系统执行的权限;若文件不是可执行文件,通常情况下是没有可执行权限的。 -
2)文件夹权限:
① r:表示具有读取目录结构列表的权限,当你具有一个目录的r权限时,表示你可以查询到该目录下的文件名数据;
② w:表示具有改变目录结构的权限,包括新建文件与目录、删除文件与目录、重命名文件及目录、移动文件及目录位置;
③ x:代表用户能否进入该目录成为工作目录。
2 权限修改
2.1 修改文件/目录普通权限
2.1.1 方法1:指定权限修改
(1)方法:使用公式 chmod 对象 算数运算符 权限 文件
,对特定文件的特定用户或组修改权限。该方法对目录同样适用。
(2)参数说明:
- 1)对象:u代表所属者、g代表所属组、o代表其他用户、a代表所有人。
- 2)算数运算符:+ 附加权限、- 移除权限、= 指定权限。
- 3)权限:r w x。
(3)例子:修改test.txt文件权限为其他用户不可读,输入命令为chmod o-r /tmp//test.txt
。再查看权限,从下图可以看出,此时其他用户连可读权限都没有了。
2.1.2 方法2:八进制赋权法
(1)方法:采用0~7的数字代表不同用户的权限,采用命令 chmod xxx 文件
,对特定文件的特定用户或组修改权限,其中每一个x表示0~7。该方法对目录同样适用。
(2)参数说明:
x数值 | 二进制数值 | 权限 |
---|---|---|
0 | 000 | — |
1 | 001 | –x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r– |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
(3)使用技巧:记住1(–x)、2(-w-)、4(r–)对应的权限,其余数值可以转为这三个数相加,也代表其权限的叠加。
(4)例子:使用该方法,修改test.txt权限为所有用户可读可写可执行。
2.2 修改文件所属信息
(1)修改文件所属者:使用命令 chown 新所有者 文件
。例如,将/tmp/test.txt的所属者改为tom。
(2)修改文件所属组:使用命令 chgrp 新所有组 文件
。例如,将/tmp/test.txt的所属组改为tom。
2.3 修改目录及可执行文件的特殊权限
2.3.1 粘滞位
功能:粘滞位针对目录赋权,目录中创建的文件只有建立者可以删除,其他人不能删。
赋权方法: chmod o+t 目录名
。
例子:验证粘滞位
(1)在没有设置粘滞位之前:
①新建用户tom和Jerry;
②采用root用户在/tmp目录下建立一个具有最高权限的目录test;
③tom在test目录下建立新文件tom.txt;
④jerry在test目录下建立新文件jerry.txt,jerry去删除gerry.txt和tom.txt,均可以删除。
(5)设置粘滞位及验证:①root用户修改目录test的权限,输入命令chmod o+t /tmp/test
给test设置粘纸位;②tom在test目录下建立新文件tom.txt;③erry在test目录下建立新文件jerry.txt,jerry去删除jerry.txt和tom.txt,jerry.txt可以删除,但tom.txt不可以删除;
2.3.2 sgid权限
功能:sgid针对目录建立的权限,在该目录中建立的文件所属组继承父目录的所属组。
赋权方法: chmod g+s 目录名
。
例子:root用户修改目录test的权限,输入命令chmod g+s /tmp/test
给test设置sgid。
2.3.3 suid权限
功能:suid是针对可执行文件建立的权限。赋权后,无论谁运行该可执行文件,均具有该文件所属者的权限。
赋权方法: chmod u+s 目录名
。
例子:假如tom想查看并修改/etc/shadow。
①首先输入命令查看/etc/shadow的权限。一般情况下看不了/etc/shadow。tom输入vim /etc/shadow
查看/etc/shadow,发现权限不足看不了。
②对vim命令设置suid权限。输入which vim
查看vim命令在哪?输入命令chmod u+s /usr/bin/vim
,给vim设置suid权限。
③tom用户再去查看/etc/shadow。输入命令,可以查看了,并且还可以修改。
tips:
任何文件的权限都限值不了root用户。
2.4 撤销权限
将上述命令的+号改为-号,或者采用八进制赋值法将对应权限位设为0.
3 与权限相关的其他操作
3.1 按权限查找文件
思路:使用find命令配合八进制赋权法进行查找。find可以查找什么名的文件在哪?什么类型的文件在哪?什么权限的文件在哪?
查找方法: find 目标目录 -perm xxxx
,perm表示对权限进行查找。命令中不同位的x含义如下:
- 第1位x:表示特殊权限,1表示粘滞位已赋权、2表示sgid已赋权、4表示suid已赋权。
- 第2位x:表示所属者权限rwx。
- 第3位x:表示所属组权限rwx。
- 第4位x:表示其他用户权限rwx。
例子:find /usr/bin -perm 4755
3.2 设置系统不再允许添加新用户
思路:创建用户的时候哪些地方会改变?会变化的主要有:/etc/group、/etc/passwd、/etc/shadow、/home/xxxx等,那么我们是否可以从这些文件入手,锁定这些文件,使文件不再变化。
使用方法: chattr +i 文件...
。其中+i表示增加不可更改的属性,文件可以为多个,主要可以是以下文件:
- /etc/group:表示不再新增组。
- /etc/passwd:表示不再新增用户,一般配合shadow使用。
- /etc/shadow:表示不再新增用户,一般配合passwd使用。
例子:将 /etc/group、/etc/passwd、/etc/shadow文件的属性设置为不可更改。若需要撤销,只需要将+改为-.
3.3 设置umask
当一个文件被不同用户创建时,其默认权限是不一样的,当一个文件被普通用户和root用户创建时,文件所属者的默认权限不同,这是因为不同用户的umask不一样。其中umask是指在建立文件时预设的权限掩码。
默认情况下,文件或目录的权限=最高权限-所属者的umask。默认情况下,root的umask为0022,普通用户的umask为0002。默认情况下,目录的最高权限为0777,文件的最高权限为666。以root用户为例,新建目录时默认权限为0777 - 0022 = 0755;新建文件时默认权限为666 - 022 = 644。
那么为什么默认情况下,root的umask为0022,普通用户的umask为0002呢?在操作系统中的/etc/profile文件以及/etc/bashrc文件有对umask值进行规定。
3.4 修改密码默认最长有效期时间
保存密码默认参数的文件在/etc/login.defs中,使用vim编辑器修改其默认值,即可完成修改。
4 总结权限相关命令
4.1 chmod 命令
功能:改变文件的访问权限。
用法:主要有以下两种:
(1)chmod [选项] 模式(mode) 文件(file)
模式:[ugoa…][[+ - =][rwxXstugo…]…][,…]
①u代表所属者、g代表所属组、o代表其他用户、a代表所有人。
② +附加权限、- 移除权限、= 指定权限。
③ 字符串’rwxXstugo’:(r )读权限、(w)写权限、 (x)执行权(或对目录的访问权),(X)只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性,(s)同时设定用户或组ID,(t)粘滞位(保存程序的文本到交换设备上),(u)目标文件属主,(g)目标文件属主所在的组,(o)其他用户。
④例子:(因此,'chmod g-s file’撤消sgid位,'chmod ug+s file’同时设置了suid和sgid位,'chmod o+s file’则没有进行任何设置)
(2)chmod [选项] 八进制模式 文件
八进制模式:xxx,x为0~7的数字。
4.3 chown命令
功能:改变文件所属者
用法:chown 新所有者 文件
4.4 chgrp命令
功能:改变文件所属组
用法:chown 新所有组 文件
4.5 chattr命令
功能:修改文件属性
用法:chattr [ -RV ] [ -v version ] [ mode ] files
- 模式:[+ - =] 属性
例子:chattr +i /etc/group /etc/passwd /etc/shadow
。其中+i指增加不可更改的属性。
4.6 find命令
功能:查找,可以查找什么名的文件在哪?什么类型的文件在哪?什么权限的文件在哪?
用法:find [path...] [expression]
例子:对权限的查找,find /usr/bin -perm 4755
。其他详细的用法可以通过命令man find
查看帮助手册。
4.7 其他
echo $PATH #查看PATH变量里保存了哪些信息
5 归纳
(1)掌握设置权限的作用;
(2)掌握权限的查看方式;
(3)能够解读文件和目录的权限表达式,理解权限表达中各字段代表的含义;
(4)掌握修改文件和目录权限的两种方法;
(5)掌握修改目录和可执行文件的特殊权限(粘滞位、sgid和suid)的方法;
(6)了解与权限相关的其他操作。
参考文章
[1] 《linux文件权限和文件夹权限解读》
[2] 《Kali Linux系统调整文件及目录权限》
[3] 视频传送门