Suid guid in linux
Библиотека сайта rus-linux.net
Обратите внимание на то, что в последнем примере используется символ S в верхнем регистре. Это сделано для указания на тот факт, что необходимый бит исполнения не установлен. В том случае, если для указания на установку бита SUID используется символ в нижнем регистре, можно сделать вывод о том, что необходимый бит исполнения установлен. Если же используется символ в верхнем регистре, бит SUID установлен, но необходимый бит исполнения не установлен.
Для чего предназначены эти биты?
В отличие от стандартных прав доступа, специальные права доступа изменяют методы использования файлов и директорий, а не ограничивают доступ к ним. Также они используются по-разному в зависимости от того, устанавливаете ли вы их для файлов или директорий. Давайте рассмотрим их.
SUID: бит SUID устанавливается на исполняемые файлы. После установки данного бита программа исполняется с правами доступа и привилегиями пользователя, который владеет соответствующим бинарным файлом. Как вы можете представить, установка данного бита связана со значительным риском нарушения безопасности системы! В том случае, если владельцем бинарного файла является пользователь root, причем для файла установлен бит SUID, любой исполняющий данный файл пользователь будет иметь такие же права доступа, как и пользователь root. Как бы страшно это не звучало, существует несколько реальных вариантов использования данного механизма. Одним прекрасным примером его использования является утилита ping . Для получения доступа к сетевому аппаратному обеспечению, необходимому для отправки ping-пакетов узлу, пользователь должен обладать привилегиями пользователя root в рамках системы. Для того, чтобы все пользователи системы имели возможность использования утилиты ping , для соответствующего бинарного файла устанавливается бит SUID, после чего любой пользователь может исполнять его с теми же привилегиями, которыми обладает пользователь root в рамках системы. Проверьте специальные права доступа к бинарному файлу данной утилиты в вашей системе с помощью команды ls -l /bin/ping . Вы должны обнаружить установленный бит SUID.
Установка бита SUID для директорий не приводит к какому-либо эффекту.
GUID: при установке бита GUID для исполняемых файлов будет достигаться такой же эффект, как и в случае установки бита SUID, за тем исключением, что вместо прав доступа пользователя, владеющего файлом, в процессе исполнения файла устанавливаются права доступа группы пользователей, владеющей файлом. Данный бит не используется достаточно часто, но в некоторых многопользовательских окружениях его установка может оказаться желательной.
Бит GUID используется главным образом по отношению к директориям. В том случае, если для директории устанавливается бит GUID, создаваемые в директории файлы наследуют идентификатор группы пользователей, владеющей директорией. Данный механизм очень полезен в случае работы группы пользователей с файлами из одной и той же директории. В обычных условиях при создании файла используется основной идентификатор группы пользователя. В рамках директории с установленным битом GUID пользователь все так же будет являться владельцем файла, но принадлежность к группе пользователей устанавливается автоматически на уровне системы, следовательно, все другие пользователи из данной группы также будут иметь доступ к созданному файлу.
Бит sticky: в первую очередь я хотел бы сказать о том, что я даже не представляю, по какой причине бит sticky обозначается с помощью символа t, а не символа s. Я искал информацию об этом во многих источниках и спрашивал многих специалистов. Оказалось, что никто не знает об этом. Возможно, кто-то из читателей журнала Linux Journal знает ответ на данный вопрос и может просветить меня. (В том случае, если я получу сообщение с ответом на данный вопрос, я приведу его текст в рубрике «Письма редактору»). В любом случае, бит sticky является специальным битом доступа, который устанавливается для директорий. Фактически, он не оказывает какого-либо воздействия в случае установки для файла.
В директориях, для которых установлен бит sticky, активируется дополнительный слой защиты созданных файлов. В обычных условиях при доступе множества пользователей к содержимому директории каждый пользователь имеет возможность удаления файлов другого пользователя. (Это справедливо даже для того случая, когда пользователи не имеют прав на запись содержимого этих файлов!) В случае установки бита sticky для директории файлы могут удаляться лишь теми пользователями, которые владеют ими. Данный механизм контроля доступа к элементам файловой системы может показаться излишним, но если вы рассмотрите такую директорию файловой системы многопользовательской системы Linux, как /tmp, вы сможете представить, насколько важным может оказаться бит sticky! Фактически, в том случае, если бы бита sticky не существовало, директория /tmp вашей системы превратилась бы в дикий дикий запад и гнусные стрелки могли бы вольно или невольно удалять файлы других пользователей. Вы можете обнаружить бит sticky в рамках вашей файловой системы с помощью команды ls -l / | grep tmp .
Установка специальных прав доступа к элементам файловой системы
Установка специальных прав доступа для файла или директории осуществляется таким же образом, как и установка обычных прав доступа. Вы можете использовать утилиту chmod, к примеру, следующим образом:
- chmod u+s file.txt — установка бита SUID для файла с именем file.txt.
- chmod g-s file.txt — установка бита GUID для файла с именем file.txt.
- chmod o+t folder — установка бита sticky для директории с именем «folder».
Специальные права доступа также могут устанавливаться вместе с обычными правами доступа, следовательно, аналогичные команды являются полностью корректными:
И как и в случае со стандартными правами доступа, имеется возможность (использование которой является предпочтительным) установки специальных прав доступа с использованием восьмеричной нотации. Для этого используется четвертое поле. При установке прав доступа аналогичным образом:
также присутствует четвертое поле, которое не используется и считается, что его значение равно нулю. Следовательно, данная команда полностью аналогична следующей команде:
Поле с нулевым значением, расположенное перед полями с значениями стандартных прав доступа, используется для установки специальных прав доступа. В том случае, если вы отбрасываете данное поле, его значение считается равным нулю и специальные права доступа не устанавливаются. Однако, в том случае, если вы знаете о его существовании, вам будет проще понять методику его использования. Если вы читали упомянутую статью о правах доступа к элементам файловой системы из выпуска журнала за предыдущий месяц, вы наверняка обратили внимание на раздел с описанием методики использования восьмеричной нотации, информацию из которого можно с легкостью применить и к специальным правам доступа. На Рисунке 1 показано распределение значений между битами специальных прав доступа.
Рисунок 1. Восьмеричная нотация
Таким образом, для установки прав доступа для чтения/записи содержимого директории пользователем вместе с битом GUID вы можете использовать следующую команду:
А результирующая строка описания прав доступа (которая выводится в результате исполнения команды ls -l ) будет выглядеть следующим образом (обратите внимание на символ s в нижнем регистре — помните, что он означает?):
Как и при установке стандартных прав доступа к элементам файловой системы, в случае необходимости установки нескольких битов специальных прав доступа, вы можете просто складывать соответствующие значения. К примеру, для установки битов SUID и sticky вы должны будете использовать значение 5 четвертого восьмеричного поля. Обычно для определенного файла или директории устанавливается лишь один бит специальных прав доступа, но благодаря возможности использования восьмеричной нотации вы можете устанавливать их в любом кажущемся вам подходящем сочетании.
Надеюсь, две данные статьи позволят развеять ваши заблуждения относительно механизма прав доступа к элементам файловых систем в Linux. Более сложные модели управления правами доступа к элементам файловых систем могут основываться на списках контроля доступа (Access Control Lists — ACLs), но для большинства случаев стандартные строки прав доступа — это все, что вам нужно для управления доступом к файлам и директориям вашей системы.
Специальные разрешения для файлов в Linux. SUID, GUID и Sticky Bit
П рава доступа к файлам и владение ими — основная и все же важная концепция безопасности в Linux. Вы, наверное, уже знакомы с этими условиями. Обычно это выглядит так:
Помимо этих обычных разрешений, есть несколько специальных разрешений для файлов, и не многие пользователи Linux знают об этом.
Теперь мы покажем вам некоторые специальные разрешения с новыми буквами в файловой системе Linux.
В этом примере команда passwd, отвечающая за изменение пароля пользователя, имеет букву s в том же месте, которое мы ожидаем увидеть, x или — для прав пользователя. Важно отметить, что этот файл принадлежит пользователю root и корневой группе.
С этим разрешением вам не нужно предоставлять sudoдоступ конкретному пользователю, когда вы хотите, чтобы он запустил какой-либо корневой скрипт.
Что такое SUID?
Когда бит SUID установлен для исполняемого файла, это означает, что файл будет выполняться с теми же разрешениями, что и владелец исполняемого файла.
Давайте возьмем практический пример. Если вы посмотрите на двоичный исполняемый файл команды passwd, у него установлен бит SUID.
andreyex:~$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 59640 Mar 22 2019 /usr/bin/passwd
Это означает, что любой пользователь, выполняющий команду passwd, будет запускать ее с теми же правами, что и root.
В чем выгода? Команде passwd необходимо отредактировать файлы, такие как /etc/passwd, /etc/shadow, чтобы изменить пароль. Эти файлы принадлежат пользователю root и могут быть изменены только пользователем root. Но благодаря флагу setuid (бит SUID) обычный пользователь также сможет изменять эти файлы (принадлежащие пользователю root) и менять свой пароль.
По этой причине вы можете использовать команду passwd для изменения собственного пароля, несмотря на тот факт, что файлы, которые изменяет эта команда, принадлежат пользователю root.