Что такое бит suid linux

Рассматриваем вопрос прав доступа более подробно

Оригинал: Gettin’ Sticky with It
Автор: Shawn Powers
Дата публикации: 11 июня 2015 г.
Перевод: А.Панин
Дата перевода: 2 августа 2015 г.

Рассматриваем вопрос прав доступа более подробно

В номере журнала за прошлый месяц я рассказывал о механизме прав доступа к элементам файловой системы в Linux (Обратитесь к статье «It’s Better to Ask Forgiveness. » в разделе UpFront за май 2015 года, см. перевод на нашем сайте). Я мог бы рассказать о битах SUID, GUID и sticky в той же статье, но мне показалось, что в этом случае информации было бы слишком много для одного материала. Исходя из этого, в данной статье я буду описывать специальные типы прав доступа к элементам файловой системы в Linux. Ввиду того, что механизм стандартных прав доступа является интуитивно понятным, механизм специальных прав доступа может показаться на первый взгляд не имеющим особого смысла. Но после того, как вы узнаете о предназначении данного механизма, вы поймете, что он является не настолько запутанным, как кажется.

Но ведь больше нет места для дополнительных значений прав доступа!

В процессе изучения методики установки битов чтения, записи и исполнения для файлов и директорий вы, скорее всего, обратили внимание на то, что были задействованы все доступные «ячейки» для вывода битов прав доступа. Следовательно, при манипуляции специальными правами доступа к элементам файловой системы, вы в каком-то смысле повторно используете существующие биты прав доступа. Они используются аналогично любым другим атрибутам доступа к файлам, но отображаются немного по-другому.

Каждая из секций строки прав доступа к элементам файловой системы (для пользователя, группы пользователей и других пользователей) имеет дополнительные биты «специальных» прав доступа, значения которых устанавливаются по аналогии со значениями битов rwx. Указание на состояние этих битов выводится в рамках части строки, выделенной для вывода состояния битов исполнения. Например:

Если установлен бит SUID (Set User ID — установка идентификатора пользователя), при выводе бита исполнения в секции прав доступа пользователя будет использован символ s вместо x.

Если установлен бит GUID (Group User ID — установка идентификатора группы), при выводе бита исполнения в секции прав доступа группы пользователей будет использован символ s вместо x.

Если установлен бит sticky, при выводе бита исполнения в секции прав доступа других пользователей будет использован символ t вместо x.

Еще не запутались? Ниже приведено несколько примеров:

-rwsrw-rw- — Для файла установлен бит SUID.

drw-rwsrw- — Для директории установлен бит GUID.

drw-rw-r-t — Для директории установлен бит sticky.

-rwSr-r— — Для файла установлен бит sticky, при этом бит исполнения файла для пользователя не установлен.

Обратите внимание на то, что в последнем примере используется символ S в верхнем регистре. Это сделано для указания на тот факт, что необходимый бит исполнения не установлен. В том случае, если для указания на установку бита SUID используется символ в нижнем регистре, можно сделать вывод о том, что необходимый бит исполнения установлен. Если же используется символ в верхнем регистре, бит SUID установлен, но необходимый бит исполнения не установлен.

Для чего предназначены эти биты?

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

SUID: бит SUID устанавливается на исполняемые файлы. После установки данного бита программа исполняется с правами доступа и привилегиями пользователя, который владеет соответствующим бинарным файлом. Как вы можете представить, установка данного бита связана со значительным риском нарушения безопасности системы! В том случае, если владельцем бинарного файла является пользователь root, причем для файла установлен бит SUID, любой исполняющий данный файл пользователь будет иметь такие же права доступа, как и пользователь root. Как бы страшно это не звучало, существует несколько реальных вариантов использования данного механизма. Одним прекрасным примером его использования является утилита ping . Для получения доступа к сетевому аппаратному обеспечению, необходимому для отправки ping-пакетов узлу, пользователь должен обладать привилегиями пользователя root в рамках системы. Для того, чтобы все пользователи системы имели возможность использования утилиты ping , для соответствующего бинарного файла устанавливается бит SUID, после чего любой пользователь может исполнять его с теми же привилегиями, которыми обладает пользователь root в рамках системы. Проверьте специальные права доступа к бинарному файлу данной утилиты в вашей системе с помощью команды ls -l /bin/ping . Вы должны обнаружить установленный бит SUID.

Читайте также:  Bathrooms with big windows

Установка бита 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 .

Установка специальных прав доступа к элементам файловой системы

Читайте также:  Настройка межсетевого экрана windows server

Установка специальных прав доступа для файла или директории осуществляется таким же образом, как и установка обычных прав доступа. Вы можете использовать утилиту 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-notes.org

Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux

