対話型ログイン用に設計されていないユーザーアカウントがありますが、rootとして単一のコマンドを実行できるようにしたいと思います。私が今持っているよりもこれを達成するより良い方法があります(意図したよりも多くの権利を与えずに):
- シェルをrbashに変更してコマンドを実行するには、有効なシェルが必要なので、パス内の唯一の実行可能ファイルとしてsudoを使用してください。
- "ALL=(root:root) NOPASSWD: /sbin/executable" を使用して sudoers にアカウントを追加します。
- no-{X11,port}-forwarding,no-pty,command="sudoexecutable" を使用して、アカウントに authenticate_keys エントリを追加します。
文脈:私は*nixに精通していない管理者に、私がいない間にプリントサーバーの問題を解決する能力を与えたいと思います。明らかに、最初の呼び出しポートはCUPS Webインターフェースであり、プリンタを直接確認するために歩いています(彼は今やっていることです)。しかし、彼がsshを介してログインして失敗した場合、適切なサービスを再起動するとは期待できません。方法に関係なく、彼は無制限のsudoアクセス権を持っていることを信頼します)。今は彼に /sbin/reboot を実行する権限を与えるだけです。これをcup / samba / etcを再起動するスクリプトに変更します。代わりに機会になれば。
答え1
サーバーとのその他の対話を避けるために、1つの方法は、コマンドを接続シェルとして使用して専用アカウントを作成することです。たとえば、ユーザー「reboot」のuidは0、/sbin/rebootは接続シェルです。
シェルは、オプションから選択する権限を与えるスクリプトメニューです。これにより、sudoを使用してアカウントUID 0を回避できます。
1) Purge the print jobs
2) Restart cups
3) Reboot
4) Quit
Enter your choice:
メニュースクリプトはここにあります
StackOverflowのbash選択機能を使用した簡単な例
誰がサーバーを再起動するのかを知るために、認証にプライベートSSHキーを使用することをお勧めします。
答え2
私がする方法は、ルートによって実行され、必要なコマンドのみを実行するWebサーバースクリプト*を実行することです(例:Emmanuelが提案したメニュー)。その後、パスワードまたはファイアウォールで保護してアクセスできるユーザーを制限できます。
*ウェブサーバースクリプト:可能小さなPerlスクリプト(HTTP :: Daemonを使用)、小さなJava Webサーバー、または非共通ポート(たとえば1000以上)で実行されるその他の項目。