Linuxでsudoアクセスを制御する方法
公開: 2022-01-29 sudo
コマンドを使用すると、 root
などの誰かであるかのようにLinuxでコマンドを実行できます。 sudo
を使用すると、 root's
機能にアクセスできるユーザーを細かく制御することもできます。 ユーザーにフルアクセスを許可するか、コマンドの小さなサブセットを使用できるようにします。 その方法をお見せします。
sudoおよびroot権限
Linuxのすべてがファイルであると聞いたことがあります(過度に単純化されています)。 実際、プロセス、ファイル、ディレクトリ、ソケット、パイプなど、オペレーティングシステム内のほぼすべてのものが、ファイル記述子を介してカーネルと通信します。 したがって、すべてがファイルではありませんが、ほとんどのオペレーティングシステムオブジェクトはファイルであるかのように処理されます。 可能な場合、LinuxおよびUnixライクなオペレーティングシステムの設計はこの原則に準拠しています。
「すべてがファイルである」という概念は、Linuxでは広範囲に及んでいます。 Linuxでのファイルのアクセス許可が、どのようにしてユーザーの特権と権利の主力の1つになったのかは簡単にわかります。 ファイルまたはディレクトリ(特別な種類のファイル)を所有している場合は、編集、名前の変更、移動、削除など、好きなことを行うことができます。 他のユーザーまたはユーザーのグループがファイルを読み取ったり、変更したり、実行したりできるように、ファイルにアクセス許可を設定することもできます。 誰もがこれらの権限によって管理されています。
スーパーユーザーを除いて、 root
として知られているすべての人。 root
アカウントは、特別な特権を持つアカウントです。 オペレーティングシステム内のどのオブジェクトに対するアクセス許可にも拘束されません。 rootユーザーは、何に対しても、ほとんどいつでも何でもできます。
もちろん、 root's
パスワードにアクセスできる人なら誰でも同じことができます。 彼らは悪意を持ってまたは偶然に大混乱を引き起こす可能性があります。 実際、 root
ユーザーも間違いを犯して大混乱を引き起こす可能性があります。 誰もが間違いない。 危険なものです。
これが、 root
としてログインしないことがベストプラクティスと見なされている理由です。 通常のユーザーアカウントでログインし、 sudo
を使用して、必要な短期間に特権を昇格させます。 多くの場合、それは単一のコマンドを発行することだけです。
関連: Linuxで「すべてがファイルである」とはどういう意味ですか?
sudoersリスト
sudo
は、この記事の調査に使用されたUbuntu 18.04.3、Manjaro 18.1.0、およびFedora31コンピューターに既にインストールされています。 これは驚きではありません。 sudo
は1980年代初頭から存在しており、ほとんどすべてのディストリビューションでスーパーユーザー操作の標準的な手段になっています。
最新のディストリビューションをインストールすると、インストール中に作成したユーザーがsudoersと呼ばれるユーザーのリストに追加されます。 これらは、 sudo
コマンドを使用できるユーザーです。 あなたはsudo
の力を持っているので、それらを使って他のユーザーをsudoerのリストに追加することができます。
もちろん、完全なスーパーユーザーステータスを意地悪に、または部分的または特定のニーズしかない人に配布するのは無謀です。 sudoersリストを使用すると、さまざまなユーザーがsudo
を使用できるコマンドを指定できます。 そうすれば、あなたは彼らに王国への鍵を与えませんが、彼らはそれでも彼らがする必要があることを成し遂げることができます。
別のユーザーとしてコマンドを実行する
もともとは、スーパーユーザーとしてできることから「スーパーユーザーdo」と呼ばれていました。 現在、その範囲が拡大されており、 sudo
を使用して、まるでユーザーであるかのようにコマンドを実行できます。 その新機能を反映して名前が変更されました。 現在は「substituteuserdo」と呼ばれています。
sudo
を使用して別のユーザーとしてコマンドを実行するには、 -u
(ユーザー)オプションを使用する必要があります。 ここでは、ユーザーmary
としてwhoamiコマンドを実行します。 -u
オプションを指定せずにsudo
コマンドを使用する場合は、 root
としてコマンドを実行します。
そしてもちろん、 sudo
を使用しているため、パスワードの入力を求められます。
sudo -u mary whoami
whoami
からの応答は、コマンドを実行しているユーザーアカウントがmary
であることを示しています。
sudo
コマンドを使用すると、パスワードを知らなくても別のユーザーとしてログインできます。 自分のパスワードの入力を求められます。 -i
(ログイン)オプションを使用する必要があります。
sudo -i -u mary
pwd
私は誰
ls -hl
出口
mary
としてログインしています。 maryユーザーアカウントの「.bashrc」、「。bash_aliases」、および「.profile」ファイルは、maryユーザーアカウントの所有者が自分でログインした場合とまったく同じように処理されます。
- これがユーザーアカウント
mary
のセッションであることを反映して、コマンドプロンプトが変更されます。 -
pwd
コマンドは、現在mary's
ホームディレクトリにいることを示します。 -
whoami
は、ユーザーアカウントmary
を使用していると言っています。 - ディレクトリ内のファイルは、
mary
ユーザーアカウントに属しています。 -
exit
コマンドは、通常のユーザーアカウントセッションに戻ります。
sudoersファイルの編集
sudo
を使用できるユーザーのリストにユーザーを追加するには、 sudoers
ファイルを編集する必要があります。 visudo
コマンドを使用してのみこれを行うことが非常に重要です。 visudo
コマンドは、複数の人が一度にsudoersファイルを編集しようとするのを防ぎます。 また、ファイルの内容を保存するときに、構文のチェックと解析も実行します。
編集内容がテストに合格しなかった場合、ファイルはやみくもに保存されません。 オプションがあります。 変更をキャンセルして破棄したり、戻って変更を再度編集したり、誤った編集を強制的に保存したりすることができます。 最後のオプションはひどく悪い考えです。 そうするように誘惑されないでください。 sudo
の使用が誤ってロックアウトされてしまう状況に陥ることがあります。
visudo
コマンドを使用して編集プロセスを開始しますが、 visudo
はエディターではありません。 既存のエディターの1つを呼び出して、ファイルの編集を実行します。 ManjaroとUbuntuでは、 visudo
コマンドがシンプルなエディターnano
を起動しました。 Fedoraで、 visudo
はより機能的ですが直感的ではないvim
を起動しました。
関連: ViまたはVimエディターを終了する方法
Fedoraでnano
を使用したい場合は、簡単に使用できます。 まず、 nano
をインストールします。
sudo dnf install nano
そして、 visudo
は次のコマンドで呼び出す必要がありました。
sudo EDITOR = nano visudo
それはエイリアスの良い候補のように見えます。 nano
エディターが開かれ、sudoersファイルがロードされます。
sudoグループへのユーザーの追加
visudo
を使用してsudoersファイルを開きます。 このコマンドまたは上記のコマンドを使用して、選択したエディターを指定します。
sudo visudo
%sudo
エントリの定義が表示されるまで、sudoersファイルをスクロールします。
パーセント記号は、これがグループ定義であり、ユーザー定義ではないことを示します。 一部のディストリビューションでは、 %sudo
行の先頭にハッシュ#
があります。 これにより、その行がコメントになります。 この場合は、ハッシュを削除してファイルを保存してください。
%sudo
行は次のように分類されます。
- %sudo :グループの名前。
- ALL = :このルールは、このネットワーク上のすべてのホストに適用されます。
- (ALL:ALL) :このグループのメンバーは、すべてのユーザーおよびすべてのグループとしてコマンドを実行できます。
- すべて:このグループのメンバーは、すべてのコマンドを実行できます。
つまり、このグループのメンバーは、このコンピューターまたはこのネットワーク内の他のホストで、任意のユーザーまたは任意のグループとして、任意のコマンドを実行できます。 したがって、root権限とsudo
を使用する機能を誰かに与える簡単な方法は、それらをsudo
グループに追加することです。
TomとMaryの2人のユーザーがいて、それぞれユーザーアカウントがtom
とmary
です。 usermod
コマンドを使用して、ユーザーアカウントtom
をsudo
グループに追加します。 -G
(groups)オプションは、 tom
アカウントを追加するグループを指定します。 -a
(追加)オプションは、このグループをユーザーアカウントtom
が既に含まれているグループのリストに追加します。このオプションがないと、ユーザーアカウントtom
は新しいグループに配置されますが、他のグループからは削除されます。
sudo usermod -a -G sudo tom
メアリーがどのグループに属しているかを確認しましょう。
グループ
ユーザーアカウントのmary
は、 mary
グループにのみ含まれます。
トムに確認しましょう:
グループ
tom
ユーザーアカウント(つまりTom)は、 tom
とsudo
のグループに属しています。
Maryにsudo
特権を必要とする何かをさせてみましょう。
sudo less / etc / shadow
メアリーは制限されたファイル「/ etc / shadow」の内部を見ることができません。 彼女は、 sudo
を許可なく使用しようとしたことを軽度に告げています。 トムの運賃を見てみましょう。
sudo less / etc / shadow
トムがパスワードを入力するとすぐに、/ etc / shadowファイルが表示されます。
彼をsudo
グループに追加するだけで、 sudo
を使用できるエリートランクに昇格しました。 完全に無制限。
ユーザーに制限されたsudo権限を与える
トムには完全なsudo
権限が与えられています。 彼は、 root
(またはsudo
グループの他の誰でも)ができることなら何でもできます。 それはあなたが喜んで引き渡すよりも多くの力を彼に与えるかもしれません。 ユーザーがroot
権限を必要とする機能を実行する必要がある場合もありますが、完全なsudo
アクセス権を持っているという正当なケースはありません。 それらをsudoersファイルに追加し、使用できるコマンドをリストすることで、そのバランスを実現できます。
ユーザーアカウントharry
の所有者であるHarryに会いましょう。 彼はsudo
グループに属しておらず、 sudo
特権もありません。
グループ
ハリーがソフトウェアをインストールできることは便利ですが、彼に完全なsudo
権限を持たせたくはありません。 OK、問題ありません。 visudo
を起動しましょう:
sudo visudo
グループ定義を通過するまで、ファイルを下にスクロールします。 ハリーの行を追加します。 これはユーザー定義であり、グループ定義ではないため、パーセント記号で行を開始する必要はありません。
ユーザーアカウントharryのエントリは次のとおりです。
ハリーALL = / usr / bin / apt-get
「harry」と「ALL =」の間にタブがあることに注意してください。
これは、ユーザーアカウントharry
がこのネットワークに接続されているすべてのホストでリストされているコマンドを使用できることを示しています。 リストされているコマンドは「/ usr / bin / apt-get」です。 コマンドリストにコンマで区切って追加することで、ハリーに複数のコマンドへのアクセスを許可できます。
sudoersファイルに行を追加し、ファイルを保存します。 行が構文的に正しいことを再確認したい場合は、 -c
(チェックのみ)オプションを使用して、ファイルをスキャンして構文をチェックするようにvisudo
に依頼できます。
sudo visudo -c
チェックが行われ、 visudo
はすべてが順調であることを報告します。 これで、ハリーはapt-get
を使用してソフトウェアをインストールできるようになりますが、 sudo
を必要とする他のコマンドを使用しようとした場合は拒否する必要があります。
sudo apt-get install finger
ハリーには適切なsudo
権限が付与されており、彼はソフトウェアをインストールできます。
ハリーがsudo
を必要とする別のコマンドを使用しようとするとどうなりますか?
sudoを今すぐシャットダウン
ハリーはコマンドを実行できません。 私たちは彼に特定の制限されたアクセスを許可することに成功しました。 彼は指名されたコマンドだけを使用できます。
sudoersユーザーエイリアスの使用
Maryに同じ特権を与えたい場合は、Harryで行ったのとまったく同じ方法で、ユーザーアカウントmary
のsudoersファイルに行を追加できます。 同じことを実現するもう1つの、きちんとした方法は、 User_Alias
を使用することです。
sudoersファイルでは、 User_Alias
にユーザーアカウント名のリストが含まれています。 User_Alias
の名前を定義で使用して、これらすべてのユーザーアカウントを表すことができます。 これらのユーザーアカウントの権限を変更する場合は、編集する行は1行だけです。
User_Alias
を作成し、それをsudoersファイルで使用してみましょう。
sudo visudo
User_Alias仕様行が表示されるまで、ファイルを下にスクロールします。
次のように入力して、 User_Alias
を追加します。
User_Alias INSTALLERS =ハリー、メアリー
各要素は、タブではなくスペースで区切られます。 ロジックは次のように分類されます。
- User_Alias :これは
visudo
にこれがUser_Alias
になることを通知します。 - インストーラー:これは、このエイリアスの任意の名前です。
- = harry、mary :このエイリアスに含めるユーザーのリスト。
次に、ユーザーアカウントharry
用に以前に追加した行を編集します。
ハリーALL = / usr / bin / apt-get
次のように変更します。
インストーラーALL = / usr / bin / apt-get
これは、「INSTALLERS」 User_Alias
の定義に含まれるすべてのユーザーアカウントがapt-get
コマンドを実行できることを意味します。 これをMaryでテストできます。Maryはソフトウェアをインストールできるはずです。
sudo apt-get install colordiff
Maryは、「INSTALLERS」 User_Alias
に所属しており、そのUser_Alias
にこれらの権限が付与されているため、ソフトウェアをインストールできます。
3つのクイックsudoトリック
コマンドにsudo
を追加するのを忘れた場合は、次のように入力します。
sudo !!
そして、最後のコマンドが繰り返され、行の先頭にsudo
が追加されます。
sudo
を使用し、パスワードで認証されたら、15分間、さらにsudo
コマンドでパスワードを使用する必要はありません。 認証をすぐに忘れてもらいたい場合は、次を使用してください。
sudo -k
失敗したsudo
コマンドの試行をどこで確認できるか疑問に思ったことはありませんか? それらは「/var/log/auth.log」ファイルに移動します。 あなたはそれを見ることができます:
少ない/var/log/auth.log
ユーザー「root」としてshutdown
コマンドを実行しようとしたときにTTYpts / 1でログインしたユーザーアカウントmaryのエントリを確認できます。
大いなる力には…
…その一部を他の人に委任する機能があります。 これで、他のユーザーに選択的に権限を与える方法がわかりました。