深入探讨了Linux权限

有时候你看到的不仅仅是普通的r w x,在Linux上的名称在查看文件权限。你怎样才能有更清晰的看法不寻常的性状正试图告诉你和这些权限如何工作?

  • 在Facebook上分享
  • 在Twitter上分享
  • 分享在LinkedIn
  • 在Reddit分享
  • 通过电子邮件分享
  • 印刷资源
合成rwsr
欧洲杯男足

有时候你看到的不仅仅是普通的r,w,x- - - - - -在Linux上的名称在查看文件权限。而不是特权所有者、组和其他字段权限字符串,你可能会看到一个年代t,就像这个例子:

drwxrw年代rwt

得到一个更清晰的一个方法是查看的权限统计命令。第四行统计的输出显示了文件权限八进制和字符串格式:

美元统计/var/mail文件:/var/mail大小:4096块:8 IO块:4096目录设备:801 h / 2049 d Inode: 1048833链接:2访问:3777 / drwxrwsrwt)Uid:(0 /根)Gid:(8 /邮件)访问:-0400 19:23:15.769746004 2019-05-21修改:-0400 19:03:48.226656344 2019-05-21变化:2019-05-21 19:03:48.226656344 -0400出生:-

这个输出提醒我们,有超过9位分配给文件权限。事实上,有12个。这些额外的三位提供一种方法来分配权限超出一般的读,写和执行- 3777(二进制011111111111),例如,表明两个额外的设置。

第一个1(第二位)在这个特定的值代表了SGID(设置组ID)和分配临时运行许可文件或使用相关的目录的权限组。

011111111111
^

SGID给人临时权限使用该文件作为这个群体的成员。

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

011111111111
^

权限是7777而不是3777,我们已经知道SUID (UID)字段也被设置。

111111111111
^

SUID给临时用户权限使用文件作为文件所有者。

至于/var/mail目录,我们看着上面,所有用户需要访问一些特殊值需要提供它。

现在让我们再进一步。

的一个常见用途的特殊命令的权限位passwd命令。如果你看看/usr/bin/passwd文件,您会注意到,SUID位设置,允许你改变你的密码(,因此,/etc/shadow文件)的内容,即使你运行作为一个普通的(不是特权)用户,没有读或写访问这个文件。当然,passwd命令是足够聪明不允许你改变别人的密码,除非你实际上是作为根用户运行或使用sudo。

ls - l /usr/bin/passwd - rw美元年代r-xr-x 1根根63736年3月22日14:32 /usr/bin/passwd $ ls - l /etc/shadow -rw-r - - - - - - 1根影子2195年4月22日星期日晚上/etc/shadow

现在,让我们来看看你可以做什么与这些特殊权限。

如何分配特殊的文件权限

与Linux命令行上很多事情一样,你有选择如何使您的请求。的修改文件权限命令允许您更改权限数值或使用字符表达式。

改变文件权限的数值,您可以使用这样的命令来设置setuid和setgid位:

chmod 6775美元tryme

或者你可以使用一个命令如下:

chmod ug + s tryme < = =美元SUID和SGID许可

如果你添加了特殊权限的文件是一个脚本,你也许会感到惊讶,它不符合你的期望。这是一个非常简单的例子:

美元猫tryme # !/bin/bash呼应我$ USER

即使SUID和SGID位设置和文件设置成文件,运行一个脚本这样不会产生“我是根”的反应。为什么?因为Linux忽略了set-user-ID和set-group-ID位脚本。

$ ls - l tryme -rwsrwsrwt 1根根29日5月26日12:22 tryme。/ tryme我jdoe美元

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

# include < stdlib。h > int main(){文件*《外交政策》;/ *文件指针* /字符帧[20];printf("创建输入文件的名称:“);scanf (“% s”、帧);/ *创建文件的写权限* / fp = fopen(帧,“w”);/ *检查如果创建文件* / (fp = = NULL) {printf(“文件未创建”);退出(0);}printf("文件成功创建\ n ");返回0; }

一旦编译程序和运行的命令使根所有者和设置所需的权限,你会发现它与系统管理员权限运行像预期的那样——留下一个新创建的文件设置成。当然,你必须有sudo特权运行一些所需的命令。

美元的cc - o mkfile mkfile。< = = c编译程序$ sudo乔恩根:根mkfile < = =所有者和组更改为“根”$ sudo chmod ug + s mkfile < = =添加SUID和SGID许可。美元/ mkfile < = =运行程序输入文件的名称创建:创建空文件成功$ ls - l空-rw-rw-r——1根根0 5月26日13:15空

注意,文件属于根——这不会发生如果程序没有使用管理员权限运行。

常见的位置设置的权限字符串(例如,rw年代rw年代rwt)可以帮助提醒我们每一位意味着什么。至少第一个“s”(SUID)是在所有者许可区域和第二组权限(SGID)的区域。为什么粘贴位是一个“t”而不是“s”是超越我。也许指的创始人设想它作为“俗气”,改变了主意,因为更少的第二这个词的定义。在任何情况下,额外提供很多额外的功能权限设置Linux和其他Unix系统。

相关:

版权©2019 IDG通信公司。足球竞彩网下载

企业网络2022的10个最强大的公司