我在转换用户权限时遇到问题。我想将以下权限分配给某些文件/文件夹,但不知道如何将它们转换为 chmod 可以使用的格式,例如chmod 755
。
-rwxrwxrwx
将?
和
drwxr-xr-x
将?
最后
-rw-r--r--
将?
答案1
简洁版本:
权限可以包括:读取(r)、写入(w)、执行(x)
因此,权限用一行三个字符来表示,例如 rwx(授予所有权限)
当权限被拒绝时,会放置一个“-”,例如:
r--
仅授予读取权限。因为有三种类型的用户,所以我们需要 3 x 3 个字符:
owner | owner group | others
例如rwx
rwx
rwx
授予所有类型的用户所有权限。
这些权限可以用八进制数字表示,其中:
read = 4 write = 2 execute = 1 so: r-- = 4 rw- = 6 rwx = 7
例子:
rw- r-- r--
授予每个人读取权限,只有用户可以写入。八进制:
644
(4+2+0 | 4+0+0 | 4+0+0)
你的例子:
-rwxrwxrwx
可能是 的输出ls -l
,其中前面的-
表示它是一个文件。在第二个示例中:
drwxr-xr-x
该项目是一个目录 ( d
)
关于s
国旗
setuid 和 setgid(分别是“执行时设置用户 ID”和“执行时设置组 ID”的缩写)是 Unix 访问权限标志,允许用户分别以可执行文件的所有者或组的权限运行可执行文件并更改目录中的行为。它们通常用于允许计算机系统上的用户以临时提升的权限运行程序以执行特定任务。
例如passwd
( -rwsr-xr-x
) 可以代表用户更改受写保护的文件。
可以找到一个很好的描述这里在维基百科上。
标志t
(粘性位)
(再次)来自维基百科中有关粘性位 (Sticky bit) 的文章:
设置目录的粘性位后,文件系统会以特殊方式处理此类目录中的文件,因此只有文件所有者、目录所有者或 root 用户才能重命名或删除该文件。如果不设置粘性位,任何对该目录具有写入和执行权限的用户都可以重命名或删除其中包含的文件,无论文件的所有者是谁。
在 Linux 系统上,t
在文件上使用该标志时会被忽略。
从数字上讲,粘性位、setuid 位和 setgid 位是使用 4 位八进制值的第一位设置的。从man 1 chmod
:
数字模式是一到四个八进制数字(0-7),通过将值为 4、2 和 1 的位相加而得出。省略的数字假定为前导零。第一个数字选择设置用户 ID(4)和设置组 ID(2)以及限制删除或粘性(1)属性。第二个数字选择拥有该文件的用户的权限:读取(4)、写入(2)和执行(1);第三个数字选择文件组中其他用户的权限,具有相同的值;第四个数字选择不在文件组中的其他用户的权限,具有相同的值。
所以:
rwsr-xr-x
将是,使用我们之前看到的4755
转换为,以及如此处提到的 setuid 位。rwxr-xr-x
755
4
rwxrwsrwt
将是3777
,使用 的转换来rwxr-xr-x
获取,以及从 setgid 位 ( ) 和 sticky 位 ( )777
开始。3
2
1
答案2
您不需要将它们转换为数字。chmod
如果将它们拆分为用户、组和其他字段,则可以很好地理解符号。以下是等效的:
chmod 755
chmod u=rwx,g=rx,o=rx
因此,给定一组权限,将它们拆分如下:
-rwxrwxrwx == - rwx rwx rwx
drwxr-xr-x == d rwx r-x r-x
-rw-r--r-- == - rw- r-- r--
然后将第一个三元组分配给u
,将第二个三元组分配给g
,将第三个三元组分配给o
,跳过连字符:
chmod u=rwx,g=rwx,o=rwx
chmod u=rwx,g=rx,o=rx
chmod u=rw,g=r,o=r
当两个字段相同时,可以将它们合并。最后的结果chmod
将与以下相同:
chmod u=rw,go=r
并且您可以使用a
(all) 一次分配给u
和g
,o
因此第一个相当于:
chmod a=rwx
现在,有几个特殊的权限位s
:(设置用户标识/设置gid) 和t
(粘着位)。
这些显示在x
通常可见的字段上,因此如果某个目录对其他目录具有粘性位,则您会看到t
(如果存在执行权限)或T
(如果不存在执行权限)。例如,以下权限/tmp
:
drwxrwxrwt
在这种情况下,您需要将 写t
为xt
,并将s
写为rwxs
:
chmod u=rwx,g=rwx,o=rwxt
setuid 位意味着执行此文件时,它将以拥有该文件的用户身份运行,而不是以执行该文件的用户身份运行。考虑
passwd
(用于更改密码):# stat `which passwd` Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
如果我(用户
muru
)运行passwd
,则启动的进程将以root
的权限运行,而不是以我的权限运行。它通常出现在需要 root 权限才能执行某些操作(例如passwd
编辑)的二进制文件中。/etc/shadow
目录上的 setgid 位意味着其中任何新创建的文件或目录都会继承组所有权。它通常出现在用于 Web 或 FTP 服务器等的目录中。
粘性位意味着即使用户对目录有写权限,他们也不能移动或重命名其他用户的文件。它通常出现在共享目录中,例如
/tmp
。