SUID бит и SGID


SUID бит и SGID бит определяют права доступа, если они установлены непривилегированный пользователь может запускать скрипты от имени root.



SUID бит и SGID — наследование процессом прав доступа на файл



Биты SUID и SGI используются довольно редко, в отдельных случаях. Прежде чем перейти к ним рассмотрим как задются права доступа в Linux в системах в целом.


Права доступа в Linux


В Linux права доступа к файлам задаются для владельца, группы владельца и всех остальных.

Для файлов по умолчанию права 644, для каталогов 755. Первая цифра характеризует права для владельца, вторая права для группы владельца, третья для всех остальных пользователей.



Каждая цифра — сумма из трех значений:

4 — право на чтение

2 — право на запись

1 — право на исполнение (для каталогов это также право на открытие каталога).



ls -alh test.sh

-rw-r—r— 1 root root 32 May 25 19:22 test.sh



6 на скрипт test.sh даёт владельцу файла право читать файл и редактировать его, 4 даёт право группе владельца и всем остальным право на чтение файла. Исполняемым он по умолчанию не является, поэтому единицы нигде нет.



SUID и SGID


SUID — set user ID — бит, который позволит выполнять скрипты другого пользователя с его правами.

SGID — set group ID — бит, который позволит выполнять скрипты другого пользователя входящего в определенную группу с правами пользователя этой группы.



Устанавливаются биты соответственно следующим образом:


SUID для пользователя

chmod u+s test.sh

или

chmod 4755 test.sh



Процесс при запуске будет наследовать права владельца файла. Если test.sh принадлежит root, при этом есть права на исполнение пользователем test (755), скрипт будет выполняться с правами root, а не с правами пользователя, который фактически его выполняет.



На скриншоте пример:

suid бит


Здесь для добавленного пользователем root простейшего shell скрипта устанавливаем suid бит. Владелец и группа владельца остаются root.

После этого переключаемся на системного пользователя www-data и будучи им выполняем скрипт принадлежащий суперпользователю.

Процесс (в примере он очень простой) унаследует права владельца файла.



Самый близкий к практике пример — бинарный файл /usr/bin/sudo.

sudi bit sudo


На него по умолчанию выставлен suid бит. За счёт него любой пользователь в группе sudo может выполнять команды с правами суперпользователя.



При этом для запуска не требуется sudo.


SGID бит для группы

chmod g+s test.sh

или

chmod 2755 test.sh



Аналогичным образом будут наследоваться права группы пользователя, заданной для файла (755).

Запускать скрипты без sudo в некоторых случаях может быть удобно, для этого устанавливаются suid/sgid.



Если установить suid/sgid для каталога — создаваемые в нем скрипты будут выполняться с учетом специальных битов и описанной выше логики.



Читайте про такой способ ограничения доступа к файлам как chattr.

Сказать спасибо