Как Setuid Позволяет Пользователям Запускать Файлы с Повышенными Привилегиями

Bg Setuid

Когда вы запускаете исполняемый файл в Linux, он обычно выполняется с текущим идентификатором пользователя и группы. Однако бывают случаи, когда вам нужно запустить этот файл от имени другого пользователя (например, root). Вместо того чтобы переключать свою учетную запись, вы можете воспользоваться setuid, чтобы запустить исполняемый файл от имени владельца файла, а не текущего пользователя. Здесь мы объясним, как работает setuid и как он позволяет пользователям запускать исполняемые файлы/бинарные файлы с повышенными привилегиями.

Как работает setuid?

Setuid означает SET User ID при выполнении. Допустим, у нас есть исполняемый файл под названием “identity”, созданный пользователем root. Когда вы запускаете его, он будет выполняться с вашим идентификатором пользователя, идентификатором группы и привилегиями пользователя. Если бит setuid установлен на файле “identity”, когда вы запускаете его, он будет выполняться от имени пользователя root и с его привилегиями.

В качестве иллюстрации мы можем сначала проверить владельца файла “identity” и убедиться, что он принадлежит пользователю root. Строка разрешений также показывает, что биты исполняемости (x) установлены для пользователя, группы и других.

Пользователь “john1” выполняет файл “identity”, который становится процессом при выполнении. Как показано в списке процессов, процесс создается и выполняется под именем пользователя “john1” и идентификатором пользователя.

Setuid John Id Owner

Далее, как пользователь root, мы устанавливаем бит setuid для файла “identity”:

chmod u+s /usr/bin/identity

“u” обозначает, что бит setuid (+s) должен быть установлен только для пользователя.

Для владельца в исполняемой части строки разрешений мы можем видеть, что “x” был заменен на “s”. Каждый раз, когда вы встречаете “s” для исполняемого файла, это означает, что бит setuid был установлен на него.

Числовой вариант команды chmod также может быть использован, как показано ниже.

chmod4755/usr/bin/identity

Добавление 4 в числовую строку разрешений обозначает включение бита setuid.

Следующее происходит, когда “john1” снова выполняет файл “identity”. Посмотрев на список запущенных процессов, мы теперь можем видеть, что процесс создается и выполняется пользователем “root” вместо “john1”.

Setuid John Ids Ownder

Важное использование бита setuid

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

Причина проста: информация о пароле пользователя хранится в файлах “/etc/passwd” и “/etc/shadow”, которые могут быть изменены только пользователем “root”. Когда “john1” пытается изменить пароль для себя, ему необходимо иметь разрешение на изменение информации в двух вышеупомянутых файлах. Наличие установленного бита setuid на passwd позволяет “john1” временно иметь права root для изменения пароля пользователя и также обновления информации в двух файлах.

Риск безопасности setuid

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

Заключение

Setuid может быть установлен только на исполняемые файлы. Аналогично, бит setgid также может быть установлен, что позволяет всем членам группы запускать исполняемое с правами владельца.

Обратите внимание, что биты setuid и setgid являются чувствительными к безопасности и должны использоваться только квалифицированными системными администраторами.

Читать далее:

  • Как использовать Sticky Bit для управления файлами в общих каталогах в Linux
  • Как выполнять проверку орфографии в терминале Linux
  • Использование команд find, locate, which и whereis для поиска файлов в Linux