Что такое первое число в аргументе chmod из 4-х чисел (например, «chmod 4555»)?

16

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

chmod 555 test-file

даст

-r-xr-xr-x

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

chmod 4555 test-file

это дает мне

-r-sr-xr-x

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

    
задан Mas Bagol 03.02.2015 в 16:59
источник

2 ответа

24

На самом деле существует 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 (первое число в аргументе из 4-х цифр 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 (для файлов) или «Ввод элементов / элементов» = +1 ( --x )
ответ дан Thomas Ward 03.02.2015 в 17:10
источник
7

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

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

    
ответ дан heemayl 03.02.2015 в 17:12