Linux默认权限、特殊权限(suid、sgid、sticky)

声明:本笔记内容为笔者自己整理.
数年之前在"Linuxcast"学习Linux,当时记录了一份纸质版笔记,现在有意将其整理成电子版,供自己日后查阅以及分享.
感谢Linuxcast,感谢苏勇(nash_su)老师!

默认权限

首先我们新建一个文件和一个文件夹,分别查看新建的文件和文件夹的默认权限。
Linux默认权限、特殊权限(suid、sgid、sticky)
可以看到,新建的文件和文件夹是有其相对应的权限的。

  • 每一个终端,都拥有一个umask属性,来确定新建文件、文件夹的默认权限。

  • umask使用数字权限表示方式,如:022

  • 目录的默认权限是:777-umask (777减去umask)

  • 文件的默认权限是:666-umask (666减去umask)

  • 一般,普通用户的默认umask是002,root用户的默认umask是022

  • 也就是说,对于普通用户来讲:
    新建文件的权限是:666-002=664
    新建目录的权限是:777-002=775

  • 命令umask用以查看、设置umask值
    示例:Linux默认权限、特殊权限(suid、sgid、sticky)
    当前用户的umask值为002,第一位保存的是特殊权限,我们在稍后会看到,此时先只关注后三位。
    Linux默认权限、特殊权限(suid、sgid、sticky)
    进入root用户可以看到,root用户的umask值为022。
    Linux默认权限、特殊权限(suid、sgid、sticky)
    我们退出root用户后,查看umask值为002,使用umask 022修改当前用户的umask值,输入umask查看,umask值更改为022。最后我们将其恢复。

特殊权限

除了普通权限外,还有三个特殊权限:
Linux默认权限、特殊权限(suid、sgid、sticky)

  • suid:当一个文件设置了suid位后,在该文件执行时会使用这个文件所属用户的身份运行,例如我们查看passwd这个命令的文件:
    Linux默认权限、特殊权限(suid、sgid、sticky)
    上图中,我们可以看到,passwd命令的所属用户是root用户。我们知道密码都是经过加密后存在/etc/shadow文件中的,而这个文件是没有任何权限的,任何普通的用户都不能对其进行修改查看,当然,我们所说的权限都是对非root用户而言的,对于root用户来说,它拥有无限大的权限,可以进行任何操作。而passwd命令是对shadow文件进行修改,显然普通用户的权限无法完成这个操作,所以我们给passwd命令设置suid位,所以上面的rwx变成了rws,这样任何用户执行该命令时都会以root用户的身份运行。suid主要就是用于给某些命令执行时需要超过自己的权限而设立的。

  • sgid
    sgid对文件的影响与suid类似,不再赘述,而且sgid几乎不用于设置文件的权限。
    一般我们将sgid用于给文件夹设置权限。当我们给一个文件夹设置了sgid后,在这个文件夹中所有新建的文件和文件夹都会继承这个文件夹的所属组

  • sticky
    我们给文件夹设置了sticky位后,可以保证对于在这个文件夹中新建的文件,只有所属用户可以删除修改这个文件,而其他的用户只能查看这个文件。例如我们可以新建一个小组的文件夹,小组内所有用户都可以新建文件和文件夹,也可以查看别人的文件和文件夹,但是只能删除自己的文件和文件夹,不能修改或删除别人的。

设置特殊权限

  • 设置suid: chmod u+s test_folder

  • 设置sgid: chmod g+s test_folder

  • 设置sticky: chmod o+t test_folder

    与普通权限一样,特殊权限也可以使用数字的方式表示

    • SUID = 4
    • SGID = 2
    • STICKY = 1

    所以我们可以通过以下命令设置:
    chmod 4755 test_folder

That’s all.


环境:
  软件版本:VirtualBox 4.3.12 r93733
  Linux系统版本:CentOS 7 ×86_64 1511

如有纰漏,望不吝指出,不胜感激。