Использование «sticky bit» прав в Unix/Linux

Unix является многопользовательской ОС и в основном, устроен так, что несколько пользователей могут работать одновременно. Таким образом, программа которая находится в памяти требует меньше времени чтобы начать свою работу. Таким образом, когда один пользователь только что использовал программу, а затем новый пользователь хочет использовать ту же самую программу, то 2-й юзверь не будет иметь временной задержки для инициализации утилиты.

Установка Sticky Bit

Выставляем sticky bit на файл:

  • — T — означает, что разрешения на выполнение отключены.
  • — t — означает, что права на выполнение включены.

Или можно еще использовать следующую команду:

Sticky bit, в основном используется в общих каталогах, таких как /var или /tmp, поскольку пользователи могут создавать файлы, читать и выполнять их, принадлежащие другим пользователям, но не могут удалять файлы, принадлежащие другим пользователям. Например, если пользователь (предположим bob) создает файл с именем /tmp/bob, то другой пользователь (допустим tom) не может удалить этот файл, даже если в каталоге /tmp есть разрешение 777. Если sticky bit не установлен, то tom юзер может удалить /tmp/bob, так как файл /tmp/bob наследует разрешения родительского каталога.

Читайте также:  Linux directories var etc

Использование SUID ( Set User ID) прав в Unix/Linux

setuid (сокращения от англ. set user ID upon execution — «установка ID пользователя во время выполнения) являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца исполняемого файла. Иногда файлы требуют разрешения на выполнение для пользователей, которые не являются членами группы владельца, в этом случае вам потребуется предоставить специальные разрешения на выполнение. Когда SUID установлен, пользователь может запускать любую программу, такую как владелец программы.

Установка SUID бит на файл.

Если SUID бит установлен на файл и пользователь выполнил его. Процесс будет иметь те же права что и владелец файла.

Например: команда passwd имеет SUID bit. Когда обычный пользователь захочет изменит свой пароль в файле /etc/passwd или /etc/shadow, то у него ничего не получиться, т.к нужны права суперпользователя (процесс командны PASSWD всегда работает с правами суперюзера).

Предположим, что я получил исполняемый файл «filename», и мне нужно установить SUID на этот файл, перейдите в командную строку и выпуск команду:

Теперь проверьте разрешения на файл с командой:

Наблюдайте за «s» буквой, которая была добавлена ​​для SUID бита:

Чтобы выставить SUID для всех папок и файлов, используем:

Найти SUID файлы

Найти все SUID файлы для «root» пользователя:

Найти все SUID и SGID файлы:

Использование SGID ( Set Group ID ) прав в Unix/Linux

setgid (сокращения от англ. set group ID upon execution — «установка ID группы во время выполнения») являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами группы исполняемого файла.

Так же, как SUID , установив SGID бит для файла он устанавливает ваш идентификатор группы для группы файла в то время как файл выполняется. Это действительно полезно в случае когда у вас есть реальные установки в многопользовательском режиме где у пользователей есть доступ к файлом. В одной домашней категории я действительно не нашел использования для SGID. Но основная концепция является такой же, как и у SUID, файлы у которых SGID бит устанавливается, то они принадлежат к этой группе , а не к этому пользователю.

Установка бита SUID / SGID

Если SGID бит установлен на любой каталог, все подкаталоги и файлы, созданные внутри получат те же пермишены что и группы в качестве основного каталога.

Устанавливаем SGID на директорию:

Теперь, переключаемся на другого пользователя и создаем файл в папке /home/captain/test_dir:

В приведенном выше примере test_file.txt создался с группой root.

Чтобы выставить SGID для всех папок и файлов, используем:

Найти SGID файлы

Найти все файлы с использованием SGID бита, для root пользователя:

Найти все SUID и SGID файлы:

Зачем нужены SUID и SGID?

Есть достаточно много программ и файлов, которые должны принадлежать пользователю root, и в то же время – простые пользователи должны иметь возможность выполнять его. Для примера – утилита passwd, которая находится в каталоге /usr/bin/passwd и которая имеет дело с файлом /etc/passwd, редактировать который может только пользователь root.

Вот еще полезное чтиво:

Команда chmod также может использоваться для установки или отмены следующих значений в качестве префикса для обычных трех числовых привилегий:

  • 0 — setuid, setgid, sticky bits не установлены.
  • 1 — Установить sticky bit.
  • 2 -Установить setgid bit.
  • 3 -Установить setgid и sticky bits.
  • 4 -Установить setuid bit.
  • 5 -Установить setuid и sticky bits.
  • 6 — Установить setuid и setgid bit-ы.
  • 7 — setuid, setgid, sticky bits активированы.

Тема «Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux» завершена.

Источник

Оцените статью