LINUX.ORG.RU

tomcat6 + проект на java + bash скрипт


0

0

Есть тачка с линуксом, на ней томкат, проект на яве и скрипт на баше. Проект - некая система контоля успеваемости студентов. Как часть проекта - выделение студентам своей БД в mysql, фтп папка, etc. Фтп на базе vsftpd и авторизацией через mysql сервер.

Проблема в следующем: есть скрипт, который добавляет имя пользователя и пасс в базу фтп, создает для него папку и отдельный файл конфигурации с указанимем разрешенных действий с фтп и путем к домашней папке. Скрипт написан на баше и естественно должен выполняться от рута, так как есть chown и chmod. Для этого пользователю tomcat6 в sudoers разрешено выполнять скрипт,/bin/chmod,/bin/chown,/usr/bin/tee от рута и без паса, а в скрите эти команды выглядят типа: /bin/chown vsftpd:nogroup /home/ftp/... и если выполнять из консоли типа: sudo -u tomcat /bin/bash -c '/etc/vsftpd.conf.d/add_user.sh username pass', то скрипт отрабатывает на ура и пароль не спрашивает, но если вызывать в java через Runtime.GetRuntime().exec(«/bin/bash -c '...'»);(имхо так, уже точно не помню), то ничего не работает, хотя ошибки никакой не возникает.

Так вот вопрос: где может быть подвох? Конечно, создать папку, файл, запись в БД можно и в яве, но вот chown и chmod там нету(вроде). Вот думаю на счет питона. Хотя... Что от этого изменится...

во-первых, и чмод, и човн можно делать и не только от рута. во-вторых, они есть и в яве тоже. в-третьих, «sudo -u tomcat /bin/bash -c '/etc/vsftpd.conf.d/add_user.sh username pass'», это выполнить из-под пользователя tomcat, а не из-под пользователя рут. в-четвертых, достаточно дать права на выполнение скрипта, на чмод и човн не надо. в-пятых, ты в жабе выполняешь не скрипт, а баш.

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

в файле судоерс:

tomcat ALL=NOPASSWD: /etc/vsftpd.conf.d/add_user.sh
в самом скрипте, первой строчкой:
#!/bin/bash
выполнить команду:
chmod +x /etc/vsftpd.conf.d/add_user.sh
протестировать правило sudo:
su - tomcat; sudo /etc/vsftpd.conf.d/add_user.sh username pass
использовать в джаве:
Runtime.GetRuntime().exec("/etc/vsftpd.conf.d/add_user.sh username pass");

удачи. и да, у тебя пароли будут светится в процесах и в логе судо.

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

пардонте, в джаве конечно же надо:
[code]Runtime.GetRuntime().exec(«sudo /etc/vsftpd.conf.d/add_user.sh username pass»);[/code]

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