Что означает установленный sticky bit для каталога
Использование SETUID, SETGID и Sticky bit для расширенной настройки прав доступа в операционных системах Linux
2542 просмотров 3 2021-03-25 2021-03-30
В этой статье мы расскажем, как использовать специальные биты разрешений в операционных системах Linux.
Речь пойдет о трех битах – Setuid, Setgid и Sticky Bit. Это специальные типы разрешений позволяют задавать расширенные права доступа на файлы или каталоги.
Статья будет полезна пользователям и администраторам, которые уже знакомы с настройкой базовых прав в операционных системах Linux. Итак, давайте преступим.
Коротко о правах доступа в Linux
В операционных системах Linux используются 3 базовых права доступа – на чтение (read), запись (write) и исполнение (execute). Соответственно, права назначаются пользователю (user), группе (group) и всем остальным (world). Рассмотрим их символьные обозначения:
В случае числового обозначения прав доступа используются цифры от 0 до 7, где каждая цифра соответствует определенному набору прав доступа:
Настройка Setuid
Setuid – это бит разрешения, который позволяет пользователю запускать исполняемый файл с правами владельца этого файла. Другими словами, использование этого бита позволяет нам поднять привилегии пользователя в случае, если это необходимо. Классический пример использования этого бита в операционной системе это команда sudo.
Как мы видим на месте, где обычно установлен классический бит x (на исполнение), у нас выставлен специальный бит s. Это позволяет обычному пользователю системы выполнять команды с повышенными привилегиями без необходимости входа в систему как root, разумеется зная пароль пользователя root.
Установка бита setuid не представляет сложности. Для этого используется команда:
Как видим, файл не имеет разрешений на выполнение для пользователя, группы и остальных. Добавим бит setuid:
Обратим внимание, что вместо ожидаемой буквы «s», видим заглавную «S». Почему? Это случается, если setuid установлен, но сам владелец файла не имеет прав на его выполнение. Добавим это разрешение с помощью команды chmod u + x.
Настройка Setgid
Выполним команду chmod g + s и посмотрим результаты.
Как разобрались выше, меняем заглавную « S » путем выдачи прав на исполнение группе-владельцу:
Настройка Sticky Bit
Символ «t» указывает, что на папку установлен Sticky Bit.
Удаление специальных битов разрешений
Вывод
Мы разобрали что из себя представляют специальные биты разрешений Setuid, Setgid и Sticky bit в операционных системах Linux и как ими пользоваться на практике. Умение использовать эти биты позволит вам произвести более гибкую настройку прав доступа к ресурсам вашего сервера.
linux-notes.org
Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux
Использование «sticky bit» прав в Unix/Linux
Unix является многопользовательской ОС и в основном, устроен так, что несколько пользователей могут работать одновременно. Таким образом, программа которая находится в памяти требует меньше времени чтобы начать свою работу. Таким образом, когда один пользователь только что использовал программу, а затем новый пользователь хочет использовать ту же самую программу, то 2-й юзверь не будет иметь временной задержки для инициализации утилиты.
Установка Sticky Bit
Выставляем sticky bit на файл:
Или можно еще использовать следующую команду:
Sticky bit, в основном используется в общих каталогах, таких как /var или /tmp, поскольку пользователи могут создавать файлы, читать и выполнять их, принадлежащие другим пользователям, но не могут удалять файлы, принадлежащие другим пользователям. Например, если пользователь (предположим bob) создает файл с именем /tmp/bob, то другой пользователь (допустим tom) не может удалить этот файл, даже если в каталоге /tmp есть разрешение 777. Если sticky bit не установлен, то tom юзер может удалить /tmp/bob, так как файл /tmp/bob наследует разрешения родительского каталога.
Использование 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 бит установлен на любой каталог, все подкаталоги и файлы, созданные внутри получат те же пермишены что и группы в качестве основного каталога.
Устанавливаем 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 также может использоваться для установки или отмены следующих значений в качестве префикса для обычных трех числовых привилегий:
Тема «Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux» завершена.
🧟♀️ StickyBit, SUID и SGID в Linux с примерами
В этой статье мы расскажем о специальных разрешениях, которые работают с файлами и каталогами, которые называются Stickybit, SUID и SGID.
Sticky работает только для каталогов.
Если пользователь хочет создать или удалить файл / каталог в каком-либо каталоге, ему нужно разрешение на запись в этот каталог.
Разрешение на запись в каталог дает пользователю право создавать файл, а также право удалять его.
Каталог /tmp – это каталог для временных файлов / каталогов.
Этот каталог обладает всеми правами на всех трех уровнях, поскольку все пользователи должны создавать/удалять свои временные файлы.
Но так как пользователи имеют разрешение на запись в этот каталог, они могут удалить любой файл в этом каталоге.
Разрешения этого файла не влияют на удаление.
Но с установленным в каталоге стики битом любой может создать в нем файл / каталог, но может удалить только свои собственные файлы.
Файлы, принадлежащие другим пользователям, не могут быть удалены.
stickybit – Как просмотреть и установить
Вы можете заметить, что тег t добавлен в каталог /tmp, и это означает, что для этого каталога установлен бит.
В Linux стики бит может быть установлен командой chmod.
Примечание. В ОС Unix stickybit имеет другое назначение, но мы не обсуждаем его здесь.
Что такое SUID бит и как его установить
Когда исполняемый файл запускается, он запускается под управлением пользователя, который его выполнил.
Это означает, что когда пользователь student запускает команду ls, соответствующий процесс будет выполняться под управлением пользователя student.
Бит SUID, также известный как бит установки идентификатора пользователя, перезаписывает это поведение.
Если в программе установлен бит SUID, то эта программа будет работать как владелец этого файла, независимо от того, кто его выполняет.
У команды passwd в Linux установлен бит SUID.
Это можно увидеть в третьем поле прав доступа. ‘S’ вместо ‘x’ указывает, что установлен бит SUID.
С установленным битом SUID, когда обычный пользователь (скажем, student) запускает команду passwd, команда запускается с владельцем «root», а не с учетной записью student, поскольку root является владельцем этого файла.
Это необходимо, потому что пароли хранятся в файле /etc/shadow, который не имеет разрешения на групповом или другом уровне.
Вы должны понимать, что все пользователи не могут получить разрешение на чтение или запись этого файла по соображениям безопасности; в противном случае они будут читать / изменять пароли других пользователей.
Таким образом, это вызывает проблему: если у пользователей нет прав доступа к этому файлу, как они будут изменять свои собственные пароли?
SUID немного решает проблему.
У команды passwd установлен бит SUID, поэтому, когда обычные пользователи выполняют эту команду, они запускают ее под владельцем root, то есть владельцем команды passwd.
Как установить и сбросить бит SUID
Следует отметить, что бит SUID работает только с файлами.
Чтобы установить бит SUID на файл, используйте команду chmod следующим образом
Числовой метод для изменения разрешений также может быть использован.
Предположим, что если обычные разрешения для файла равны 744, то с установленным битом SUID они станут 4744.
Бит SUID имеет значение 4.
Как SGID Bit работает с файлами и каталогоми
В отличие от бита SUID, бит SGID работает как с файлами, так и с каталогами, но в обоих случаях он имеет различное значение.
По файлам:
Для файла он имеет значение, аналогичное значению бита SUID, то есть когда любой пользователь выполняет файл с установленным битом SGID, он всегда будет выполняться с владельцем группы этого файла, независимо от того, кто его запускает.
Например, файл /sbin/netreport имеет установленный бит SGID, который можно увидеть в «s» вместо «x» в разрешениях группы.
Этот файл имеет групповое владение группой root.
Таким образом, когда пользователь (скажем, student) выполняет его, соответствующий процесс не будет принадлежать группе student, а будет принадлежать группе root.
По каталогам:
Теперь поговорим о SGID в каталогах.
SGID для каталогов используется для создания совместных каталогов.
Чтобы понять бит SGID для каталогов, рассмотрим следующий сценарий:
Предположим, что три пользователя Джек, Джонс и Дженни вместе работают над каким-то проектом.
Все они принадлежат к группе под названием javaproject.
Для выполнения проекта им необходимо предоставить общий доступ ко всем файлам, связанным с проектом.
Все они должны видеть файлы друг друга.
Это можно сделать, просто предоставив разрешение на чтение на уровне группы.
Далее, предположим, что каталогом, используемым для проекта, является “/javaproject”.
Здесь возникает проблема: когда файл создается, он принадлежит к основной группе пользователя, создавшего файл.
Таким образом, когда разные пользователи создают свои файлы в этом каталоге, эти файлы не будут принадлежать группе javaproject group.
Что мы делаем для решения нашей проблемы, так это то, что мы устанавливаем группу каталога /javaproject равной группе javaproject, и устанавливаем бит SGID.
Когда в каталоге установлен бит SGID, все файлы и каталоги, созданные в нем, имеют групповое владение группой, связанной с этим каталогом.
Это означает, что после установки бита SGID в каталоге /javaproject все файлы и каталоги, создаваемые в этом каталоге, будут принадлежать группе «javaproject».
Более того, это поведение является рекурсивным, то есть в каталогах, созданных в этом каталоге, также будет установлен бит SGID.
Права у нового каталога также будут такими же, как и у каталога /javaproject.
Бит SGID может быть установлен командой chmod следующим образом:
Теперь, когда пользователь jones создает файл в этом каталоге, он создается под владельцем группы javaproject.
Числовое значение, соответствующее биту SGID, равно 2. Поэтому, чтобы численно добавить бит SGID, используйте следующую команду:
Специальные разрешения для файлов в Linux. SUID, GUID и Sticky Bit
Главное меню » Linux » Специальные разрешения для файлов в Linux. SUID, GUID и Sticky Bit
Обычные права доступа к файлам
Помимо этих обычных разрешений, есть несколько специальных разрешений для файлов, и не многие пользователи Linux знают об этом.
Чтобы начать говорить о специальных разрешениях, мы собираемся предположить, что у вас есть некоторые знания об основных правах доступа к файлам. Если нет, пожалуйста, прочитайте наше превосходное руководство, объясняющее разрешение файла Linux.
Теперь мы покажем вам некоторые специальные разрешения с новыми буквами в файловой системе Linux.
В этом примере команда passwd, отвечающая за изменение пароля пользователя, имеет букву s в том же месте, которое мы ожидаем увидеть, x или – для прав пользователя. Важно отметить, что этот файл принадлежит пользователю root и корневой группе.
С этим разрешением вам не нужно предоставлять sudoдоступ конкретному пользователю, когда вы хотите, чтобы он запустил какой-либо корневой скрипт.
Что такое SUID?
Когда бит SUID установлен для исполняемого файла, это означает, что файл будет выполняться с теми же разрешениями, что и владелец исполняемого файла.
Давайте возьмем практический пример. Если вы посмотрите на двоичный исполняемый файл команды passwd, у него установлен бит SUID.
Это означает, что любой пользователь, выполняющий команду passwd, будет запускать ее с теми же правами, что и root.
В чем выгода? Команде passwd необходимо отредактировать файлы, такие как /etc/passwd, /etc/shadow, чтобы изменить пароль. Эти файлы принадлежат пользователю root и могут быть изменены только пользователем root. Но благодаря флагу setuid (бит SUID) обычный пользователь также сможет изменять эти файлы (принадлежащие пользователю root) и менять свой пароль.
По этой причине вы можете использовать команду passwd для изменения собственного пароля, несмотря на тот факт, что файлы, которые изменяет эта команда, принадлежат пользователю root.
Как использовать SUID, SGID и Sticky Bits в Linux
от sasza
SUID, SGID и Sticky Bits — это мощные специальные разрешения, которые вы можете установить для исполняемых файлов и каталогов в Linux. Мы поделимся преимуществами и потенциальными недостатками их использования.
Они уже используются
Обеспечение безопасности многопользовательской операционной системы связано с несколькими трудностями. Возьмем, к примеру, (казалось бы) базовую концепцию паролей. Все они должны быть сохранены, чтобы каждый раз, когда кто-то входит в систему, система могла сравнивать вводимый им пароль с сохраненной копией. Очевидно, что поскольку пароли — это ключи к королевству, их необходимо беречь.
В Linux сохраненные пароли защищены двумя способами: они зашифрованы, и только кто-то с правами root может получить доступ к файлу, содержащему пароли. Это может показаться прекрасным, но представляет собой затруднение: если только люди с привилегиями root могут получить доступ к сохраненным паролям, как те, у кого нет такого доступа, изменят свои пароли?
Повышение вашего статуса
Идеальной была бы схема, в которой любой в системе мог бы запустить программу passwd, но при этом программа passwd сохранила бы повышенные привилегии root. Это дало бы возможность любому изменить свой пароль.
Вышеупомянутый сценарий — это именно то, что делает бит установки идентификатора пользователя (SUID). Это запускает программы и команды с разрешениями владельца файла, а не с разрешениями человека, который запускает программу.
Вы повышаете статус программы
Однако есть еще одно затруднение. Необходимо предотвратить вмешательство этого человека в чужой пароль. Linux включает схему SUID, которая позволяет запускать приложения с набором временно заимствованных разрешений, но это только половина дела безопасности.
Механизм контроля, предотвращающий работу кого-либо с паролем другого человека, содержится в программе passwd, а не в операционной системе и схеме SUID.
Программы, работающие с повышенными привилегиями, могут представлять угрозу безопасности, если они созданы без мышления «безопасность по дизайну». Это означает, что безопасность — это первое, что вы рассматриваете, а затем вы опираетесь на это. Не пишите свою программу, а потом постарайтесь защитить ее.
Самым большим преимуществом программного обеспечения с открытым исходным кодом является вы можете сами посмотреть исходный код или обратитесь к надежным экспертным обзорам этого. В исходном коде программы passwd есть проверки, поэтому вы можете увидеть, является ли человек, запускающий программу, root. Разрешены разные возможности, если кто-то является пользователем root (или кто-то использует sudo).
Этот это код, который определяет, является ли кто-то root.
Используя основные команды и утилиты Linux, вы можете быть уверены, что в них встроена безопасность и что код проверялся много раз. Конечно, всегда есть угроза неизвестных пока эксплойтов. Однако быстро появляются патчи или обновления, чтобы противостоять любым вновь обнаруженным уязвимостям.
Это стороннее программное обеспечение — особенно любое, которое не является открытым исходным кодом — вам нужно быть предельно осторожным при использовании SUID с. Мы не говорим, не делайте этого, но если вы это сделаете, вы должны быть уверены, что это не подвергнет вашу систему риску. Вы не хотите повышать привилегии программы, которая не будет правильно управлять собой и человеком, который ее запускает.
Команды Linux, использующие SUID
Ниже приведены некоторые команды Linux, которые используют бит SUID для предоставления команде повышенных привилегий при запуске обычным пользователем:
Обратите внимание, что имена файлов выделены красным, что означает, что бит SUID установлен.
Права доступа к файлу или каталогу обычно представлены тремя группами по три символа: rwx. Они обозначают чтение, запись и выполнение. Если буквы присутствуют, это разрешение предоставлено. Если вместо буквы стоит дефис (-), то разрешение не было дано.
Эти разрешения делятся на три группы (слева направо): для владельца файла, для членов группы файла и для других. Когда для файла установлен бит SUID, «s» представляет разрешение на выполнение владельцем.
Если бит SUID установлен для файла, который не имеет исполняемых функций, заглавная буква «S» обозначает это.
Мы рассмотрим пример. Обычный пользователь dave вводит команду passwd:
Набираем следующую команду:
Сообщается о двух строках, вторая из которых — это процесс grep, ищущий команды со строкой «passwd» в них. Тем не менее, это первая строка, которая нас интересует, потому что она предназначена для процесса passwd, запущенного Дейвом.
Мы видим, что процесс passwd работает так же, как если бы его запустил root.
Установка бита SUID
Бит SUID легко изменить с помощью chmod. Символический режим u + s устанавливает бит SUID, а символический режим us очищает бит SUID.
Чтобы проиллюстрировать некоторые концепции бита SUID, мы создали небольшую программу под названием htg. Он находится в корневом каталоге пользователя dave, и для него не установлен бит SUID. Когда он выполняется, он отображает реальные и действующие идентификаторы пользователей (UID ).
Реальность UID принадлежит человеку, запустившему программу. Эффективный идентификатор — это учетная запись, с которой программа ведет себя так, как если бы она была запущена.
Когда мы запускаем локальную копию программы, мы видим, что для реального и эффективного идентификатора установлено значение dave. Итак, он ведет себя так же, как и должна нормальная программа.
Давайте скопируем его в каталог / usr / local / bin, чтобы другие могли его использовать.
Мы вводим следующее, используя chmod для установки бита SUID, а затем проверяем, установлен ли он:
Итак, программа скопирована, и бит SUID установлен. Мы запустим его снова, но на этот раз запустим копию в папке / usr / local / bin:
Несмотря на то, что Дэйв запустил программу, эффективным идентификатором является пользователь root. Итак, если Мэри запускает программу, происходит то же самое, как показано ниже:
Настоящий идентификатор — Мэри, а эффективный — root. Программа работает с разрешениями пользователя root.
Бит SGID
Бит установки идентификатора группы (SGID) очень похож на бит SUID. Когда бит SGID установлен для исполняемого файла, эффективная группа устанавливается равной группе файла. Процесс запускается с разрешениями членов группы файла, а не с разрешениями человека, который его запустил.
Мы настроили нашу программу htg, чтобы она также показывала эффективную группу. Мы изменим группу программы htg на группу по умолчанию пользователя mary, mary. Мы также будем использовать символьные режимы us и g + s с chown, чтобы удалить бит SUID и установить SGID.
Для этого мы набираем следующее:
Вы можете увидеть бит SGID, обозначенный буквой «s» в разрешениях группы. Также обратите внимание, что группа настроена на mary, а имя файла теперь выделено желтым.
Набираем следующие команды:
Идентификатор группы по умолчанию для Мэри — 1001, а эффективная группа программы htg — 1001. Итак, хотя она была запущена Дейвом, она работает с разрешениями участников в группе Мэри. Это как если бы Дэйв присоединился к группе Мэри.
Применим бит SGID к каталогу. Сначала мы создадим каталог под названием «работа», а затем изменим его группу на «компьютерщик». Затем мы установим бит SGID в каталоге.
Набираем следующие команды:
Устанавливаются бит SGID и группа «компьютерщиков». Это повлияет на любые элементы, созданные в рабочем каталоге.
Мы вводим следующее, чтобы войти в рабочий каталог, создать каталог под названием «demo» и проверить его свойства:
Бит SGID и группа «компьютерщиков» автоматически применяются к каталогу «demo».
Введите следующее, чтобы создать файл с прикоснуться команду и проверьте ее свойства:
Группа нового файла автоматически устанавливается на «компьютерщик».
Липкий бит
Клейкая насадка получила свое название благодаря своему историческому назначению. При установке для исполняемого файла он сообщает операционной системе, что текстовые части исполняемого файла должны храниться в свопинге, что ускоряет их повторное использование. В Linux липкий бит влияет только на каталог — установка его для файла не имеет смысла.
Когда вы устанавливаете для каталога липкий бит, люди могут удалять только принадлежащие им файлы в этом каталоге. Они не могут удалять файлы, которые принадлежат кому-то другому, независимо от того, какая комбинация прав доступа к файлам установлена для файлов.
Это позволяет вам создать каталог, который каждый — и запускаемые ими процессы — могут использовать в качестве общего хранилища файлов. Файлы защищены, потому что, опять же, никто не может удалить чужие файлы.
Создадим каталог под названием «общий». Мы будем использовать символический режим o + t с chmod, чтобы установить бит закрепления в этом каталоге. Затем мы рассмотрим разрешения для этого каталога, а также для каталогов / tmp и / var / tmp.
Набираем следующие команды:
Если бит закрепления установлен, исполняемый бит «другого» набора прав доступа к файлам устанавливается на «t». Имя файла также выделено синим цветом.
Папки / tmp и / var / tmp являются двумя примерами каталогов, для которых установлены все права доступа к файлам для владельца, группы и других (поэтому они выделены зеленым). Они используются как общие папки для временных файлов.
Теоретически с такими разрешениями любой должен иметь возможность делать что угодно. Однако липкий бит отменяет их, и никто не может удалить файл, который ему не принадлежит.
Напоминания
Ниже приводится краткий контрольный список того, что мы рассмотрели выше, для использования в будущем:
SUID работает только с файлами.
Вы можете применять SGID к каталогам и файлам.
Вы можете применять липкий бит только к каталогам.
Если индикаторы «s», «g» или «t» отображаются в верхнем регистре, исполняемый бит (x) не установлен.





















