Как использовать SUID, SGID и Sticky Bits в Linux

SUID, SGID и Sticky Bits — это мощные специальные разрешения, которые вы можете установить для исполняемых файлов и каталогов в Linux. Мы поделимся преимуществами и потенциальными недостатками их использования.

Они уже используются

Обеспечение безопасности многопользовательской операционной системы связано с несколькими трудностями. Возьмем, к примеру, (казалось бы) базовую концепцию паролей. Все они должны быть сохранены, чтобы каждый раз, когда кто-то входит в систему, система могла сравнивать вводимый им пароль с сохраненной копией. Очевидно, что поскольку пароли — это ключи к королевству, их необходимо беречь.

В Linux сохраненные пароли защищены двумя способами: они зашифрованы, и только кто-то с правами root может получить доступ к файлу, содержащему пароли. Это может показаться прекрасным, но представляет собой затруднение: если только люди с привилегиями root могут получить доступ к сохраненным паролям, как те, у кого нет такого доступа, изменят свои пароли?

Повышение вашего статуса

Обычно команды и программы Linux запускаются с тем же набором разрешений, что и лицо, запускающее программу. Когда root запускает команду passwd изменить пароль, он работает с правами root. Это означает, что команда passwd может свободно обращаться к сохраненным паролям в файле / etc / shadow.

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

Вышеупомянутый сценарий — это именно то, что делает бит установки идентификатора пользователя (SUID). Это запускает программы и команды с разрешениями владельца файла, а не с разрешениями человека, который запускает программу.

Вы повышаете статус программы

Однако есть еще одно затруднение. Необходимо предотвратить вмешательство этого человека в чужой пароль. Linux включает схему SUID, которая позволяет запускать приложения с набором временно заимствованных разрешений, но это только половина дела безопасности.

Механизм контроля, предотвращающий работу кого-либо с паролем другого человека, содержится в программе passwd, а не в операционной системе и схеме SUID.

Программы, работающие с повышенными привилегиями, могут представлять угрозу безопасности, если они созданы без мышления «безопасность по дизайну». Это означает, что безопасность — это первое, что вы рассматриваете, а затем вы опираетесь на это. Не пишите свою программу, а потом постарайтесь защитить ее.

Самым большим преимуществом программного обеспечения с открытым исходным кодом является вы можете сами посмотреть исходный код или обратитесь к надежным экспертным обзорам этого. В исходном коде программы passwd есть проверки, поэтому вы можете увидеть, является ли человек, запускающий программу, root. Разрешены разные возможности, если кто-то является пользователем root (или кто-то использует sudo).

  Как смотреть интернет-телеканалы в Linux с помощью SMPlayer

Этот это код, который определяет, является ли кто-то root.

Фрагмент исходного кода из

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

Фрагмент исходного кода из

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

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

Команды Linux, использующие SUID

Ниже приведены некоторые команды Linux, которые используют бит SUID для предоставления команде повышенных привилегий при запуске обычным пользователем:

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Список команд Linux, у которых бит SUID установлен в окне терминала.

Обратите внимание, что имена файлов выделены красным, что означает, что бит SUID установлен.

Права доступа к файлу или каталогу обычно представлены тремя группами по три символа: rwx. Они обозначают чтение, запись и выполнение. Если буквы присутствуют, это разрешение предоставлено. Если вместо буквы стоит дефис (-), то разрешение не было дано.

Эти разрешения делятся на три группы (слева направо): для владельца файла, для членов группы файла и для других. Когда для файла установлен бит SUID, «s» представляет разрешение на выполнение владельцем.

Если бит SUID установлен для файла, который не имеет исполняемых функций, заглавная буква «S» обозначает это.

Мы рассмотрим пример. Обычный пользователь dave вводит команду passwd:

passwd

В

Команда passwd запрашивает у Дэйва новый пароль. Мы можем использовать команду ps чтобы увидеть детали запущенных процессов.

Мы будем использовать ps с grep в другом окне терминала и ищите процесс passwd. Мы также будем использовать параметры -e (каждый процесс) и -f (полный формат) с ps.

Набираем следующую команду:

ps -e -f | grep passwd

В

Сообщается о двух строках, вторая из которых — это процесс grep, ищущий команды со строкой «passwd» в них. Тем не менее, это первая строка, которая нас интересует, потому что она предназначена для процесса passwd, запущенного Дейвом.

Мы видим, что процесс passwd работает так же, как если бы его запустил root.

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

Бит SUID легко изменить с помощью chmod. Символический режим u + s устанавливает бит SUID, а символический режим us очищает бит SUID.

  Как создать новые префиксы Wine в Linux

