Можно ли отключить requiretty?

39

Я пытаюсь настроить сценарий развертывания с помощью Capistrano. На шаге cap deploy:setupсценарий подключается к моему серверу и пытается запустить команды, которые создают каталоги. Тогда я вижу ошибку:msudo: sorry, you must have a tty to run sudo

Есть предложенное решение для отключения requiretty на моем сервере. https://unix.stackexchange.com/a/49078/26271

Мне интересно, это безопасно делать?

dev.e.loper
источник

Ответы:

40

Наличие очень ограниченного преимущества безопасности при наличии requirettyна сервере. Если используется некоторый некорневой код (например, скрипт PHP), этот requirettyпараметр означает, что код эксплойта не сможет напрямую обновлять свои привилегии при запуске sudo.

У злоумышленника может быть другой способ получить root, и, конечно, злоумышленник все еще сможет удалить ваш сайт, но если злоумышленник не получит root, это означает, что другие службы, работающие от имени разных пользователей, будут работать нормально, и злоумышленник победит. не сможет стереть системные журналы. Если ни одно из ваших sudoправил не делает ничего опасного, например, создание каталога , это не проблема.

Более того - и, черт побери, за это requiretty- не нужно никаких привилегий для создания tty, например, с ожидаемым . Таким образом, вы могли бы также отключить requiretty: само по себе это не обеспечивает преимущества безопасности. Он обеспечивает небольшое преимущество в отношении возможности аудита при выполнении пользователями (поскольку журналы дают лучшее представление о том, кто вызвал sudoи откуда они поступают), но не при выполнении из фонового задания.

Жиль "ТАК - прекрати быть злым"
источник
1
Вы имеете в виду, что если пользователь может работать expect(или, screenнапример), то requirettyон бесполезен с точки зрения безопасности? (Я не совсем понял, что вы имели в виду под «проклятием» в этом предложении)
Сюзанна Дюперон,
@ GeorgesDupéron Да, вот и все. Так как каждый может создать tty, requirettyопция не запрещает кому-либо использовать sudo.
Жиль "ТАК - перестань быть злым"
3
requirettyможет предотвратить утечку пароля пользователем в виде открытого текста, если он выполняет команду sudo, для которой требуется пароль через ssh. Он заставляет пользователя вызывать ssh -t.
Крис Бетти
1
@ Крис Бетти - почему это хорошо, применять ssh -t ...?
Rop
В то время я думал, что в этом случае, если вы выполняете удаленную команду sudo, которая запрашивает пароль, то лучше использовать программу askpass удаленного компьютера, чем вводить пароль в виде открытого текста через консоль. Честно говоря, я понятия не имею, обеспечивает ли это повышенную безопасность, за исключением возможности предотвращения ситуации, когда ваш пароль отображается на экране при его вводе. Я думаю, что думал, что программа askpass не будет запущена без tty или pseudo-tty.
Крис Бетти