На некотором Linux-компьютере (SLES 11.1), который является клиентом NIS, я могу делать это как root:
ypcat shadow.byname
и получить вывод, то есть несколько строк с зашифрованными паролями, среди другой информации.
На том же компьютере с Linux, если я запускаю ту же команду, что и непривилегированный пользователь, я получаю
No such map shadow.byname. Reason: No such map in server's domain
Теперь я удивлен. Мои старые добрые знания говорят, что теневые пароли в NIS абсурдны, потому что в протоколе нет контроля доступа или аутентификации, и, таким образом, каждый (непривилегированный) пользователь может получить доступ к карте теней и тем самым получить зашифрованные пароли.
Очевидно, здесь картина иная. К сожалению, у меня нет доступа к серверу NIS, чтобы выяснить, что происходит. Мое единственное предположение состоит в том, что мастер NIS предоставляет карту только для подключения клиентов через привилегированный порт (> 1024), но это только необразованное предположение.
Какие механизмы существуют в текущих реализациях NIS, чтобы привести к подобному поведению? Насколько они «безопасны»? Можно ли легко обойти? Или теневые пароли в NIS так же безопасны, как старые добрые теневые файлы?
Доступ к картам, недоступным для чтения во всем мире /var/yp/{domainname}/
на главном сервере NIS только клиенты, делающие запросы с привилегированного порта (<1024). Это не так безопасно, как местное /etc/shadow
но все же немного лучше, чем ничего.
Для большей безопасности Sun разработала NIS +, но она так и не получила широкого распространения.
Намного лучше LDAP, где хэш пароля не нужно получать с сервера клиенту, а вместо этого клиент отправляет предложенный пароль на сервер для проверки (LDAP auth-bind).