您的位置首页>企业动态>

你对于Linux权限了解有多少

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解你对于Linux权限了解有多少问题。在Linux上查看文件权限时,有时会看到比普通名称更

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解你对于Linux权限了解有多少问题。

在Linux上查看文件权限时,有时会看到比普通名称更多的名称,如R、W、X和-。您可能看到的不是rwx,而是S或T,如下例所示:

drwxrwsrwt

进一步澄清这一点的一种方法是使用stat命令查看权限。stat输出结果的第四行显示了八进制和字符串格式的文件权限:

$ stat/var/mail File:/var/mail Size:4096 Blocks:8 IO Block:4096目录设备:801h/2049d Inode: 1048833链接:2访问权限:(3777/drwxrwsrwt)Uid:(0/root)Gid:(8/mail)访问权限:2019-05-21 19:233:15 . 76974004-0400修改:2005

输出提醒我们,分配给文件权限的位数超过了9,但实际上有12位。额外的3位提供了一种分配权限的方法,而不是正常的读取、写入和执行。例如,3777(二进制01111111111)表示正在使用两个附加设置。

该特定值的前1位(第2位)表示SGID(设置组标识),并分配运行文件的临时权限,或使用具有相关组权限的目录。

011111111111

SGID向作为该组成员使用此文件的人授予临时权限。

第二个1(第三位)是“粘性”位。它确保只有文件的所有者可以删除或重命名文件或目录。

011111111111

如果权限是7777而不是3777,我们已经知道SUID字段也被设置了。

111111111111

SUID向作为文件所有者使用文件的用户授予临时权限。

至于我们上面看到的/var/mail目录,所有用户都需要一定的访问权限,所以需要一些特殊的值来提供。

但是现在让我们更进一步。

特殊权限位的常见用途是用于passwd命令等命令。如果您查看/usr/bin/passwd文件,您会注意到SUID位已被设置,这允许您更改密码(从而更新/etc/shadow文件的内容),即使您以普通(非特权)用户身份运行,您也没有该文件的读取或写入权限。当然,passwd命令非常聪明,它不允许您更改其他人的密码,除非您实际上是以root用户身份运行或使用sudo。

$ ls-l/usr/bin/passwd-rwsr-xr-x 1根影63736 3月22日14:32/usr/bin/passwd $ ls-l/etc/shadow-rw-r-1根影2195 4月22日10:46 /etc/shadow

现在,让我们看看您可以使用这些特殊权限做什么。

如何分配特殊文件权限?

像Linux命令行上的许多事情一样,您可以选择如何发出请求。chmod命令允许您通过数字或使用字符表达式来更改权限。

要以数字方式更改文件权限,可以使用此命令设置setuid位和setgid位:

$ chmod 6775 tryme

或者您可以使用以下命令:

$ chmod ug s tryme《为了SUID和SGID的许可》

如果具有特殊权限的文件是脚本,您可能会惊讶于它没有达到您的预期。这是一个非常简单的例子:

$ cat tryme #!/bin/bash echo我是$USER

即使设置了SUID位和SGID位,该文件也是root拥有的文件,运行这样的脚本不会带来您可能期望的“我是root”响应。为什么呢?因为Linux忽略了脚本中的设置用户标识位和设置组标识位。

$ ls -l tryme -rwsrwsrwt 1根根29 5月26日12:22 tryme $ ./尝试我是jdoe

另一方面,如果你用编译后的程序尝试类似的操作,比如这个简单的C程序,你会看到不同的效果。在这个示例程序中,我们提示用户输入一个文件并为其创建一个文件,并给予该文件写权限。

编译程序后,运行命令使root成为所有者并设置所需的权限,您将看到它以预期的root权限运行,而新创建的文件由root拥有。当然,您必须拥有sudo权限才能运行一些必需的命令。

$ cc -o mkfile mkfile.c《编译程序》$ sudo chown root:root mkfile》《将所有者和组更改为“root ”$ sudo chmod ug s MK file》《添加SUID和SGID权限》$ ./mkfile《运行程序输入要创建的文件的名称:空文件已成功创建$ ls -l空-rw-rw-r - 1根目录0 5月26日13:15空

请注意,该文件归root所有。如果程序没有以root权限运行,这将不会发生。

权限字符串中异常设置的位置(如rwsrwsrwt)可以帮助提醒我们每个位的含义。至少第一个“s”(suid)位于所有者权限区域,第二个“SGID”位于组权限区域。为什么粘性位是“t”而不是“s”超出了本文的范围。无论如何,附加权限设置为Linux和其他Unix系统提供了许多附加功能。

资料来源:51CTO

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。