1-7RHEL7文件的权限管理


时间: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 这个文件:

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) 访问控制列表:

  • 增加权限给其它组别或者用户,而不只是局限于 ownergroupother
  • 允许 指定用户(用户A、用户B、用户C等)拥有写权限,而不再是它们整个组拥有写权限。

下面我们使用ACL工具包管理文件权限:

  • 查看有没有ACL工具包: ```rpm -qf `which getfacl```` 。

  • 使用 getfacl 命令查看文件权限,比如查看文件a.txt : getfacl a.txt

使用setfacl设置权限:

  • setfacl设置文件权限
  • setfacl设置目录权限
  • setfacl设置过的文件权限
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容