LINUX.ORG.RU

Авторизация через PAM - need help!!!


0

0

Написал прогу, отлично проверяет пароль, но только того пользователя, который ее запустил, но никак не хочет никого другого. На всех остальных пользователей (кроме вызвавшего) функция pam_authenticate(...) возвращает PAM_AUTH_ERR. И это не зависит от содержания файла в /etc/pam.d Пробывались варианты: auth required /lib/security/pam_pwdb.so nullok shadow audit auth required /lib/security/pam_unix.so audit auth required pam_stack.so service=system-auth

Где грабли? и как же в конце-то концов работают, все остальные su, login и прочее...

PS: При использовании под root'ом можно проверять логин, пароль кого угодно :)

anonymous

Посмотри пермиции программ su, passwd и прочих, которые умеют лезть в рутовые файлы типа /етц/шэдоу и поставь своей проге такие же.

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

Да смотрел, в частности смотрел, на реализацию pam интерефейса у самбы - файлик pampass.c. Вроде бы все как у меня, за исключением не нужных наворотов. А какие же могут быть пермишины, если прога и так в рутовые файлы лезет, но только для проверки данных пользователя ее запустившего, даже не привелигированного? Здесь они как-то это где-то забили, но все это удачно обходят....

anonymous
()
Ответ на: комментарий от Nefer

Это конечно верное замечание, но я пока-что хочу попробывать все сделать культурно через pam. А навешать set uid root на свою программу и прочитать /etc/shadow в ручную, это я завсегда смогу.
Только вот не хочу я потенциальных дыр в безопасности системы.
Вопрос к тем, кто пользовал pam: как авторизовать любого пользователя, а не только запустившего программу?

anonymous
()

Выключаем руки, включаем голову. Шэдоу-файл тебе и не нужно разбирать врукопашную -- этим занимаются специально обученные ПАМ-либы, которым нужны рутовые пермиции, получаемые ими от твоей суидной или из-под рута запущенной программы. А ты думал! Если каждый пользователь с птичьими правами сподобится дорваться до содержимого файла с паролями, запустив такую в-два-притопа-три-прихлопа-сляпанную приблуду -- грош цена секьюрности в такой многопользовательской системе.

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

Если я рут мне нафиг не надо pam, для меня вся система открыта и если хочу я вообще shadow сотру нафиг, /dev/hda0 запорчу ну и т.д. И что сколько я по твоиму должен демонов пускать под рутом и программ давать suid???

Вот мое понимание pam интерфейса:

Pam это уже есть интерфейс для лоступа к тому же shadow, для ВСЕХ кому *разрешено*. Но им не надо для этого быть suid'ными или запускаться от рута, достаточно pam'у иметь одну(!) на всю систему suid'ную защищенную программу, а все остальные будут через специальный интерфейс обращаться к ней и получать свои данные о пользователях. В linux это программа /sbin/unix_chkpwd, которую кто угодно может запускать, но использовать ее можно только через pam.
Теперь, насчет "каждый пользователь с птичьими правами". Для того чтобы прогамма могла использовать интерфейс pam, она должна быть прописана в каталоге /etc/pam.d, где само сабой не рут прогу не пропишет. Вот и выходит, что программа не имея рутовых привелегий, одобренная(прописанная) рутом, и использующая безопасный интерфейс может(должна, но не хочет) проверять правильность пользовательских паролей.

Ну а вопрос в том, ПаЧиМУ эта блядская утилита или что-то еще не дает, проверять пароль под произвольным пользователем... еще одна заморочка с безопасностью, но где смысл???

anonymous
()

Ну ПАМ же не сам будет тебе /sbin/pwdb_chkpwd запускать. Ручками,
батенька, ручками. Да и вообще (quote from pam.txt):

A helper binary, pwdb_chkpwd, is provided to check the user's
password when it is stored in a read protected database. This
binary is very simple and will only check the password of the
user invoking it. It is called transparently on behalf of the
user by the authenticating component of this module. In this
way it is possible for applications like xlock to work without
being setuid-root.
Как ты и сказал. Впрочем ее не юзал, не знаю.
Гляди в исходники xlock.

А насчет:
> Для того чтобы прогамма могла использовать интерфейс pam,
> она должна быть прописана в каталоге /etc/pam.d, где само
> сабой не рут прогу не пропишет.
Нехороший человек (допустим, я) может обозвать свою программульку
login (а точнее, вызвать из нее ПАМ-аутентикацию для сервиса login.
Ну, или ppp) и проапгрейдиться до прямо-таки редиски. В той системе,
которую ты себе представил, исесина, а не в реальном Линуксе.

Эта "заморочка с безопасностью" -- очень гибкое средство для
выкручивания рук пользователям. Их можно пускать/не пускать в
систему, авторизуя через туеву хучу пассворд-чекалок, начиная от
nis/sql/ldap-баз и заканчивая простой проверкой текущего времени
или допущения его ручек к локальной консоли.

И вообще, не надо на меня крыситься. Я ж помочь хотю.

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

>Ну ПАМ же не сам будет тебе /sbin/pwdb_chkpwd запускать. Ручками, ну как же не сам, именно сам, поскольку в паме ты вызываешь одну функцию - pam_authenticate(...), а она тебе и говорит, можешь входить или не можешь. А она уже и эту утилиту запускает в свою очередь.

Насчет xlock, то это мало мне поможет, т.к. это запиралка скринсейвера на пароль. Т.е. спрашивает и проверяет подленность она того пользоваетль, который ее на этой консоли запустил и с ней на этой кансоли работает, и ни кого другого не впустит. Для нее очень подходит использование /sbin/pwdb_chkpwd.

Проги su, sudo, passwd работают с suid'ом, а прога login без. Также некоторые другие, например consolehelper, xdm, которые также проводят автризацию пользователей. С login'ом понятно, он вызывается от рута. consolehelper и так никто кроме рута пользовать не может, т.к. конфиги которые он правит только рут писать может. xdm, фиг его знает, но скорее всего также как и login от рута.

Похоже, что ты прав, без suid'а необойтись. Thanx, за помощь...

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