如何清除Linux中目录的“ s”权限?


24

我有一个显示有权限掩码的目录drwsrwsr-x。当我尝试重置755S 的权限时,仍然保留。

什么是“ s”,为什么我不能将权限更改回775(drwxrwxr-x)?

Answers:


25

在“用户和组”列中“执行”位置看到的s是SetUID(执行时设置用户ID)和SetGID(执行时设置组ID)位。

Unix文件权限实际上是一个4位数的八进制数字 SUGO

  • S控制SetUID(4),SetGID(2)和“ Sticky”(1)位
  • U控制文件所有者的Read(4)/ Write(2)/ Execute(1)位
  • G控制文件组的读/写/执行位
  • O控制其他所有人的Read / Write / Execute位。

您可以使用chmod ug-s directory或从目录中删除setuid位。chmod 0755 directory

有关更多信息,请参见的手册页chmod以及有关SetUID位的Wikipedia页面


是“ sgid”(不是“ u”)。
暂停,直到另行通知。

“ drwsrwsrwx是什么?” < -再次检查
赫尔沃耶Špoljar

6
chmod 0755没有明确的setuid位,至少不会在Linux上。我目前正在其他系统上进行测试。
FUZxxl 2015年

1
POSIX表示,它是针对普通文件以外的文件类型定义的实现,无论chmod使用八进制模式是否清除了setuid,setgid和vtx位。
FUZxxl 2015年

2
要清除Linux目录上的setuid位,请使用chmod 00755; 参见unix.stackexchange.com/q/393531/46851
Roger Lipscombe

23

setuid和setgid

setuid和setgid(分别是执行时设置的用户ID和执行时设置的组ID的缩写)是Unix访问权限标志,允许用户在可执行文件的所有者或组的许可下运行可执行文件。它们通常用于允许计算机系统上的用户运行具有临时提升特权的程序,以执行特定任务。虽然提供的假定用户ID或组ID特权并不总是得到提高,但至少它们是特定的。

要以数字方式删除setuid和setgid位,必须在位模式前添加一个前缀0(例如:0775变成00775)。

运行以删除setuid和setgid:

chmod 00775 path

要么

chmod a-st path

它在目录中而不是文件上
HrvojeŠpoljar11年

1
目录也是unix文件系统中的文件,ooshro所说的完全正确
lynxman 2011年

是的,它们全都是文件,但是由于您不执行类似于drwxrwxr-x的内容,因此描述不适合:
HrvojeŠpoljar'11

在unix中,inode是获得权限的东西。
克里斯

2
当您使用八进制模式执行GNU chmod时,它不会清除目录上的setuid和setgid字节。POSIX允许这种行为。
FUZxxl 2015年

2

添加到ooshro的答案...

如果在目录上使用suid或sgid权限,则在该目录内创建的任何文件都将与所讨论的目录具有相同的所有者(如果是suid)或组(sgid)。

我用它作为我的家庭Samba共享。基本目录由用户nobody和组olympia拥有,并且权限为2770。因此,您必须在组olympia中才能读取或写入该目录下的任何内容,并且要确保olympia是其下所有内容的拥有组。我还将Samba配置为使用目录掩码2770和文件掩码660,以使权限在树上一直保持正确。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.