以前に設定しようとしましたが、幸運ではsudo
ありませんでした。とどう違いますかsu -l -c "x"
?設定ファイルを介してユーザーに特定のコマンドなどへのアクセス権を付与することができるようです。私はいつもsudo
これが他のユーザーやグループとしてコマンドを実行する方法だと思いました。 UbuntuやMintなどのディストリビューションでは、基本的にマスターユーザーがパスワードを介してルートに簡単にアクセスできるため、その目的は何であるかわかりません。
sudoファイルにユーザーを追加して、ルートディレクトリでのみ特定のコマンドを実行する権限を付与するにはどうすればよいですか?また、セキュリティホールを開けたくありません。
答え1
基本操作(rootでコマンドを実行)の場合、sudoとsuの最も明白な違いは、sudoには呼び出し元のユーザーのパスワード(つまり自分のパスワード)が必要ですが、suにはターゲットユーザーのパスワード(つまりrootのパスワード)があります。セキュリティへの影響は、以前の質問で広く議論されています。sudo、su、またはloginの間でroot権限を取得する最も安全な方法は何ですか?。
Sudoにはsuに加えて追加機能があります。特に、ユーザーのパスワードがあれば、そのユーザーとしてすべてのコマンドを実行できます。一方、sudoを呼び出すユーザーは、他のユーザーとして特定のコマンドのみを実行できるように構成できます。これは、sudoが認証を要求しないために可能です(パスワードを入力してアイデンティティを確認する以外は、ジョブに対してユーザーを認証するのとは少し異なります)。
rootでコマンドを実行してsudo設定を変更できますvisudo
(設定を直接編集しないでください)。環境変数がお気に入りのエディタに設定されていることをEDITOR
確認してくださいVISUAL
。それ以外の場合は、おなじみのエディタを使用する可能性があります。これsudoers
マニュアルページ少し簡潔ですが、例があります。ユーザーが(引数制限なしで)asbob
を実行できるようにするには(他の引数は使用しません)、次の行を使用します。/bin/foo
/bin/bar --safe
root
bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
答え2
主な違いは、上記sudo
のようにルートとしてコマンドを実行するためにルートパスワードが必要ないことですsu
。ファイルに誰かを追加するには root パスワードが必要ですsudoers
が、その後、その人は root でコマンドの全部または一部を実行できます(すでに制限されている場合)、追加のパスワードは必要ありません。
指摘したように、もう1つの違いは、sudo
実行できるコマンドをより強力に制御できることです。
ファイル形式の詳細については、をsudoers
実行してくださいman sudoers
。特定のコマンドのみがrootとして実行されるようにする例を見つけることができます。各行の基本構造は次のとおりです。
user_list host_list = cmd_list
cmd_listには、実際のユーザーが切り替えることができるユーザーに関する詳細を含めることができます。たとえば、サイト管理者がwwwrootに切り替えてApacheを再起動することを許可できますが、rootは許可しない可能性があります。また、移行前にユーザーパスワードを要求するかどうか(デフォルト)などの他のオプションも含めることができます。
例示的な行は次のとおりです。
joe ALL=(ALL) ALL
つまり、joeにすべてのホストですべてのユーザーとしてすべてのコマンドを実行させます。より厳格なパスは次のとおりです。
joe ALL=(operator) /usr/local/ops/
つまり、joeに「オペレータ」ユーザーとして/usr/local/opsディレクトリにあるすべてのコマンドを実行させます。
sudoersのマニュアルページの最後には多くの例があります。
/etc/sudoers
編集するにはコマンドを使用する必要がありますvisudo
。これは、ファイルが正当であることを確認し、誤ってファイルが破損するのを防ぐのに役立ちます。
答え3
他の答えに加えて、sudoはどのコマンドを誰が実行したかを追跡するためのロギング機能を提供します。 sudoアクセス権を持つ悪意のあるユーザーがログを消去する可能性があるため、これはセキュリティ目的ではありません。それでも先週の午前2時に目が沈んだとき、自分や他の管理者が何をしていたのかを把握するのは便利です。