Не знаю, в правильный ли форум пишу, но надеюсь, что это так.
Вопрос: Как можно сделать "su username" без ввода пароля?
Замечание: нет, я не хочу обойти ввод пароля и стать крутым суперпользователем, я хочу всего лишь программно вводить свой собственный пароль.
Проблема: Идёт вызов программы через Веб-скрипт, под пользовалетелем wwwrun. Давать этому пользователю досут куда не нужно, не думаю, что хорошая идея, потому хочу разрешить это лишь для одного скрипта.
Решение: Смена пользователя через "su username". Но, насколько мне известно, для подобных комманд (su, ssh, scp) нельзя сделать перенаправление ввода из файла (вместо tty). Может я ошибаюсь?
Как вариант: найти исходники утилиты su, зашить в них свой логин и пароль и так использовать.
Может у кого-нибуть будут идеи по этому поводу?
*nix "su username" без пароля
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Можно написать враппер с установленым suid битом (на скрипте не заработает, нужен именно бинарник), или враппер запущенный от рута, а потом меняющий пользователя без ввода пароля через setuid().
Что-то типа:
Можно попробовать использовать acl по типу виндовых, или вообще acl "по имени скрипта", но они в виде патча к ядру, поэтому скорее всего на стандартной системе их не будет.Или стандартным способом через unix groups -- считается что все задачи можно решить обходясь только группами.Ввод пароля программно -- я вообще не встречал (ну кроме коннектов к БД), так что сразу и не скажу как такое можно сделать. К тому же пароль придеться где-то хранить с правами на чтение для wwwrun а это помоему еще большая дырка чем просто чтение "где-не-надо"
Что-то типа:
Код: Выделить всё
main () {
suid(username);
exec(scriptname);
exit();
}
2B OR NOT(2B) = FF
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Absurd, Спасибо за ответ!
acl - термин мне не знакомый. К тому же, это будет слишком много мороки менять ядро.
"пароль придеться где-то хранить с правами на чтение для wwwrun"
Вообще-то я планировал сделать ввод логина и пароля через Веб-интерфейс и передавать их баш-скрипту(бинарному файлу) через параметры.
Я думаю, что это не должно быть дырой, или?
Что такое "враппер, запущенный от рута" я тоже не знаю. Но приведённый код - это, кажется, именно то, что нужно.
Мне не нужен доступ roota, если я просто сделаю suid("Oscar") - по идее оно должно работать.
Этот бинарник должен иметь хозяина roota? Или можно себя поставить?
Это веб-сервер, и gcc там не стоит. Постараюсь скомпилировать Код на подобной машине и перенести на целевую машину,
если нет - прийдётся обращатсья к админу (помнил я root пароль, но забыл
, честно).
"unix groups"
Практическая суть проблемы: cvs checkout.
Я принадлежу к группам cvs,www.
Наверное, действительно самое простое - это wwwrun (группа: www) добавить так-же и в группу cvs.
И вряд-ли кто-то додумается через Веб пытаться добраться к CVS серверу.
Возвращаясь к предидущим постам: так нельзя перенаправить ввод для su/ssh ?
Ещё раз спасибо за варианты решения, буду теперь пытаться их воплотить.
acl - термин мне не знакомый. К тому же, это будет слишком много мороки менять ядро.
"пароль придеться где-то хранить с правами на чтение для wwwrun"
Вообще-то я планировал сделать ввод логина и пароля через Веб-интерфейс и передавать их баш-скрипту(бинарному файлу) через параметры.
Я думаю, что это не должно быть дырой, или?
Что такое "враппер, запущенный от рута" я тоже не знаю. Но приведённый код - это, кажется, именно то, что нужно.
Мне не нужен доступ roota, если я просто сделаю suid("Oscar") - по идее оно должно работать.
Этот бинарник должен иметь хозяина roota? Или можно себя поставить?
Это веб-сервер, и gcc там не стоит. Постараюсь скомпилировать Код на подобной машине и перенести на целевую машину,
если нет - прийдётся обращатсья к админу (помнил я root пароль, но забыл

"unix groups"
Практическая суть проблемы: cvs checkout.
Я принадлежу к группам cvs,www.
Наверное, действительно самое простое - это wwwrun (группа: www) добавить так-же и в группу cvs.
И вряд-ли кто-то додумается через Веб пытаться добраться к CVS серверу.
Возвращаясь к предидущим постам: так нельзя перенаправить ввод для su/ssh ?
Ещё раз спасибо за варианты решения, буду теперь пытаться их воплотить.