Я работаю в сценарии bash.sudo -u (пользователь) cmd не работает в скрипте bash
Этот скрипт bash должен выполнить команду, используя sudo -u (B) cmd
.
я выполнить этот сценарий с помощью пользовательского А.
в моем /etc/sudoers
я все мои команды объявлены.
Когда я выполняю его с помощью терминала, все в порядке.
Когда я выполняю его с помощью java-программы на сервере tomcat, у меня есть ошибка.
Как я выполнить мой сценарий из моей Java программы:
command = "/path/my-script.sh arg1"
private String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
В обоих (программа Terminal или Java) случае я выполнить эти команды:
user=$(whoami)
echo "[INFO]: user = $user"
Результат: [INFO]: user = A
mkdircmd=$(sudo -u B mkdir -p $project_path)
return_mkdircmd=$?
echo "[INFO]: mkdircmd: $mkdircmd/return mkdircmd: $return_mkdircmd"
cpcmd=$(sudo -u B cp $file_path $project_path)
return_cpcmd=$?
echo "[INFO]: cpcmd: $cpcmd/return cpcmd: $return_cpcmd"
Результат:
с сервером Tomcat выполнения сценария
[INFO]: mkdircmd:/return mkdircmd: 1
[INFO]: cpcmd:/return cpcmd: 1
С терминала выполнения сценария (./myscript)
[INFO]: mkdircmd:/return mkdircmd: 0
[INFO]: cpcmd:/return cpcmd: 0
Кто-то может мне помочь, чтобы выяснить, где может быть моя проблема?
Благодаря
Работает ли ваш сервер tomcat с идентификатором пользователя A? Если он работает как другой пользователь, ваш файл sudoers может не разрешить ему делать sudo без пароля. Просто мысль. – Hannu
Да, это так, потому что я запускаю ** whoami ** команду и результат ** A ** – VinceDMG
У пользователя 'A' есть пароль, который необходимо ввести при попытке вызвать' sudo'? Возможно, он работает в командной строке, потому что вы уже предоставили пароль, и он был кэширован для этого сеанса. Попробуйте открыть новый сеанс оболочки и запустить тот же скрипт с помощью 'sudo' (или выполнить' sudo -k' и перезапустить скрипт). –