LMLPHP后院

使用chmod改变文件和文件夹权限

chmod 命令用来改变文件或目录的权限。

使用八进制权限码来改变文件权限(读,写,执行的权限值分别为 4, 2, 1),数字分别对应自己,同组用户,其他用户,示例:

$ chmod 760 lmlphp.txt

使用语义符号模式来改变文件权限,如下示例:

$ chmod g+x lmlphp.txt

说明如下:

  • 第一个字符有 u,g,o,a,分别代表自己,同组用户,其他用户,所有用户。
  • 第二个字符有 +,-,=,这个很容易理解。
  • 第三组字符比较多,除了 r,w,x,代表读,写,执行(对而言目录就是访问)之外,还有 X,s,t,u,g,o,但这些个人认为,除了 s ,t(粘着位)之外其他用处不大,后面会讲到。

关于 Linux 文件系统权限的另外三个要点,SUID,SGID,SBIT(粘着位)。

关于 SUID,最经典的例子就是 /usr/bin/passwd 这个文件。

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 42824 Sep 13  2016 /usr/bin/passwd

当权限位出现 s 时,代表这个文件有 SUID 权限。如果此时三个权限字符都是小写,表示还拥有 x 权限,否则会全部显示成大写字符。

拥有 SUID 权限的文件在执行时会暂时的获得文件的所有者权限,在上面的例子中也就是 root 权限,这个也就是为什么所有的用户都可以修改自己的密码的原因。用户修改的密码会加密后写入 /etc/shadow 文件中,此文件其他用户是没有任何权限的。设置 SUID 如下示例:

$ sudo chmod u+s filename

SGID 同 SUID 比较相似,但针对的是目录权限。如果一个目录有设置 SGID 权限,则所有在该目录下有写入权限的用户在该目录下创建文件时,会临时性的获得目录所属组的权限,这样写入的文件都属于目录的所属组。设置 SGID 如下示例:

$ sudo chmod g+s folder_name

SBIT 即粘着位,一般用来对目录设置权限。当一个目录被设置拥有 SBIT 权限时,用户在该目录下创建的文件只有自己和 root 权限用户可以删除,其他用户是不可以删除的。

关于 SUID,SGID,SBIT 的设置,使用数字的方式来设置更加简单。数字和权限的对应关系如下:

  • 4 表示 SUID
  • 2 表示 SGID
  • 1 表示 SBIT

设置权限时,将这些权限位放在三个数字之前,如下示例:

$ sudo chmod 1777 folder_name

权限是比较难理解的,需要长时间的练习才能融会贯通。

2024-04-27 01:36:21 1714152981 0.002792