Для чего используется первое число в аргументе chmod из 4 чисел (например, `chmod 4555`)?

20

Когда я устанавливаю программу, я рекомендую это сделать chmod 4555. Хорошо, я знаю о значениях, если я просто использую три числа. Например

chmod 555 test-file

дам

-r-xr-xr-x

4 для записи, 2 для чтения и 1 для выполнения. Но когда я делаю это:

chmod 4555 test-file

это дает мне

-r-sr-xr-x

Итак, xпоменял на s. Что это значит?

Мас Баголь
источник
1
также объяснил здесь: askubuntu.com/a/550947/72216 («о флаге s»)
Джейкоб Влейм
@JacobVlijm также объяснил более подробно с другими «специальными» битами, ниже
Томас Уорд

Ответы:

29

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

Special, User/Owner, Group, И Othersв таком порядке, при работе с четыре номера chmods, с тем первым числом специальных бит , которые могут быть установлены.

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

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

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


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

Имейте ввиду, что ####есть Special User/Owner Groupи 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)
Томас Уорд
источник
7

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

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

heemayl
источник