Страница 1 из 1

*nix "su username" без пароля

Добавлено: 26 мар 2005, 00:07
Oscar
Не знаю, в правильный ли форум пишу, но надеюсь, что это так.

Вопрос: Как можно сделать "su username" без ввода пароля?

Замечание: нет, я не хочу обойти ввод пароля и стать крутым суперпользователем, я хочу всего лишь программно вводить свой собственный пароль.

Проблема: Идёт вызов программы через Веб-скрипт, под пользовалетелем wwwrun. Давать этому пользователю досут куда не нужно, не думаю, что хорошая идея, потому хочу разрешить это лишь для одного скрипта.

Решение: Смена пользователя через "su username". Но, насколько мне известно, для подобных комманд (su, ssh, scp) нельзя сделать перенаправление ввода из файла (вместо tty). Может я ошибаюсь?

Как вариант: найти исходники утилиты su, зашить в них свой логин и пароль и так использовать.

Может у кого-нибуть будут идеи по этому поводу?

Добавлено: 26 мар 2005, 00:52
Oscar
Я попробовал сделать так:

printf "password\r\n" | su username

но оно не получилось ...

Добавлено: 28 мар 2005, 10:41
Absurd
Можно написать враппер с установленым suid битом (на скрипте не заработает, нужен именно бинарник), или враппер запущенный от рута, а потом меняющий пользователя без ввода пароля через setuid().
Что-то типа:

Код: Выделить всё

main () {
  suid(username);
  exec(scriptname);
  exit();
}
Можно попробовать использовать acl по типу виндовых, или вообще acl "по имени скрипта", но они в виде патча к ядру, поэтому скорее всего на стандартной системе их не будет.Или стандартным способом через unix groups -- считается что все задачи можно решить обходясь только группами.Ввод пароля программно -- я вообще не встречал (ну кроме коннектов к БД), так что сразу и не скажу как такое можно сделать. К тому же пароль придеться где-то хранить с правами на чтение для wwwrun а это помоему еще большая дырка чем просто чтение "где-не-надо"

Добавлено: 28 мар 2005, 16:46
Oscar
Absurd, Спасибо за ответ!

acl - термин мне не знакомый. К тому же, это будет слишком много мороки менять ядро.
"пароль придеться где-то хранить с правами на чтение для wwwrun"
Вообще-то я планировал сделать ввод логина и пароля через Веб-интерфейс и передавать их баш-скрипту(бинарному файлу) через параметры.
Я думаю, что это не должно быть дырой, или?

Что такое "враппер, запущенный от рута" я тоже не знаю. Но приведённый код - это, кажется, именно то, что нужно.
Мне не нужен доступ roota, если я просто сделаю suid("Oscar") - по идее оно должно работать.
Этот бинарник должен иметь хозяина roota? Или можно себя поставить?

Это веб-сервер, и gcc там не стоит. Постараюсь скомпилировать Код на подобной машине и перенести на целевую машину,
если нет - прийдётся обращатсья к админу (помнил я root пароль, но забыл :) , честно).

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


Возвращаясь к предидущим постам: так нельзя перенаправить ввод для su/ssh ?


Ещё раз спасибо за варианты решения, буду теперь пытаться их воплотить.