当我们将setuid设置为一个文件时,我们在终端中执行以下操作:
chmod u+s filename这个很好用。但是,八进制数4000总是与setuid (在书籍中等)相关联。
我理解(在某种程度上)文件权限、umask、setuid的概念,以及在chmod中使用八进制数。但我仍然不知道八进制数4000和setuid之间的关系。请解释一下。
发布于 2014-07-17 14:51:59
只是个会议而已。所有常量标识符都与Linux源代码中的数字相关联。其中一些是非常老的,来自于内核的第一个版本,而另一些则是最近添加的。
与"setuid“关联的常量S_ISUID是在包括/uapi/linux/stat.h中定义的,它是众多Linux头中的一个。它可以被定义为任何东西,但碰巧是04000。
正如@steeldriver所述,man 2 stat可以帮助您理解用于文件权限的不同常量的含义:
S_IFMT 0170000 bit mask for the file type bit fields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory
S_IFCHR 0020000 character device
S_IFIFO 0010000 FIFO
S_ISUID 0004000 set-user-ID bit
S_ISGID 0002000 set-group-ID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission在这个节选中,您不仅看到了常量及其数值,而且还看到了它们的选择方式。开发人员/设计人员选择常量的方式可以组合它们。例如,S_ISUID and S_IRWXU and S_IRUSR and S_IRGRP = 04740,因此权限04740的确切意思是“所有者的setuid和所有权限以及拥有组的读取权限”。
发布于 2014-07-17 15:00:19
在大多数类似Unix的系统中,文件、目录或任何其他文件系统对象都由inode表示,inode包含一个称为模式的整数,该整数描述对象的类型及其某些权限。这在POSIX状态h中有描述。
The following symbolic names for the values of type mode_t shall also be defined:
File type:
S_IFREG
Regular.
S_IFDIR
Directory.
S_IFLNK
Symbolic link.
File mode bits:
S_IRWXU
Read, write, execute/search by owner.
S_IRUSR
Read permission, owner.
S_IWUSR
Write permission, owner.
S_IXUSR
Execute/search permission, owner.
...
S_ISUID
Set-user-ID on execution.
S_ISGID
Set-group-ID on execution.
...这些都是整数常量的符号名。S_IFREG是0100000。S_IRUSR是000400。S_ISUID是004000。为了便于使用,它们是八进制的:文件模式位逻辑上可以被认为是4组,每个组3位。
在这里,您可以看到我的.profile的文件类型位和文件模式位:
$ perl -e 'printf("%#o\n", (stat(".profile"))[2]);'
0100644用户可以使用chmod系统调用(可能使用某些S_*符号常量)设置模式位(但不能使用文件类型),也可以使用chmod实用工具,它使用整数或符号名(如u+r)。
由于在实践中,模式位没有那么多不同的组合,几十年来许多Unix用户使用数字参数而不是符号名调用chmod (系统调用和命令)。0755的意思是“所有者可写,其他人可读和可执行”,0644的意思是“所有者可写,其他人可读”,04755的意思是"setuid,所有者可写,其他人可读和可执行“。
发布于 2014-07-17 14:52:35
来自chmod (debian )的(英文)手册页:(由我突出显示)
数字模式是从1到4个八进制数字(0-7),通过将值4、2和1的位相加而得。省略的数字被假定为前导零。第一个数字选择设置用户ID (4)和设置组ID (2),并限制删除或粘贴(1)属性。第二位数为拥有该文件的用户选择权限:读(4)、写(2)和执行(1);第三位数选择文件组中具有相同值的其他用户的权限;第四位数字选择对不属于文件组的其他用户具有相同值的权限。
我不知道这是否回答了你的问题,但它确实解释了数字的含义。
https://unix.stackexchange.com/questions/145114
复制相似问题