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

Mat*_*iby 37 linux ubuntu permissions

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

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

Hrv*_*jar 38

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

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

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

您可以使用chmod ug-s directory, 或chmod 0755 directory

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

  • `chmod 0755` 不会*不*清除 setuid 位,至少在 Linux 上不会。我目前正在其他系统上进行测试。 (8认同)
  • 要清除 Linux 目录上的 setuid 位,请使用 `chmod 00755`;见 https://unix.stackexchange.com/q/393531/46851 (5认同)
  • POSIX 表示,它是为常规文件以外的文件类型定义的实现,无论具有八进制模式的“chmod”是否清除 setuid、setgid 和 vtx 位。 (2认同)

oos*_*hro 35

setuid 和 setgid

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

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

运行删除 setuid 和 setgid:

chmod 00775 path
Run Code Online (Sandbox Code Playgroud)

或者

chmod a-st path
Run Code Online (Sandbox Code Playgroud)

  • 在unix中,inode是获取权限的东西。 (2认同)
  • 当您以八进制模式执行它时,GNU chmod 不会清除目录上的 setuid 和 setgid 字节。POSIX 允许这种行为。 (2认同)