Чтобы проиллюстрировать некоторые концепции бита SUID, мы создали небольшую программу под названием htg. Он находится в корневом каталоге пользователя dave, и для него не установлен бит SUID. Когда он выполняется, он отображает реальные и действующие идентификаторы пользователей (UID).

Реальность UID принадлежит человеку, запустившему программу. Эффективный идентификатор — это учетная запись, с которой программа ведет себя так, как если бы она была запущена.

Набираем следующее:

ls -lh htg
./htg

В

Когда мы запускаем локальную копию программы, мы видим, что для реального и эффективного идентификатора установлено значение dave. Итак, он ведет себя так же, как и должна нормальная программа.

Давайте скопируем его в каталог / usr / local / bin, чтобы другие могли его использовать.

Мы вводим следующее, используя chmod для установки бита SUID, а затем проверяем, установлен ли он:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

В

Итак, программа скопирована, и бит SUID установлен. Мы запустим его снова, но на этот раз запустим копию в папке / usr / local / bin:

htg

В

Несмотря на то, что Дэйв запустил программу, эффективным идентификатором является пользователь root. Итак, если Мэри запускает программу, происходит то же самое, как показано ниже:

htg

В

Настоящий идентификатор — Мэри, а эффективный — root. Программа работает с разрешениями пользователя root.

Бит SGID

Бит установки идентификатора группы (SGID) очень похож на бит SUID. Когда бит SGID установлен для исполняемого файла, эффективная группа устанавливается равной группе файла. Процесс запускается с разрешениями членов группы файла, а не с разрешениями человека, который его запустил.

Мы настроили нашу программу htg, чтобы она также показывала эффективную группу. Мы изменим группу программы htg на группу по умолчанию пользователя mary, mary. Мы также будем использовать символьные режимы us и g + s с chown, чтобы удалить бит SUID и установить SGID.

Для этого мы набираем следующее:

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

В

Вы можете увидеть бит SGID, обозначенный буквой «s» в разрешениях группы. Также обратите внимание, что группа настроена на mary, а имя файла теперь выделено желтым.

Прежде чем запускать программу, давайте выясним, к каким группам принадлежат Дэйв и Мэри. Мы будем использовать команду id с параметром -G (группы), распечатать все идентификаторы групп. Затем мы запустим программу htg от имени dave.

Набираем следующие команды:

id -G dave
id -G mary
htg

В

Идентификатор группы по умолчанию для Мэри — 1001, а эффективная группа программы htg — 1001. Итак, хотя она была запущена Дейвом, она работает с разрешениями участников в группе Мэри. Это как если бы Дэйв присоединился к группе Мэри.

Применим бит SGID к каталогу. Сначала мы создадим каталог под названием «работа», а затем изменим его группу на «компьютерщик». Затем мы установим бит SGID в каталоге.

  Как настроить программу для чтения электронных книг Foliate в Linux

Когда мы используем ls для проверки настроек каталога, мы также будем использовать параметр -d (каталог), чтобы видеть детали каталога, а не его содержимое.

Набираем следующие команды:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

В

Устанавливаются бит SGID и группа «компьютерщиков». Это повлияет на любые элементы, созданные в рабочем каталоге.

Мы вводим следующее, чтобы войти в рабочий каталог, создать каталог под названием «demo» и проверить его свойства:

cd work
mkdir demo
ls -lh -d demo

В

Бит SGID и группа «компьютерщиков» автоматически применяются к каталогу «demo».

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

touch useful.sh
ls -lh useful.sh

В

Группа нового файла автоматически устанавливается на «компьютерщик».

Липкий бит

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

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

Это позволяет вам создать каталог, который каждый — и запускаемые ими процессы — могут использовать в качестве общего хранилища файлов. Файлы защищены, потому что, опять же, никто не может удалить чужие файлы.

Создадим каталог под названием «общий». Мы будем использовать символический режим o + t с chmod, чтобы установить бит закрепления в этом каталоге. Затем мы рассмотрим разрешения для этого каталога, а также для каталогов / tmp и / var / tmp.

Набираем следующие команды:

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

В

Если бит закрепления установлен, исполняемый бит «другого» набора прав доступа к файлам устанавливается на «t». Имя файла также выделено синим цветом.

Папки / tmp и / var / tmp являются двумя примерами каталогов, для которых установлены все права доступа к файлам для владельца, группы и других (поэтому они выделены зеленым). Они используются как общие папки для временных файлов.

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

Напоминания

Ниже приводится краткий контрольный список того, что мы рассмотрели выше, для использования в будущем:

SUID работает только с файлами.
Вы можете применять SGID к каталогам и файлам.
Вы можете применять липкий бит только к каталогам.
Если индикаторы «s», «g» или «t» отображаются в верхнем регистре, исполняемый бит (x) не установлен.