Как использовать специальные разрешения: setuid, setgid и sticky bits

Обычно в unix-подобных операционных системах права собственности на файлы и каталоги основаны на стандартных uid (user-id) и gid (group-id) пользователя, который их создал. То же самое происходит при запуске процесса: он запускается с эффективным идентификатором пользователя и идентификатором группы пользователя, который его запустил, и с соответствующими привилегиями. Это поведение можно изменить с помощью специальных разрешений.

linux

Бит setuid

При использовании бита setuid описанное выше поведение изменяется таким образом, что при запуске исполняемого файла он запускается не с привилегиями запустившего его пользователя, а с привилегиями владельца файла. Так, например, если у исполняемого файла установлен бит setuid, а его владельцем является root, то при запуске обычным пользователем он будет запущен с привилегиями root. Должно быть понятно, почему это представляет потенциальный риск для безопасности, если не использовать его правильно.

Примером исполняемого файла с набором прав setuid является passwd, утилита, которую мы можем использовать для изменения пароля для входа в систему. Мы можем проверить это с помощью команды ls:

Как определить бит setuid? Как вы наверняка заметили, глядя на вывод команды выше, бит setuid представлен буквой s вместо x исполняемого бита. Символ s означает, что исполняемый бит установлен, иначе вы бы увидели заглавную букву S. Это происходит, когда биты setuid или setgid установлены, а исполняемый бит нет, показывая пользователю несоответствие: биты setuid и setgit не имеют эффекта, если исполняемый бит не установлен. Бит setuid не влияет на каталоги.

Бит setgid

В отличие от бита setuid, бит setgid действует как на файлы, так и на каталоги. В первом случае файл, для которого установлен бит setgid, при выполнении не запускается с привилегиями группы пользователя, который его запустил, а запускается с привилегиями группы, которой принадлежит файл: другими словами, идентификатор группы процесса будет совпадать с идентификатором группы файла.

При использовании в каталоге бит setgid изменяет стандартное поведение таким образом, что группа файлов, созданных внутри каталога, будет принадлежать не пользователю, который их создал, а самому родительскому каталогу. Это часто используется для облегчения совместного использования файлов (файлы могут быть изменены всеми пользователями, входящими в указанную группу). Как и setuid, бит setgid можно легко обнаружить (в данном случае на тестовом каталоге):

На этот раз s присутствует на месте исполняемого бита в групповом секторе.

Sticky bits (Липкий бит)

sticky bit работает по-другому: хотя он не влияет на файлы, при его использовании в каталоге все файлы в этом каталоге могут быть изменены только их владельцами. Типичный случай использования этого бита - каталог /tmp. Обычно этот каталог доступен для записи всем пользователям системы, поэтому для того, чтобы один пользователь не мог удалить файлы другого, устанавливается липкий бит:

В этом случае владелец, группа и все остальные пользователи имеют полные права на каталог (чтение, запись и выполнение). Липкий бит идентифицируется буквой t, которая указывается там, где обычно указывается исполняемый бит x, в разделе "другое". Опять же, строчная буква t означает, что исполняемый бит также присутствует, в противном случае вы бы увидели заглавную букву T.

Как установить специальные биты

Как и обычные разрешения, специальные биты могут быть назначены с помощью команды chmod, используя числовой или ugo/rwx формат. В первом случае биты setuid, setgid и sticky представлены соответственно значениями 4, 2 и 1. Так, например, если мы хотим установить бит setgid для каталога, мы выполним команду:

Этой командой мы установили бит setgid для каталога (обозначенного первым из четырех чисел) и предоставили полные привилегии его владельцу и пользователям, входящим в группу, к которой принадлежит каталог, плюс разрешение на чтение и выполнение для всех остальных пользователей (помните, что бит execute для каталога означает, что пользователь может войти в него по cd или использовать ls для просмотра его содержимого).

Другой способ установить биты специальных разрешений - использовать синтаксис ugo/rwx:

Чтобы применить бит setuid к файлу, мы должны выполнить следующие действия:

В то время как для применения sticky bit:

Использование специальных разрешений может быть очень полезным в некоторых ситуациях, но при неправильном использовании они могут привести к серьезным уязвимостям, поэтому подумайте дважды, прежде чем использовать их.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий