4个数字chmod参数中的第一个数字是什么(例如`chmod 4555`)?

当我安装程序时,它建议我做chmod 4555 。 好吧,如果我只使用三个数字,我就知道价值观。 例如

 chmod 555 test-file 

会给

 -r-xr-xr-x 

4用于写入,2用于读取,1用于执行。 但是,当我这样做时:

 chmod 4555 test-file 

它给了我

 -r-sr-xr-x 

所以, x改为s 。 那是什么意思?

实际上,您可以通过chmod使用4个属性集。

User/Owner四位chmod时,该顺序中的SpecialUser/OwnerGroupOthers ,第一个数字是可以设置的特殊位。

chmod 4555等同于以下内容:

  • Set UID位 – 无论哪个用户正在运行该文件,都将该文件作为所有者运行
  • 用户/所有者: Read, Execute
  • 组: Read, Execute
  • 其他: Read, Execute

用于权限的“人类可读”字符串中的s表示SetUID位(如下所述)已设置。


实际上,我们可以将四个数字的chmod权限参数分解为特定的描述符,如下所示,并进行数学运算以确定第一部分中的4是什么,下一部分中的5 ,依此类推。

请记住, ####是该订单中的Special User/Owner GroupOthers

对于Special属性(四个数字chmod参数中的第一个数字):

  • Set UID – 运行文件作为所有者,无论用户是否运行它(在User部分的人类可读权限字符串中显示为s )= + 4( --s User/Owner下的--s
  • Set GID – 无论运行它的用户/组如何都将文件作为组运行(在Group部分的人类可读权限字符串中显示为s )= + 2( --s下的--s
  • Sticky Bit – 仅对目录有效 – 如果设置,只有目录的所有者用户和root可以删除目录,只有文件所有者或root可以删除其中的文件。 (在Others部分的人类可读权限字符串中显示为t )= +1( --t下的--t

对于User/OwnerGroupOthers属性(四个数字chmod参数中的最后三个数字):

  • Read = +4( r--
  • Write = +2( -w-
  • Execute (对于文件),或’进入/列出项目’= +1( – x)

它被称为SETUID位。 如果它是由chmod 4555 test-file (在您的情况下)设置的,那么test-file可以由任何用户执行,就像用户是文件的所有者一样。

SETUID位置位时,没有权限执行文件的用户的有效用户ID( EUID )(通过正常权限,例如0744 )获取文件所有者的EUID并且可以执行该文件。