ROOT
ROOT
文章目录
  1. 文件类型
  2. 文件权限
  3. 文件归属
  4. 权限管理
  5. 设置权限
  6. SUID、SGID、Sticky bit
  7. 更改归属用户、归属组
  8. 参考链接

Linux 权限管理

Linux 权限管理非常灵活,不像 windows 那一坨那么混乱。

现在来谈谈 Linux 下的权限管理吧。

vagrant@lucid32:/tmp$ ls -l /tmp/vagrant-shell
-(1)rwx(2)r-x(3)r-x(4) 1 vagrant(5) vagrant(6) 95 2016-07-29 04:49 /tmp/vagrant-shell

文件类型

首先来看第一部分,第一部分 - 表示文件类型,有以下几种文件类型:

符号 类型
- 普通文件
d 文件夹
l 符号链接
b 块设备文件
c 字符设备文件
s 套接文件
p 管道文件

文件权限

剩下的 9 个字符分为 3 组:分别是 归属用户 归属群组 其它用户 对于该文件的权限。-表示没有相应权限。

符号 权限
r 可读
w 可写
x 可执行

文件归属

第 5、6 部分分别代表归属用户、归属群组,也就是 vagrant:vagrant。 其他部分不在讨论范围内。。

权限管理

重点来了,如果用户没有执行权限,那么他执行的时候会提示:

Permission denied

曾经的我多么幼稚,遇到这种情况就扔到 vFAT 分区执行 = =

对于文件夹,必须拥有它的可执行权限,才能够使用 cd 命令进入该文件夹,我刚刚作死把 /usr/bin 的执行权限去掉了,和 rm -rf /usr/bin 效果雷同。。

拥有可读权限,才能够使用 ls 命令查看该文件夹的文件列表。

有了权限管理,就可以限制哪些人、哪些组能够访问文件了,而 root 拥有最高权限,可以无视一切 = =

综上,应该对权限管理有个认识了,那么下面来说说怎么设置权限。

可以用 3 位 二进制 来表示权限,拥有什么权限那一位就为 1,或者用一位 八进制 来表示,如下

权限 r w x
二进制 100 010 001
八进制 4 2 1

比如,r-x权限,可以表示成二进制的101,也可以表示成八进制的5

前面说到,一个文件的权限有 3 组,分别为:归属用户 归属组 其他用户 对应的权限,虽然用 9 位二进制来表示比较直观,但是用 3 位八进制来表示比较方便。

现在应该能明白常见的 755 权限了吧,其实就是:rwxr-xr-x权限。

设置权限

设置权限用 chmod 命令,比如,我想要一个文件只有我能访问,其他人都不能访问,那么我可以这样:

vagrant@lucid32:/tmp$ chmod 700 vagrant-shell
vagrant@lucid32:/tmp$ ls -l
total 4
-rwx------ 1 vagrant vagrant 95 2016-07-29 04:49 vagrant-shell

chmod还有几个常用的选项,如下

  • a 所有用户 u 归属用户 g 归属群组 o 其它用户
  • = 具有权限 + 增加权限 - 去除权限
  • r 可读权限 w 可写权限 x 可执行权限

那么上述的情况也可以这样写:

chmod go-rwx vagrant-shell

以上表示归属组、其他用户去掉 rwx 权限。

chmod a+rwx vagrant-shell

以上表示所有人都有 rwx 权限。

SUID、SGID、Sticky bit

某些情况下,需要以可执行文件归属用户的身份执行该文件,可以为该文件设置 SUID。同样,设置SGID 能够以该文件归属群组的身份执行它。

例如:用户自行设定密码。出于安全方面的考虑,/etc/shadow只能由 root 用户直接修改。 -rw------- root root /etc/shadow

这个时候,可以为程序 /usr/bin/passwd 设置 SUID,当普通用户执行passwd 命令时,便能够以该程序归属用户 root 的身份修改 /etc/shadow 文件。而 passwd 程序自身带有身份验证机制,不能通过验证时拒绝执行,从而保证了安全。

ls -l /usr/bin/passwd
-r-s--x--x root root /usr/bin/passwd    

我们发现,归属用户的可执行权限位使用s,表示SUID。同样,归属群组的可执行权限位使用s,表示SGID。任何用户或群组都拥有 “其它用户” 的权限,所以不需要以其它用户身份执行文件,其它用户的可执行权限位便不会出现s。该权限位可能出现的属性为t ,也就是粘着位Sticky bit

ls -ld /tmp
drwxrwxrwt root root /tmp    

粘着位表示任何用户都可能具有写权限,但只有该归属用户或 root 用户才能够删除。

SUIDSGIDSticky bit也可以像权限一样,使用一个八进制数表示,如下:

  • 4 SUID
  • 2 SGID
  • 1 Sticky bit

通过在 chmod 命令中使用 4 个八进制数的表达式,如 4755,用第一位表示SUIDSGIDSticky bit,便能够为文件设置这些特殊权限。示例:

chmod -R 4755 path

更改归属用户、归属组

更改归属用户、组可以用 chown 命令来实现,例如

vagrant@lucid32:/tmp$ sudo chown netcan:netcan vagrant-shell
vagrant@lucid32:/tmp$ ls -l
total 4
-rwxrwxrwx 1 netcan netcan 95 2016-07-29 04:49 vagrant-shell

参考链接

支持一下
扫一扫,支持Netcan
  • 微信扫一扫
  • 支付宝扫一扫