Добрый вечер. Есть панель управления, которая работает по такому принципу: Php через ssh2_connect() заходит на удаленный хост под root и запускает python скрипт с параметрами, который создает там юзера в определенной группе, создает ему домашний каталог и копирует в него определенный шаблон файловой структуры, после чего на его каталог рекурсивно делается chown на этого самого юзера. Очевидный минус данной системы - root пароли хранятся в mysql базе панели в открытом виде, а значит могут быть спижжжжены. Понимаю, что это вообще должно иначе выглядеть, например, резидентный демон, запущенный из под root на удаленных машинах, коннект к демону по TCP/SSL, передача команды, но все переписывать не хочется. Как можно избавиться от наличия root паролей всех машин в центральной базе? Можно ли как-то не root пользователю дать привилегию исключительно на перечисленные выше действия - создание пользователя в определенной группе и его домашнего каталога без доступа ко всему остальному в системе?
Нет, ключи это бред - раз, ключ тоже можно свиснуть - это два. Сама идея в том чтобы на "центральной" машине не было ключа/пароля для root доступа на все остальные машины, именно для того хочу как-то дать права на создание новых пользователей не root пользователю. Чтобы если в случае взлома главной машины (вообще то врядли сломают, но на всякий случай, т.к. панель управления не я писал, в надежности на 100% не уверен и проверить ее досконально - могу что-то упустить) доступ будет украден, на остальных машинах не мог бы быть нанесен существенный урон
В таком случае можно написать своего демона который будет слушать определенный порт, иметь свою систему авторизации и принимать команды с определенных адресов/сетей и который будет создавать пользователей через суидник. Важно запретить этим пользователям доступ к ССХ и отключить им шелл, если это системные пользователи.
Что собственно я и сделал вчера... Авторизации пока никакой, только проверка IP, но это на днях добавлю.
Для этого надо: Создать пользователя # addgroup user_makers # adduser --group user_makers user_maker Каталог владельцем которого он будет c правами 700 # cd /home/user_maker # mkdir make_user_scripts # chmod 700 make_user_scripts # chown user_maker:user_makers make_user_scripts Создать скрипт который будет выполнять исключительно описаные выше действия. Владелец скрипта root. # editor make_user.py # chmod 700 make_user.py Создать стартер для скрипта. # editor script_starter.c Code: #include <sys/types.h> #include <unistd.h> int main(int argc, char *argv[]) { char *cmd = "полный путь к скрипту"; char *envp[]= { NULL }; /* Если убрать эту строчку переменные среды пользователя user_maker будут доступны скрипту */ argv[0] = cmd; setuid(0); execve(cmd, argv, envp); return(0); } # gcc -o script_starter script_starter.c Поставить setuid bit # chmod u+s script_starter # rm script_starter.c После всего проделанного можно логиниться user_maker'ом, запускать script_starter паметры будут переданы скрипту.
Спасибо. Не думал, что скрипт root'а, запускаемый другим не-root юзером будет иметь права. В принципе, уже не актуально т.к. написал демон, запщенный 24/7 под root и принимающий команды в сокет.