4

У меня есть машина, которая используется в основном в качестве почтового сервера:

$ uname -a Linux myhost.com 2.6.32-279.19.1.el6.x86_64 # 1 SMP Ср 19 декабря 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

и я хотел бы, чтобы пользователи, которые фактически не входят в систему (но используют ее для аутентификации и получения своей почты), могли изменять свои собственные пароли. Если я помещу /usr /bin /passwd в /etc /shells (так что команда passwd является допустимой оболочкой), и изменю запись оболочки для пользователей, как в:

someuser:x:557:557:Some User:/home/someuser:/usr/bin/passwd

тогда, если они ssh к хосту, они получат что-то вроде этого:

$ ssh myhost.com
пароль someuser@myhost.com: < введите текущий пароль >
Последний вход в систему: ср 25 сен 16:07:35 2013 от some-ip
Смена пароля для пользователя someuser.
Смена пароля для пользователя.
(текущий) пароль UNIX: < введите свой текущий пароль еще раз >
Новый пароль: < введите новый пароль >
Введите новый пароль еще раз: < введите новый пароль еще раз >
-passwd: все токены аутентификации успешно обновлены.
Соединение с myhost.com закрыто.

это прекрасно работает ... но безопасно ли? Это какой-то способ использовать это и взломать настоящую оболочку?

Благодарю.

PS В моей среде разумно предположить, что у пользователей уже есть ssh - но если есть альтернатива для смены пароля, которая просто "лучше", я бы хотел услышать об этом :)

2 ответа2

2

Разрешение удаленного доступа хорошо известной программы (ssh) к программе suid в принципе небезопасно. passwd устанавливает идентификатор пользователя, то есть повышает права доступа. Ssh следует использовать с осторожностью, поскольку он также делегирует администрирование брандмауэра удаленному пользователю (переадресация портов и т.д.). Если sshd является единственным вариантом удаленного доступа, у вас есть только один сервер, и вы настаиваете на использовании этого сервера в качестве средства для смены паролей и обслуживания почты, затем ограничьте все параметры только для sshd и mail и укрепите остальную часть коробки, удалив все, кроме необходимых вам сервисов: смена почты и пароля.

Источник passwd был тщательно изучен, но знаете ли вы классический взлом входа в систему, который Кен Томпсон (создатель unix) сделал в компиляторе C? Прочтите « Размышления о доверии » Кена, чтобы решить, кому доверять.

http://cm.bell-labs.com/who/ken/trust.html

0

Мне нравится ответ @ datasmid, он имеет некоторые хорошие моменты.

Мне кажется, что то, что вы делаете, эквивалентно предоставлению пользователям приглашения оболочки и доступа к команде passwd .

Если вам это удобно, то я не вижу причин, почему вы не должны делать то, что делаете. Во всяком случае, это немного более безопасно, так как вы не позволяете пользователю легко выполнять любые другие команды.

Там не будет способ выйти из команды passwd и в оболочке , если passwd не делает некоторые положения для exec ИНГ в оболочку. Я не понимаю, почему это так. Вы , вероятно , можно найти на исходный код для passwd довольно легко для этого.

Злоумышленник может попытаться, если у него уже есть локальный пароль, переполнить буфер passwd , введя безумно длинный ответ на passwd . В этом случае все может быть возможно (риски могут быть уменьшены путем запуска на процессоре с поддержкой XD/NX и рандомизации адресов кучи). Я не знаю, что делает passwd , если его входной буфер превышен, но это первое, что приходит мне в голову. passwd - это программа setuid, но я надеюсь (не проверял источник), что она отбрасывает привилегии, когда обнаруживает, что euid не равен 0 ДО проверки на ввод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .