首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用setuid和octal 4000的文件权限

使用setuid和octal 4000的文件权限
EN

Unix & Linux用户
提问于 2014-07-17 14:32:38
回答 4查看 17.4K关注 0票数 9

当我们将setuid设置为一个文件时,我们在终端中执行以下操作:

代码语言:javascript
复制
chmod u+s filename

这个很好用。但是,八进制数4000总是与setuid (在书籍中等)相关联。

我理解(在某种程度上)文件权限、umask、setuid的概念,以及在chmod中使用八进制数。但我仍然不知道八进制数4000和setuid之间的关系。请解释一下。

EN

回答 4

Unix & Linux用户

发布于 2014-07-17 14:51:59

只是个会议而已。所有常量标识符都与Linux源代码中的数字相关联。其中一些是非常老的,来自于内核的第一个版本,而另一些则是最近添加的。

与"setuid“关联的常量S_ISUID是在包括/uapi/linux/stat.h中定义的,它是众多Linux头中的一个。它可以被定义为任何东西,但碰巧是04000。

正如@steeldriver所述,man 2 stat可以帮助您理解用于文件权限的不同常量的含义:

代码语言:javascript
复制
       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和所有权限以及拥有组的读取权限”。

票数 11
EN

Unix & Linux用户

发布于 2014-07-17 15:00:19

在大多数类似Unix的系统中,文件、目录或任何其他文件系统对象都由inode表示,inode包含一个称为模式的整数,该整数描述对象的类型及其某些权限。这在POSIX状态h中有描述。

代码语言:javascript
复制
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的文件类型位和文件模式位:

代码语言:javascript
复制
$ perl -e 'printf("%#o\n", (stat(".profile"))[2]);'
0100644

用户可以使用chmod系统调用(可能使用某些S_*符号常量)设置模式位(但不能使用文件类型),也可以使用chmod实用工具,它使用整数或符号名(如u+r)。

由于在实践中,模式位没有那么多不同的组合,几十年来许多Unix用户使用数字参数而不是符号名调用chmod (系统调用和命令)。0755的意思是“所有者可写,其他人可读和可执行”,0644的意思是“所有者可写,其他人可读”,04755的意思是"setuid,所有者可写,其他人可读和可执行“。

票数 4
EN

Unix & Linux用户

发布于 2014-07-17 14:52:35

来自chmod (debian )的(英文)手册页:(由我突出显示)

数字模式是从1到4个八进制数字(0-7),通过将值4、2和1的位相加而得。省略的数字被假定为前导零。第一个数字选择设置用户ID (4)和设置组ID (2),并限制删除或粘贴(1)属性。第二位数为拥有该文件的用户选择权限:读(4)、写(2)和执行(1);第三位数选择文件组中具有相同值的其他用户的权限;第四位数字选择对不属于文件组的其他用户具有相同值的权限。

我不知道这是否回答了你的问题,但它确实解释了数字的含义。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/145114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档