Для чего используется первое число в аргументе chmod из 4 чисел (например, `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, Что это означает?

2 ответа

Решение

На самом деле есть 4 набора атрибутов, с которыми вы можете работать через chmod,

Special, User/Owner, Group, а также Others в этом порядке при работе с четырьмя числами chmod, причем первым номером являются специальные биты, которые можно установить.

chmod 4555 приравнивается к следующему:

  • Set UID bit - запускать файл от имени владельца независимо от того, какой пользователь его запускает
  • Пользователь / Владелец: Read, Execute
  • Группа: Read, Execute
  • Другие: Read, Execute

s в вашей "читаемой человеком" строке для разрешений указывает, что SetUID бит (объясненный ниже) установлен.


По сути, мы можем разбить четыре числа chmod аргумент разрешения в конкретные дескрипторы, как показано ниже, и делать математику, чтобы определить, что 4 в первом разделе будет 5 в следующем разделе и так далее.

Имейте в виду, что #### является SpecialUser/OwnerGroup а также Others в этой последовательности.

За Special атрибуты (первое число в четырехзначном chmod аргумент):

  • Set UID - Запуск файла от имени владельца независимо от пользователя, который его запускает (отображается как s в удобочитаемой строке разрешений для User раздел) = +4 (--s под User/Owner)
  • Set GID - Запускать файл как группу независимо от пользователя / группы, в которой он запущен (отображается как s в удобочитаемой строке разрешений для Group раздел) = +2 (--s под Group)
  • Sticky Bit - ЭФФЕКТИВНО ТОЛЬКО ДЛЯ ДИРЕКТОРИЙ - Если установлено, только пользователь-владелец каталога и root можно удалить каталог, и только владелец файла или root можете удалять файлы внутри него. (показывает как t в удобочитаемой строке разрешений для Others раздел) = +1 (--t под Others)

За User/Owner, Group а также Others атрибуты (последние три числа в четырехзначном chmod аргумент):

  • Read = +4 (r--)
  • Write = +2 (-w-)
  • Execute (для файлов) или "Enter Into / List Items" = +1 (--x)

Это называется SETUID немного. если это установлено chmod 4555 test-file (в вашем случае), то test-file может быть выполнен любым пользователем, как будто пользователь является владельцем файла.

Когда SETUID устанавливается бит, тогда эффективный идентификатор пользователя (EUID) пользователя, у которого нет разрешения на выполнение файла в противном случае (обычными разрешениями, например 0744), принимает EUID владельца файла и может выполнить файл.

Другие вопросы по тегам