在浩瀚互联网,总是能看到设置权限 0755 或者 755 的。
755 、644 、600 等等这些很好理解。
read == 4
write == 2
execute == 1
三组数字分别代表 owner 、group 和 others 的权限声明。
最前面的 0 是什么意思?查了一下说 755 (represented in octal notation as 0755)
0755 是八进制的一种写法?实际设置权限时,0755 和 755 有区别吗?
1
Greenm 2022-04-29 16:28:05 +08:00
root in /tmp
❯ stat -c '%a' per_test 644 root in /tmp ❯ chmod 0755 per_test root in /tmp ❯ stat -c '%a' per_test 755 |
2
maichael 2022-04-29 16:33:52 +08:00
https://ss64.com/bash/chmod.html
"The first digit = selects attributes for the set user ID (4) and set group ID (2) and save text image (1)S" 只有 3 位的时候第一位默认是 0 ,所以 0755 等价于 755 。 |
3
msg7086 2022-04-29 16:42:44 +08:00 via Android
因为权限有 4 位 8 进制,最大是 7777 。你写 755 就是 0755 。
|
4
AllenHua OP When the 4 digits number is used, the first digit has the following meaning:
- setuid=4 - setgid=2 - sticky=1 - no changes = 0 If the first digit is 0 it can be omitted, and the mode can be represented with 3 digits. The numeric mode 0755 is the same as 755. |
5
AllenHua OP |
6
ysc3839 2022-04-29 16:49:25 +08:00 via Android 1
0755 开头的 0 代表这是一个八进制数
|
7
twing37 2022-04-29 16:50:35 +08:00
|
8
HFX3389 2022-04-29 16:51:56 +08:00 1
|
9
chenxytw 2022-04-29 16:54:09 +08:00 1
首先,假设 OP 是在讨论 chmod(1) 命令的参数。
0755 和 755 没有区别。chmod 用数字做参数时,要求是 4 位 0-7 的数字,不足 4 位会自动前补 0 。 其次,如果是 C 语言调用 chmod(2) 接口的话,0755 是因为参数需要八进制数字,C 语言的八进制数字要求以 0 开头,这里的 0 不能省略。但同样的,这也已经是省略写法了,写全了应该是 00755 。 |
10
HFX3389 2022-04-29 16:55:57 +08:00 1
@AllenHua #5
特殊权限 SUID 是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(比如你用 passwd 修改密码时)。 特殊权限 SGID 特殊权限有两种应用场景: 1. 当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限; 2. 当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。 特殊权限 SBIT 可确保用户只能删除自己的文件,而不能删除其他用户的文件,当对某个目录设置了 SBIT 粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。 |
11
AllenHua OP @twing37 #7
@HFX3389 #8 @chenxytw #9 嗯嗯是的,感谢大家的解惑。默认 4 位 0-7 的数字,不足四位会自动通过前导 0 补充。 稍微看了一下 Linux 文件特殊权限 - setuid == 4 - setgid == 2 - sticky == 1 - no changes == 0 setuid 是让普通用户可以用 root 的角色运行只有 root 才能运行的程序或命令。 setgid 只对目录有效,目录被设置该权限后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。 sticky bit 可以理解为防删除位;一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。 如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用 sticky bit 权限; 设置该权限后, 就算用户对目录具有写权限,也不能删除该文件。 https://linuxize.com/post/understanding-linux-file-permissions/ https://www.cnblogs.com/cy-8593/articles/12332731.html https://segmentfault.com/a/1190000015231834 平常使用 Linux 应该不需要理会第一组特殊权限,设置好拥有者、所在组和其他的权限就够了。 ps: 大家可以贴出更加专业、讲解更细致的文章,供我们阅读。不论中英文。 |
12
ysc3839 2022-04-29 17:05:38 +08:00 via Android 1
@HFX3389 你说得也对,但是在一些 POSIX API 中,权限是需要传入八进制的 755 等数,不能传入十进制的 755 ,此时代码中会写 0755 ,此时 0 代表这是八进制数,你所说的特殊权限则被省略了,完整表示是 00755 。
|
13
documentzhangx66 2022-04-30 01:57:58 +08:00
无论是 0755 或 755 都不应该使用。这就像很多年前,不懂理论的程序员,说 TCP 会粘包一样。
专业的用法应该是 chmod u=rwx,go=rx 这种,把参数写清楚,写明白。 |