user1を使用してUNIX環境にログインし、この環境には、user1がそのパスにアクセスできないため、他のパスで他のユーザー(user2など)と一緒に実行する必要があるいくつかの操作を含むシェルスクリプトがあります。 。
タスクを実行するには、シェルスクリプトでuser1からuser2に切り替え、タスクを完了した後にuser2からuser1に戻したいと思います。
このシナリオを実装する方法を提案してください。
Javaを使用してシェルスクリプトを呼び出しているので、他の方法がある場合は提案してください。
答え1
sudo
user2がuser1として必要なスクリプトを実行できるようにすることで、必要なものを取得できます。ただスクリプトが実行され、システムのセキュリティが保護されます(user2はuser1などのシェルを使用できません)。次の方法でこれを実行できます。
sudo visudo
(Sudo構成ファイルの編集)- ファイルの末尾に以下を追加します。
user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
- ファイルを保存して閉じます。
これで、user2でシェルを開くと、sudo -u user1 /path/to/your/script.sh
user1として実行できます。 javaでも同じコマンドを使用できます。 user1:sudo -u user1 bash
これは拒否されるため、user2はシェルを実行できないため、セキュリティが維持されます。
しかし、、user1とuser2が共有するグループを作成し、そのグループを使用してファイルの実行権限を管理すると、よりきれいな解決策が得られると思います。要件に応じて、chmod 4700 /path/to/your/script.sh
より多くのユーザーが user1 でスクリプトを実行すると予想される場合は、ACL ビットまたは setuid ビットを考慮することもできます。
答え2
user1にはパスワードのないsudoアクセス権がないとします。そうですか?その場合、runuser コマンドを使用できます。
runuser -l user2 -c 'whoami'
sudo権限が設定されている場合は、su / sudoのみを使用できます。
su - user2 -c 'whoami'
しかし、私はあなたがパスワードのないsudoを持っていないか、おそらくuser2のパスワードを持っていないと仮定しています。もっと難しいかもしれません。 user1 の RSA 鍵ペアを生成し、user2 の $HOME/.ssh/authorized_keys ファイルに id_rsa.pub キーを追加して RSA 公開鍵認証を有効にし、SSH を使用してパスワード操作なしでこれを実行できます。 。
ユーザー1で次のコマンドを実行します。ssh keygen プロンプトが表示されたらEnterを押します。 次に、次のコマンドを実行してキーを自動的に追加します(手動で実行できます)。このコマンドを使用する場合、User2のパスワードは最初にのみ必要です。
ssh-copy-id -i $HOME/.ssh/id_rsa.pub user2@hostname
これがうまくいったら、user1としてログインし、ssh user2@localhostを実行して、パスワードなしでuser2としてログインできる必要があります。サーバーの/etc/ssh/sshd_configで公開鍵認証が有効になっていることを確認してください。
その後、リモートでコマンドを実行するには、次のコマンドを実行できます。
ssh user2@localhost "リモートコマンド1;リモートコマンド2"