![非ルートユーザーがログインしたときにルートとしてスクリプトを実行する](https://rvso.com/image/1568338/%E9%9D%9E%E3%83%AB%E3%83%BC%E3%83%88%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E3%83%AB%E3%83%BC%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B.png)
この質問は以前にも見たことがあるここそしてここしかし、それらはかなり古く、解決策を見つけることができませんでした。
基本的に、非 root ユーザーがサーバーに SSH 接続するたびに、スクリプトまたはコマンドを root として自動的に実行する必要があります。サーバーは Ubuntu 16.04 を実行しており、OpenSSH を使用しているので、違いがあるかもしれません。
編集: 具体的には、ユーザー B がログインしたときに、ユーザー A によって作成されたプロセスを強制終了したいのです。ルームメイトと私はヘッドレス ゲーム サーバーで暗号通貨をマイニングしていますが、pkill miner.sh
誰が開始したかに関係なく、誰かがログインしたときに自動的に実行できるようにしたいと考えています。ユーザーが互いのプロセスを強制終了できるようにするのは非常に安全ではないため、これは予想以上に難しいようです。
答え1
pam_exec は正しい方向を示していますが、setuid は悪いアドバイスです。最近の Linux のほとんど (すべて?) は、シェル スクリプトではこれを無視し、バイナリ実行可能ファイルでのみこれを尊重します。
ログイン時以外にスクリプトが (root として) 実行された場合、問題はありますか? 厳密に必要な回数よりも頻繁に実行しても問題がない場合は、ユーザー権限で ssh ログインするたびに実行されるラッパー スクリプトを作成し、sudo (パスワードなし) を使用してスクリプトを root として実行することができます。ただし、これはユーザーが必要な回数だけ手動で (root として) 実行できることも意味します。
これを設定するには、/etc/pam.d/sshdに次の行を追加します。
account optional pam_exec.so /etc/pam.d/LoginWrapper.sh
次に、次の内容のファイル /etc/pam.d/LoginWrapper.sh を作成します。
#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi
sudo が別のパスにある場合は、上記を更新する必要があることに注意してください。
次に、/etc/sudoers に次の行を追加します。
ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh
答え2
この問題は、すべてのユーザーをmygroupというグループに追加することで解決しました。
sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2
次に、sudoersに次の行を追加して、このグループがパスワードなしで/etc/sudoers
実行できるように変更します。sudo pkill
%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill
その後、コマンドをsudo pkill
一番下に追加したところ/etc/profile
、うまくいきました。