Linux 中 0755 和 755 有什么区别?

2022-04-29 16:24:49 +08:00
 AllenHua

在浩瀚互联网,总是能看到设置权限 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 有区别吗?

3975 次点击
所在节点    Linux
13 条回复
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
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 。
msg7086
2022-04-29 16:42:44 +08:00
因为权限有 4 位 8 进制,最大是 7777 。你写 755 就是 0755 。
AllenHua
2022-04-29 16:46:14 +08:00
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.
AllenHua
2022-04-29 16:48:33 +08:00
@maichael #2
@msg7086 #3
@AllenHua #4

平常都没有用到第一位数字,不知道会在何种场景下使用?

设置 uid gid sticky……吗
ysc3839
2022-04-29 16:49:25 +08:00
0755 开头的 0 代表这是一个八进制数
twing37
2022-04-29 16:50:35 +08:00
HFX3389
2022-04-29 16:51:56 +08:00
@ysc3839 #6 并不是,前面的数字代表是特殊权限。
0 代表不设置特殊权限,
4 代表设置 SUID ,
2 代表设置 SGID ,
1 代表设置 SBIT 。
chenxytw
2022-04-29 16:54:09 +08:00
首先,假设 OP 是在讨论 chmod(1) 命令的参数。
0755 和 755 没有区别。chmod 用数字做参数时,要求是 4 位 0-7 的数字,不足 4 位会自动前补 0 。

其次,如果是 C 语言调用 chmod(2) 接口的话,0755 是因为参数需要八进制数字,C 语言的八进制数字要求以 0 开头,这里的 0 不能省略。但同样的,这也已经是省略写法了,写全了应该是 00755 。
HFX3389
2022-04-29 16:55:57 +08:00
@AllenHua #5

特殊权限 SUID 是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(比如你用 passwd 修改密码时)。

特殊权限 SGID 特殊权限有两种应用场景:

1. 当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;

2. 当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。

特殊权限 SBIT 可确保用户只能删除自己的文件,而不能删除其他用户的文件,当对某个目录设置了 SBIT 粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
AllenHua
2022-04-29 17:01:45 +08:00
@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: 大家可以贴出更加专业、讲解更细致的文章,供我们阅读。不论中英文。
ysc3839
2022-04-29 17:05:38 +08:00
@HFX3389 你说得也对,但是在一些 POSIX API 中,权限是需要传入八进制的 755 等数,不能传入十进制的 755 ,此时代码中会写 0755 ,此时 0 代表这是八进制数,你所说的特殊权限则被省略了,完整表示是 00755 。
documentzhangx66
2022-04-30 01:57:58 +08:00
无论是 0755 或 755 都不应该使用。这就像很多年前,不懂理论的程序员,说 TCP 会粘包一样。

专业的用法应该是 chmod u=rwx,go=rx 这种,把参数写清楚,写明白。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX