по поводу времени
.
Будет произведен поиск по всем страницам руководства по запросу "timespec".
Пользователь, не являющийся -пользователем root, становится пользователем root, как только он успешно запускаетсяsudo
(с учетом предполагаемого root
целевого пользователя ); они начали работать vi
как root. Когда вы запрашиваете vi
оболочку, она покорно запускает оболочку от имени текущего пользователя --root! Я должен уточнить, что вы не должны "выходить" из vi с помощью команды :sh
, так как это запрашивает оболочку. Вместо этого выйдите с помощью :q
.
Linux допускает такую функциональность, потому что sudo
предназначен именно для этого! Возможно, вы видели лекцию, которую читает sudo:
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo предлагает ограниченный «лежачий полицейский» для этого, когда дело доходит до предоставления доступа «ВСЕ», в форме оператора отрицания !
, часто демонстрируемого как:
jill SERVERS = /usr/bin/, !SU, !SHELLS
где jill разрешено запускать программы из /usr/bin, но не все, что указано в псевдонимах SU или SHELLS.
На справочной странице sudoers есть целый раздел «Примечания по безопасности», когда речь идет о предоставлении крупномасштабного -доступа через sudo, а затем о попытках ограничить его.
Limitations of the ‘!’ operator
It is generally not effective to “subtract” commands from ALL using the ‘!’ operator. A user can trivially circumvent this by copying the desired command to a different name and then executing that.
и
In general, if a user has sudo ALL there is nothing to prevent them from creating their own program that gives them a root shell (or making their own copy of a shell) regardless of any ‘!’ elements in the user specification.
и более уместно:
Preventing shell escapes
Once sudo executes a program, that program is free to do whatever it pleases, including run other programs. This can be a security issue since it is not uncommon for a program to allow shell escapes, which lets a user bypass sudo's access control and logging. Common programs that permit shell escapes include shells (obviously), editors, paginators, mail and terminal programs
Если sudo vi /etc/hosts
выполнено успешно, это означает, что системный администратор разрешил пользователю запускать vi /etc/hosts
от имени root.В этом весь смысл sudo :, который позволяет системному администратору разрешать определенным пользователям выполнять определенные команды с дополнительными привилегиями.
Предоставление пользователю разрешения на запуск vi
дает ему право запускать любую команду vi, включая :sh
для запуска оболочки и :w
для перезаписи любого файла в системе. Правило, позволяющее запускать только vi /etc/hosts
, не имеет смысла, поскольку позволяет пользователю запускать произвольные команды.
Никакого «взлома» здесь нет. Нарушение безопасности происходит из-за неправильной конфигурации, а не из-за дыры в модели безопасности. Sudo особо не пытается предотвратить неправильную настройку. Хорошо известно -, что его документация сложна для понимания; если сомневаетесь, поспрашивайте и не пытайтесь делать слишком сложные вещи.
Как правило, сложно дать пользователю определенную привилегию, не дав ему больше, чем предполагалось. Бульдозерный подход, такой как предоставление им права запускать интерактивную программу, такую как vi, обречен на провал. Общий совет — предоставить минимальные привилегии, необходимые для выполнения задачи. Если вы хотите разрешить пользователю изменять один файл, не давайте ему разрешение на запуск редактора. Вместо этого либо:
Дайте им разрешение на запись в файл. Это самый простой метод с наименьшим риском сделать что-то, чего вы не планировали.
setfacl u:bob:rw /etc/hosts
Дайте им разрешение на редактирование файла через sudo. Для этого не давайте им разрешение на запуск редактора. Как объясняется в документации sudo, дайте им разрешение на запуск sudoedit
, который вызывает редактор от имени исходного пользователя , а затем использует дополнительные привилегии только для изменения файла.
bob ALL = sudoedit /etc/hosts
Метод sudo более сложен в настройке и менее прозрачен для пользователя, поскольку ему приходится вызывать sudoedit
вместо того, чтобы просто открывать файл в своем редакторе, но его преимущество заключается в том, что все обращения регистрируются.
Обратите внимание, что разрешение пользователю редактировать /etc/hosts
может повлиять на вашу инфраструктуру безопасности :Если есть какое-либо место, где вы полагаетесь на имя хоста, соответствующее конкретной машине, тогда этот пользователь сможет указать это на другую машину. Учтите, что в этом, вероятно, нет необходимости .