В этой статье мы расскажем, как использовать специальные биты разрешений в операционных системах Linux.
Речь пойдет о трех битах – Setuid, Setgid и Sticky Bit. Это специальные типы разрешений позволяют задавать расширенные права доступа на файлы или каталоги.
Статья будет полезна пользователям и администраторам, которые уже знакомы с настройкой базовых прав в операционных системах Linux. Итак, давайте преступим.
Коротко о правах доступа в Linux
В операционных системах Linux используются 3 базовых права доступа – на чтение (read), запись (write) и исполнение (execute). Соответственно, права назначаются пользователю (user), группе (group) и всем остальным (world). Рассмотрим их символьные обозначения:
В случае числового обозначения прав доступа используются цифры от 0 до 7, где каждая цифра соответствует определенному набору прав доступа:
Настройка Setuid
Setuid – это бит разрешения, который позволяет пользователю запускать исполняемый файл с правами владельца этого файла. Другими словами, использование этого бита позволяет нам поднять привилегии пользователя в случае, если это необходимо. Классический пример использования этого бита в операционной системе это команда sudo.
root@ruvds-hrc [~]# which sudo /usr/bin/sudo
root@ruvds-hrc [~]# ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 125308 Feb 20 14:15 /usr/bin/sudo
Как мы видим на месте, где обычно установлен классический бит x (на исполнение), у нас выставлен специальный бит s. Это позволяет обычному пользователю системы выполнять команды с повышенными привилегиями без необходимости входа в систему как root.
Установка бита setuid не представляет сложности. Для этого используется команда:
root@ruvds-hrc [~]# chmod u+s <filename>
Рассмотрим на примере. Создадим файл с именем myfile, а затем проверим его разрешения с помощью команды ls -l.
root@ruvds-hrc [~]# touch myfile
root@ruvds-hrc [~]# ls -l myfile
-rw-rw-r-- 1 test test 0 Mar 25 17:59 myfile
Как видим, файл не имеет разрешений на выполнение для пользователя, группы и остальных. Добавим бит setuid:
root@ruvds-hrc [~]# chmod u+s myfile
root@ruvds-hrc [~]# ls -l myfile
-rwSrw-r-- 1 test test 0 Mar 25 12:00 myfile
Обратим внимание, что вместо ожидаемой буквы «s», видим заглавную «S». Почему? Это случается, если setuid установлен, но сам владелец файла не имеет прав на его выполнение. Добавим это разрешение с помощью команды chmod u + x.
root@ruvds-hrc [~]# chmod u+x myfile
root@ruvds-hrc [~]# ls -l
total 0
-rwsrw-r-- 1 test test 0 Mar 25 12:59 myfile
Настройка Setgid
Принцип работы Setgid очень похож на setuid с отличием, что файл будет запускаться пользователем от имени группы, которая владеет файлом. Иллюстрирует работу этого бита команда crontab: .
root@ruvds-hrc [~]# which crontab
/usr/bin/crontab
root@ruvds-hrc [~]# ls -l /usr/bin/crontab
-rwxr-sr-x 1 root crontab 34021 Feb 12 2017 /usr/bin/crontab
Теперь перейдем к настройке этого бита. Аналогично setuid, бит setgid выставляется с помощью команды chmod g + s .
Рассмотрим на примере создания нового файл с именем myfile2.
root@ruvds-hrc [~]# touch myfile2
root@ruvds-hrc [~]# ls -l myfile2
-rw-rw-r-- 1 test test 0 Mar 25 19:25 myfile2
Выполним команду chmod g + s и посмотрим результаты.
root@ruvds-hrc [~]# chmod g+s myfile2
root@ruvds-hrc [~]# ls -l myfile2
-rw-rwSr-- 1 test test 0 Mar 25 19:25 myfile2
Как разобрались выше, меняем заглавную « S » путем выдачи прав на исполнение группе-владельцу:
root@ruvds-hrc [~]# chmod g+x myfile2
root@ruvds-hrc [~]# ls -l
total 0
-rwsrw-r-- 1 test test 0 Mar 25 19:25 myfile
-rw-rwsr-- 1 test test 0 Mar 25 19:25 myfile2
Настройка Sticky Bit
Последний специальный бит разрешения – это Sticky Bit . В случае, если этот бит установлен для папки, то файлы в этой папке могут быть удалены только их владельцем. Пример использования этого бита в операционной системе это системная папка /tmp . Эта папка разрешена на запись любому пользователю, но удалять файлы в ней могут только пользователи, являющиеся владельцами этих файлов.
root@ruvds-hrc [~]# ls -ld /tmp
drwxrwxrwt 8 root root 4096 Mar 25 10:22 /tmp
Символ «t» указывает, что на папку установлен Sticky Bit.
Удаление специальных битов разрешений
Удаляем эти биты также командой chmod, только вместо « + » используем « – » .
root@ruvds-hrc[~]# chmod u-s myfile
root@ruvds-hrc[~]# chmod g-s dir1
root@ruvds-hrc[~]# chmod -t dir2
Вывод
Мы разобрали что из себя представляют специальные биты разрешений Setuid, Setgid и Sticky bit в операционных системах Linux и как ими пользоваться на практике. Умение использовать эти биты позволит вам произвести более гибкую настройку прав доступа к ресурсам вашего сервера.
Ничего не написано про действие Setuid и Setgid для директорий.
2022-07-20 at 14:48Применять биты setuid и setgid для директорий издревле не было принято ввиду того что эти биты применяются для исполняемых бинарных файлов. Ты же не собираешься применить этот бит к папкам /usr/bin/ или /usr/sbin/ или вообще к корню.
2023-01-31 at 07:55А статья путевая, донесено внятно и простыми словами.
2023-01-31 at 07:57Странно. А я вот читал, что “Если для директории установлен бит sgid, то все объекты ФС, создаваемые внутри этой папки, наследуют группу этой папки”.
Это не так, что ли?
2023-10-16 at 15:50Для директорий операция установки setuid не имеет смысла и будет проигнорирована. Данный бит предназначен для исполняемых файлов.
2023-12-21 at 18:33Кажется в статье допущена досадная ошибка. “Как мы видим на месте, где обычно установлен классический бит x (на исполнение), у нас выставлен специальный бит s. Это позволяет обычному пользователю системы выполнять команды с повышенными привилегиями без необходимости входа в систему как root, разумеется зная пароль пользователя root.” – Как раз знать пароль root в данном случае (для запуска файла с установленным SUID) пользователю НЕ требуется ! Максимум, что потребуется – это ввести свой пользовательский пароль (зависит от настроек в sudoers).
2024-07-12 at 07:37Исправили неточность. Благодарим за внимательность.
2024-09-13 at 14:53Перед публикацией проверяйте пожалуйста статью, у новичков может быть путаница:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
root@ruvds-hrc [~]# chmod u+s myfile
root@ruvds-hrc [~]# ls -l myfile
-rw-rw-r– 1 test test 0 Mar 25 12:00 myfile
Обратим внимание, что вместо ожидаемой буквы «s», видим заглавную «S». Почему?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Заглавную «S» не наблюдаю в примере.
2024-07-24 at 18:25Поправили, чтобы не возникало путаницы.
Если у Вас есть желание помочь в развитии нашего справочника, то можете сообщить нам и мы расскажем об условиях сотрудничества.
2024-09-13 at 14:44>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Добавим это разрешение с помощью команды chmod u + x.
root@ruvds-hrc [~]# chmod u+x myfile
root@ruvds-hrc [~]# ls -l
total 0
-rwSrw-r– 1 test test 0 Mar 25 12:59 myfile
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Тут должна быть установлена маленькая “s”
2024-07-24 at 18:27Благодарим за внимательность. Поправили статью.
2024-09-13 at 14:34