Пользователь без полномочий root, получающий root-доступ после запуска «sudo vi / etc / hosts»

по поводу времени .

Будет произведен поиск по всем страницам руководства по запросу "timespec".

6
10.03.2018, 12:24
2 ответа

Пользователь, не являющийся -пользователем 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

34
27.01.2020, 20:20

Если 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может повлиять на вашу инфраструктуру безопасности :Если есть какое-либо место, где вы полагаетесь на имя хоста, соответствующее конкретной машине, тогда этот пользователь сможет указать это на другую машину. Учтите, что в этом, вероятно, нет необходимости .

16
27.01.2020, 20:20

Теги

Похожие вопросы