2016-11-03 4 views
0

Я работаю в сценарии 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 

Кто-то может мне помочь, чтобы выяснить, где может быть моя проблема?

Благодаря

+0

Работает ли ваш сервер tomcat с идентификатором пользователя A? Если он работает как другой пользователь, ваш файл sudoers может не разрешить ему делать sudo без пароля. Просто мысль. – Hannu

+0

Да, это так, потому что я запускаю ** whoami ** команду и результат ** A ** – VinceDMG

+0

У пользователя 'A' есть пароль, который необходимо ввести при попытке вызвать' sudo'? Возможно, он работает в командной строке, потому что вы уже предоставили пароль, и он был кэширован для этого сеанса. Попробуйте открыть новый сеанс оболочки и запустить тот же скрипт с помощью 'sudo' (или выполнить' sudo -k' и перезапустить скрипт). –

ответ

0

Для отладки пользователя изменения проблемы кота (предполагается, что кот работает с помощью пользователю TOMCAT)

sudo su - tomcat 

Выполните команду:

sudo -u B (cmd) 

для отладки ошибок. Возможно, вам придется обновить /sbin/nologin до /bin/bash в /etc/passwd до su с помощью tomcat.