LINUX.ORG.RU
решено ФорумTalks

/etc/shadow [holywar] [Slackwae][нытиктреад][много букв]


0

1

А знаете ли вы, что /etc/shadow может прочитать только root? Да, это конечно круто - ни один засранец, не сможет подбирать пароли пользователей перебором. Но! При этом ни один честный пользователь не сможет реализовать авторизацию.

На всех системах, за исключением Slackware (Патрик, ты молодец и хороший человек), getpwnam вернёт вам что-то типа '*' вместо хэша пароля, если вы не root. Объяснить это легко - а нефиг пользователю знать хэши паролей. Во всяком случае так думают современные разработчики.

Ладно, забиваем на getpwnam и смотрим в сторону pam_authenticate. И что мы видим? При авторизации через модуль pam_unix.so мы попадаем на те же грабли. Динамическая библиотека работает в контексте программы и, соответственно, имеет те же самые права, что и программа её использующая - /etc/shadow по прежнему недоступна обычным пользователям.

И вот тут интересный момент - всё говорит о том, что не существует _универсального_ и _правильного_ способа дать пользователю возможность проверять авторизацию. Есть вариант использовать «костыли» в виде rpc сервера, работающего от root и дающего возможность локальным пользователям проверять авторизацию. Но без костылей - варианта нет.

И да, почему бы просто не поставить suid и не заморачиваться с проблемой? Как минимум три причины:

1. У пользователя может не быть прав, чтобы установить suid root

2. Программа может содержать ошибки и даже наличие исходного кода программы не даёт гарантии что среднестатистический админ обнаружит ошибку.

3. Программа может распространяться в бинарном виде. На Земле не так много людей, готовых поставить suid на программу без исходного кода.

Таки образом - выхода нет?

★★★

>> На Земле не так много людей, готовых поставить suid на программу без исходного кода.

Да ты оптимист :)

GotF ★★★★★
()

я что-то не совсем понял , а в чём собственно проблема7

guilder
()

> На всех системах, за исключением Slackware

Решето!

На Земле не так много людей, готовых поставить suid на программу без исходного кода.

Недавно один чувак прислал патч к моей поделке и написал, что просмотрев код, он пришел к выводу, что ей можно дать suid бит. Это пример правильной, здоровой паранойи. Проприетарщикам следует об этом подумать.

Relan ★★★★★
()
Ответ на: комментарий от Relan

> Решето!

-rw-r----- 1 root shadow 1440 2010-02-01 13:58 /etc/shadow

сам ты решето. в группу shadow не включай кого-попало.
и кстати да, решение с группой хорошее, Патрик еще раз доказал что он бог.

Komintern ★★★★★
()
Ответ на: комментарий от Komintern
jet@fame:~/src/srckdev$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1554 січ 27 12:18 /etc/shadow
jet@fame:~/src/srckdev$ cat /etc/debian_version 
6.0

ЧЯДНТ

Jetty ★★★★★
()
Ответ на: комментарий от Komintern

>> и кстати да, решение с группой хорошее, Патрик еще раз доказал что он бог.

gotf ~ % ll /etc/shadow
-rw-r----- 1 root shadow 661 2011-01-26 09:53 /etc/shadow
gotf ~ % cat /etc/issue
Debian GNU/Linux 5.0 \n \l
GotF ★★★★★
()
Ответ на: комментарий от GotF

дебиана под рукой нет, но в центоси вот:
# ls -la /etc/shadow
-r-------- 1 root root 1257 Oct 19 16:28 /etc/shadow

# cat /etc/issue
CentOS release 5.5 (Final)
Kernel \r on an \m

Komintern ★★★★★
()

Что-то я ничего не понимаю. А как же

ls -l /usr/bin/passwd
-r-s--x--x 1 root shadow 22100 2009-09-15 22:51 /usr/bin/passwd*
?

Да и /bin/login разве не от рута запускается?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Komintern
# ls -l /etc/shadow
----------. 1 root root 614 Aug 11 09:37 /etc/shadow
# cat /etc/redhat-release
Fedora release 13 (Goddard)
Relan ★★★★★
()

alman> ls -la /etc/shadow
-r--r----- 1 root shadow 994 Ноя 14 12:57 /etc/shadow

anonymous_sama ★★★★★
()
Ответ на: комментарий от alman

Будет работать только в бубунто-дебианах.

Более правильно разбить процесс на два процесса. Один из которых будет совсем мелкий, принимать username, password и возвращать 0 или 1. На такую программу можно и suid поставить. А запускать её из основного процесса с помощью какого-нибудь system.

Reset ★★★★★
()
Ответ на: комментарий от Komintern

действительно.

silwer@archmage /home/silwer $ ls -l /etc/shadow
-rw------- 1 root root 327 Jan 19 14:24 /etc/shadow
silwer@archmage /home/silwer $ cat /etc/lsb-release 
DISTRIB_DESCRIPTION="Arch Linux"

silw ★★★★★
()
drakmail@eeePC:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow 697 Дек 29 11:09 /etc/shadow
drakmail@eeePC:~$ cat /etc/agilialinux-version 
AgiliaLinux release 8.0_beta2 (Hot Ice)
drakmail ★★★★
()

Вообщем я прочитал еще пару раз, и так и не понял, кого ты где собрался авторизировать (аутентифицировать?), в рамках какого процесса, и вообще - что происходит.

