
私は 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 から使用できます。user2 は user1 としてシェルを実行できないため、セキュリティは維持され、sudo -u user1 bash
拒否されます。
しかしよりクリーンなソリューションは、user1 と user2 が共有するグループを作成し、そのグループを使用してファイルの実行権限を管理するだけで実現できると思います。要件に応じて、ACL や、user1 としてスクリプトをchmod 4700 /path/to/your/script.sh
実行するユーザーがさらに増えることが予想される場合は setuid ビット (例 ) も検討する必要があります。
答え2
user1 にはパスワードなしの sudo アクセス権がないと想定していますが、正しいでしょうか? アクセス権がある場合は、runuser コマンドを使用できます。
runuser -l user2 -c 'whoami'
sudo 権限が設定されている場合は、su/sudo を使用できます。
su - user2 -c 'whoami'
ただし、パスワードなしの sudo を持っていないか、user2 のパスワードを持っていない可能性があります。user1 の RSA キーペアを生成し、id_rsa.pub キーを user2 の $HOME/.ssh/authorized_keys ファイルに追加して RSA 公開キー認証を有効にし、SSH を使用してパスワードなしで実行すると、トリッキーになる可能性があります。
ユーザー1として以下を実行します。ssh keygen プロンプトに従ってEnterキーを押すだけです 次に、次のコマンドを実行してキーを自動的に追加します (手動で行うこともできます)。このコマンドを使用する場合は、初回のみ user2 のパスワードが必要になります。
ssh-copy-id -i $HOME/.ssh/id_rsa.pub ユーザー2@ホスト名
これが機能する場合は、user1 としてログインしてから、ssh user2@localhost を実行してパスワードなしで user2 としてログインできるはずです。サーバーの /etc/ssh/sshd_config で公開キー認証が有効になっていることを確認してください。
次に、コマンドをリモートで実行するには、次のようなコマンドを実行します。
ssh user2@localhost "リモートコマンド1;リモートコマンド2"