私の新しい問題は、Java で sudo パーミッションを要求する bash シェル スクリプトを実行することです。私がやりたいことは、コマンドラインを使用して ds-389 データベースを ldif 形式にエクスポートすることです。これは ns-slapd db2ldif コマンドで行われます。これを行うためのメインのJava単純なコードは次のとおりです。
ProcessBuilder p = new ProcessBuilder("/bin/bash", "example.sh");
final Process process = p.start();
example.sh はプロジェクト ディレクトリにあり、アクセスに問題はありません。また、念のため chmod 777 で実行するスクリプトへのアクセス許可を追加します。Example.sh にはこれしかありません:
#!/bin/bash
ns-slapd db2ldif -D /etc/dirsrv/slapd-localhost -n userRoot -s "ou=Group,dc=localdomain" -a /tmp/file.ldif
私がこれまでに試したことは、visudoでこの行を追加することです:
nobody ALL=(ALL) NOPASSWD: /usr/sbin/ns-slapd
myUSER ALL=(ALL) NOPASSWD: /usr/sbin/ns-slapd
root ALL=(ALL) NOPASSWD: /usr/sbin/ns-slapd
bin ALL=(ALL) NOPASSWD: /usr/sbin/ns-slapd
myUSER ALL = NOPASSWD: /usr/bin/java
root ALL= NOPASSWD: /usr/bin/java
nobody ALL= NOPASSWD: /usr/bin/java
bin ALL= NOPASSWD: /usr/bin/java
しかし、結果はありません..そして、はい、この変更により、パスワードを要求せずにコマンドラインでexample.shを実行できます。Java からこれを試すと、機能せず、/tmp に file.ldif が作成されません。どんな助けも大歓迎です。御時間ありがとうございます :)