В общем случае без сокетов не обойтись, но вполне возможно тебе подойдет разстандартный SCM_CREDENTIALS. Но это в том случае, если ты хочешь адекватных вещей, а не хрени типа каждый обычный-пользователь-системы А ВНЕЗАПНО знает ключевые данные каждого обычного-пользователя-системы Б.

vasily_pupkin ★★★★★
()

deb

$ ll /etc/shadow -rw-r----- 1 root shadow 37073 2011-01-27 13:39 /etc/shadow

slackware

$ ll /etc/shadow -rw-r----- 1 root shadow 568 2009-09-28 15:34 /etc/shadow

в чём проблема-то? зачем проверять хеши? КОМУ это надо, кроме злоумышленников?

drBatty ★★
()
Ответ на: комментарий от Reset

> Будет работать только в бубунто-дебианах.

Или умолять своего админа сделать нечто #chmod 0440 /etc/shadow или chmod 0440 /etc/master.passwd, а затем попросить добавить себя в группу shadow. :)

Более правильно разбить процесс на два процесса. Один из которых будет совсем мелкий, принимать username, password и возвращать 0 или 1. На такую программу можно и suid поставить. А запускать её из основного процесса с помощью какого-нибудь system.

Я не спорю, Ваш путь более правильный. Но почему этот suid'ный процесс не добавили в PAM хотя бы как по дефолту отключенную опцию?

alman ★★★
() автор топика
Ответ на: комментарий от alman

Лучше пусть он тебе сасл поставит. Там в коробке, если мне маразм не изменяет, есть локальный сервер аутентификации. PAM - это модули для процесса, который будет выполнять аутентификацию, а не для тех, кто её проходит.

vasily_pupkin ★★★★★
()

Во всех современных линуксах pam_unix.so вызывает суидный /sbin/unix_chkpwd, и всё работает из-под любого юзера. А вы все просто неудчники.

vasilenko ★★
()
Ответ на: комментарий от vasily_pupkin

> В общем случае без сокетов не обойтись, но вполне возможно тебе подойдет разстандартный SCM_CREDENTIALS. Но это в том случае, если ты хочешь адекватных вещей, а не хрени типа каждый обычный-пользователь-системы А ВНЕЗАПНО знает ключевые данные каждого обычного-пользователя-системы Б.

Я подумаю над этим. Спасибо.

alman ★★★
() автор топика
Ответ на: комментарий от drBatty

> в чём проблема-то? зачем проверять хеши? КОМУ это надо, кроме злоумышленников?

Не хеши, а пароль. Программе, запущенной обычным пользователем, надо проверить пароль. Кому это надо - второй вопрос. Например, какому либо серверу.

alman ★★★
() автор топика
Ответ на: комментарий от alman

unix_chkpwd

sshd currently uses PAM to check passwords. One of the PAM modules that sshd uses is pam_unix. This module first tries to read /etc/shadow directly. If it gets permission denied it executes /sbin/unix_chkpwd. unix_chkpwd accepts the user name and password and indicates to pam_unix whether the password matches the username.

Rost ★★★★★
()
Ответ на: unix_chkpwd от Rost

в общем pam_unix вызывает вспомогательную программу unix_chkpwd для проверки пароля, если у программы нет прав читать /etc/shadow.

Rost ★★★★★
()

Таки образом - выхода нет?

Права поправь и всё. Хотя не очень понятно зачем тебе пароли пользователей понадобилось проверять.

true_admin ★★★★★
()

alman, ты балбес! (c)

Юзеру не нужно иметь возможность «проводить аутентификацию». Потому, что это бесполезно и бессмысленно.

Зачем проходить аутентификацию? Чтобы безопасно получить права «того» юзера.
Как получить права «того» юзера? setuid/seteuid/setgid.
Кто может сделать setuid/seteuid/setgid? Только root, или suid-root.
suid-root может прочесть shadow
Не suid-root все равное не сможет стать «тем пользователем», а значит проходить системную аутентификацию смысла нет.
А если смысла нет, то и нефиг ему это уметь.

Вот и всё.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Are you shure?

Даже root может захотеть поднять какой-либо неsuidный сетевой сервис, например, по причине излишней паранойи. Таким образом, если злоумышленник взломает сервис (например, баг в libc или ошибка в программе), то дальше этого пользователя злоумышленник не пройдёт и уж тем более не обвалит систему.

Ы?

alman ★★★
() автор топика
Ответ на: комментарий от alman

Даже root может захотеть поднять какой-либо неsuidный сетевой сервис

Не-suid-ный не-root-овый процесс не сможет стать другим юзером, значит ему неположено знать про других юзеров, ясно?

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

> Не-suid-ный не-root-овый процесс не сможет стать другим юзером, значит ему неположено знать про других юзеров, ясно?

Да пусть хоть так. Как самого себя авторизировать? Юзер запустил на рабочем месте сетевую программу xxx. Как ему авторизироваться при соединении с этой программой с домашнего компьютера?

alman ★★★
() автор топика
Ответ на: комментарий от alman

Как ему авторизироваться при соединении с этой программой с домашнего компьютера?

А как он сейчас авторизуется в VNC гномовский? Вот пусть также и авторизуется в эту сферическую «сетевую программу xxx в вакууме».

no-dashi ★★★★★
()

>А знаете ли вы, что /etc/shadow может прочитать только root? Да, это конечно круто - ни один засранец, не сможет подбирать пароли пользователей перебором. Но! При этом ни один честный пользователь не сможет реализовать авторизацию.

http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=tcb&category=5

dn2010 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.