时间:2018-05-26
姓名:魏文应
一、权限的作用
通过设置权限,可以达到以下三种控制效果:
- 只允许自己访问。
- 预先指定一个用户组,允许组中的用户访问。
- 系统中任何用户都可以访问。
权限参数说明:
通过 ls -l
,列出当前文件夹文件相关参数,比如:
drwxr-xr-x. 2 root root 4096 May 23 16:54 Desktop
d | rwx | r-x | r-x | 2 | root | root | 4096 | May 23 16:54 | Desktop |
---|---|---|---|---|---|---|---|---|---|
文件类型 | 拥有者的权限 | 所属组的权限 | 其他人的权限 | 硬链接数目 | 拥有者 | 属组 | 文件大小 | 最后修改时间 | 对象 |
文件类型:
参数 | 说明 |
---|---|
p | 表示命名管道文件 |
d | 表示目录文件 |
l | 表示符号连接文件 |
- | 表示普通文件 |
s | 表示socket文件 |
c | 表示字符设备文件 |
b | 表示块设备文件 |
权限类型:
参数 | 对于文件来说 | 对于目录来说 | 没有权限 |
---|---|---|---|
r | 读 | 读(看到目录里面有什么):ls | - 表示没有该权限 |
w | 写 | 创建、删除、移动文件:touch mkdir rm mv cp | - 表示没有该权限 |
x | 执行 | 进入 : cd cat | - 表示没有该权限 |
二、权限查看与修改
- 查看权限:
ls -l
(加上 -l 参数)。 - 查看权限:
ll -d a.txt
(查看a.txt文件)。 - 查看文件具体详细信息:
stat a.txt
(查看a.txt文件)。
修改文件权限
用英文字母方法修改(中间的+、-表示添加还是删除该用户的对应权限):
参数 | 对应的意思 | 权限参数 | 举例子 |
---|---|---|---|
u | 拥有者(user) | w、r、x |
chmod u+w 表示给拥有者添加写权限 |
g | 组(group) | w、r、x |
chmod g-w 表示给组内所有用户去掉写权限 |
o | 其它用户(other) | w、r、x |
chmod o-w 表示给其它用户去掉写权限 |
a | 所有用户(all) | w、r、x |
chmod a-w 表示给所有用户去掉写权限 |
权限参数对应的数值:
权限参数 | 功能 | 对应二进制 | 对应十进制 |
---|---|---|---|
r | 写 | 100 | 4 |
w | 读 | 010 | 2 |
x | 执行 | 001 | 1 |
权限参数组合的值:
要修改的权限 | 计算方法 | 十进制的值 |
---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
-wx | 0 + 2 + 1 | 3 |
-w- | 0 + 2 + 0 | 2 |
--x | 0 + 0 + 1 | 1 |
--- | 0 + 0 + 0 | 0 |
使用数值方法修改权限:
比如,我们要把文件 a.txt 的权限修改为 rw-rw-r--
,则使用命令为 chmod 664 a.txt
。
修改文件所有者:
-
只修改所有者:
chown [用户名] [文件名]
。 -
修改所有者和主组:
chown [用户名]:[主组名] [文件名]
。 -
只修改主组:
chown :[主组名] [文件名]
。
修改创建文件时的默认权限
创建文件时,系统都会给文件一个默认权限:
-
创建文件:默认权限 最大值为6,因为Linux系统不允许文件一创建就有执行权限。如果你想文件执行,就用chmod 命令手动修改。
-
创建目录:默认权限 最大值为7,因为目录的执行权限,就是进入目录,Linux是允许的。
通过设置umask值,可以修改默认权限。
umask计算方法:
- 文件默认权限=666 - umask值, 比如:666-022=644 。
- 目录默认权限=777 - umask值, 比如:777-022=755 。
默认权限设置默认位置:一般在 /etc/profile
、$ [HOME]/.bash_profile
或 $[HOME]/.profile
中设置umask值。
文件的特殊权限
设置SUID权限
- 设置SUID位 :
chmod u+s filename
或者chmod 7644 filename
(这里假设原来权限为644) 。 - 去掉SUID设置:
chmod u-s filename
或者chmod 644 filename
(这里假设原来权限为644) 。
什么是SUID权限:
- 一般用在可执行文件上。
- 当用户执行该文件时,会临时拥有该执行文件的所有者权限。
- 所有者权限的第三位是一个小写的”s” ,就表明该执行文件拥有SUID属性:
- 拥有SUID权限属性
为什么passwd需要这个SUID权限呢? 我们先看 /etc/shadow 这个文件:
你会发现 /etc/shadow 这个文件没有任何权限,所有用户在使用 sudo passwd
修改自己密码时,要将密码写到这里面来。然而普通用户对这个文件是不能读写的啊!!!怎么办呢?这时我们想,能不能通过一个程序,让这个程序帮我们写进去呢?这个程序就是执行权限为 s 的文件程序。根本原因是:即使文件显示没有任何权限,但拥有者是可以有文件的所有权限的。 这个过程就像这样:
- 出门前,你爸爸和你说,把家看好。财产是你爸爸的(所有者),但你爸爸出门后你可以支配家里的任何东西(赋予 s 权限,这时你就是你家的所有者,你爸爸的财产都是你的!!!)。
- 出门前,你爸爸还告诉你,别人送钱来就要,其它东西不要。另外不要动家里的任何东西。(规定了程序可以执行的内容)。
- 王叔叔想把iPhone7s和钱放进你家,但它进不去(没有权限)。
- 王叔叔把你表弟叫过来,想把东西放进去,但也放不进去(没有 s 权限)。
- 王叔叔把你叫出来,要送你iPhone7s和钱,你只收了钱(其它用户调用具有 s 权限的文件)。
注意:这个权限很大,一般不要使用。具有很高的安全风险。
注意:如果文件一开始就没有可执行权限(x权限),直接设置 s权限 是无效的,会显示的是大写的 S。
设置SGID
- 设置SGID位:
chmod g+s filename
。 - 去掉SGID设置 :
chmod g-s filename
。
对文件夹设置了 s 权限以后, 创建文件时主组不一样:
- 设置SGID
比如上面的:root用户执行 chmod g+s tencent
,那么,在tencent这个文件夹中创建文件,默认主组由原来的 wwy 变成了 root 。
设置粘滞位
创建一个文件夹 mkdir 777 tencent/
(最好在 /tmp目录 下创建这个文件,因为所有用户都能进入这个文件夹)。在 777 这个权限下,所有用户都可以对 tencet文件夹内 的文件进行 删除操作。如果一个用户参加了一个文件,又不想其它用户删除这个文件,那么这个文件夹就要 粘滞位 :
- 设置粘滞位:
chmod 1777 tencent
。
设置有 粘滞位 的文件夹,权限后面原来的 执行参数x 变成有一个 参数t:
-
设置粘滞位
这样,凡是你放进 tencent 这个文件夹的文件,其它用户是删除不掉的,只能由你删除。
三、ACL 访问控制列表
ACL(Access Control List) 访问控制列表:
- 增加权限给其它组别或者用户,而不只是局限于 owner 、group、other。
- 允许 指定用户(用户A、用户B、用户C等)拥有写权限,而不再是它们整个组拥有写权限。
下面我们使用ACL工具包管理文件权限:
-
查看有没有ACL工具包: ```rpm -qf `which getfacl```` 。
-
使用 getfacl 命令查看文件权限,比如查看文件a.txt :
getfacl a.txt
。
使用setfacl设置权限:
- setfacl设置文件权限
- setfacl设置目录权限
- setfacl设置过的文件权限
网友评论