Существует множество случаев, когда обычным пользователям требуется повышенный доступ для выполнения определенных действий. Системный администратор не всегда может быть рядом, чтобы вводить пароль root каждый раз, когда пользователю нужен доступ к защищенному файлу, поэтому существуют специальные биты разрешений файла, позволяющие такое поведение. Set User ID (SUID) позволяет пользователю запускать программу от имени владельца файла программы, а не от своего собственного имени.
Давайте рассмотрим пример:
Допустим, я хочу изменить свой пароль, просто, не так ли? Я просто использую команду passwd:
passwd
Что делает команда passwd? Она изменяет несколько файлов, но самое главное — она изменяет файл /etc/shadow. Давайте посмотрим на этот файл на секунду:
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1134 Dec 1 11:45 /etc/shadow
О, подождите, этот файл принадлежит root? Как это возможно, что мы можем изменять файл, принадлежащий root?
Давайте посмотрим на другой набор разрешений, на этот раз для команды, которую мы запустили:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 Dec 1 11:45 /usr/bin/passwd
Вы заметите здесь новый бит разрешения s. Этот бит разрешения является SUID. Когда файл имеет этот набор разрешений, он позволяет пользователям, запустившим программу, получать разрешения владельца файла, а также разрешения на выполнение, в данном случае root. Таким образом, по сути, когда пользователь запускает команду passwd, он запускает ее от имени root.
Вот почему мы можем получить доступ к защищенному файлу, такому как /etc/shadow, когда мы запускаем команду passwd. Теперь, если вы удалите этот бит, вы увидите, что вы не сможете изменить /etc/shadow и, следовательно, изменить свой пароль.
Изменение SUID
Как и обычные разрешения, существуют два способа изменения разрешений SUID.
Символьный способ:
sudo chmod u+s myfile
Числовой способ:
sudo chmod 4755 myfile
Как видите, SUID обозначается цифрой 4 и добавляется перед набором разрешений. Вы можете увидеть SUID, обозначенный заглавной S. Это означает, что он по-прежнему делает то же самое, но не имеет разрешений на выполнение.