местный хозяин в sudoers

5595
Zaz

Нет шансов на внутреннюю атаку, поэтому я хотел бы предоставить привилегии sudo пользователям локального компьютера, использующим sudoers . Я попробовал эти строки отдельно:

%admin localhost=(ALL) NOPASSWD: ALL %admin 127.0.0.1=(ALL) NOPASSWD: ALL 

Но sudoers, кажется, не признают localhostили 127.0.0.1.

Есть ли альтернатива, и если да, насколько она будет защищена? Может ли удаленный злоумышленник получить права локального пользователя с помощью cron или каким-либо другим способом?

6

3 ответа на вопрос

10
Gilles

%admin ALL=(ALL) NOPASSWD: ALL

Список хостов ограничивает правило sudo для хостов, на которых один сетевой интерфейс имеет имя или адрес в списке. Поскольку у каждого хоста есть петлевой интерфейс, каждый хост должен соответствовать вашему правилу; фактически, sudo пропускает петлевой интерфейс при проверке списков хостов, поэтому ни один хост не соответствует вашему правилу; В любом случае указывать хост как localhostбесполезный.

Sudo не выполняет никакой сетевой аутентификации: существует список хостов, так что вы можете развернуть один sudoersфайл на нескольких машинах и дать пользователям разные разрешения на разных машинах.

Cron также не выполняет никакой сетевой аутентификации. Удаленный пользователь получит пользовательские привилегии через неправильно настроенный или уязвимый сетевой сервер или клиент (http, ftp, samba, nfs, snmp, ssh,…).

"Since every host has a loopback interface, every host matches your rule." Are you sure that's correct? Neither `localhost` nor `127.0.0.1` seem to match the local computer. Zaz 13 лет назад 0
@ Джош: это задокументированное поведение. Фактически sudo пропускает интерфейс обратной связи при проверке того, находится ли хост в списке. Я обновил свой ответ, чтобы отразить это. В любом случае, указание `localhost` в списке хостов бесполезно. Gilles 13 лет назад 1
Каждый хост * будет * соответствовать вашему правилу, если система sudo это разрешит. bukzor 11 лет назад 0
0
Snaut

It seems that your hostname is not a "localhost". See output hostname command or check content your /etc/hostname

Как имя хоста поможет? Можете ли вы уточнить pun 8 лет назад 1
0
liar666

sudo ничего не знает об интерфейсе обратной связи (localhost / 127.0.0.1), но знает обо всех других интерфейсах. Если у вашей машины есть хотя бы один такой интерфейс, он считается подключенным к сети. Таким образом, во время настройки интерфейса, обычно выполняемой во время установки ОС, вам необходимо было указать «имя хоста», или, возможно, оно было назначено автоматически.

К этому «имени хоста» можно получить доступ через команду «hostname» или файл / etc / hostname.

Как следствие,
(i) ваша машина имеет интерфейс обратной связи, но также, безусловно, «имя хоста»
(ii) sudo может использовать это «сетевое имя»
(iii) только в том случае, если вы замените «localhost =» на «<ваше имя хоста>» в вашем файле sudoers правило будет соответствовать, и все будет работать так, как вы ожидаете.