Linuxでsudoアクセスを制御する方法

公開: 2022-01-29
Ubuntuスタイルのデスクトップ上のLinuxターミナルウィンドウ。
Fatmawati Achmad Zaenuri / Shutterstock

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ファイルがロードされます。

sudoersファイルがロードされたnanoエディター

sudoグループへのユーザーの追加

visudoを使用してsudoersファイルを開きます。 このコマンドまたは上記のコマンドを使用して、選択したエディターを指定します。

 sudo visudo 

%sudoエントリの定義が表示されるまで、sudoersファイルをスクロールします。

%sudo行が強調表示されたsudoersファイル

広告

パーセント記号は、これがグループ定義であり、ユーザー定義ではないことを示します。 一部のディストリビューションでは、 %sudo行の先頭にハッシュ#があります。 これにより、その行がコメントになります。 この場合は、ハッシュを削除してファイルを保存してください。

%sudo行は次のように分類されます。

  • %sudo :グループの名前。
  • ALL = :このルールは、このネットワーク上のすべてのホストに適用されます。
  • (ALL:ALL) :このグループのメンバーは、すべてのユーザーおよびすべてのグループとしてコマンドを実行できます。
  • すべて:このグループのメンバーは、すべてのコマンドを実行できます。

つまり、このグループのメンバーは、このコンピューターまたはこのネットワーク内の他のホストで、任意のユーザーまたは任意のグループとして、任意のコマンドを実行できます。 したがって、root権限とsudoを使用する機能を誰かに与える簡単な方法は、それらをsudoグループに追加することです。

TomとMaryの2人のユーザーがいて、それぞれユーザーアカウントがtommaryです。 usermodコマンドを使用して、ユーザーアカウントtomsudoグループに追加します。 -G (groups)オプションは、 tomアカウントを追加するグループを指定します。 -a追加)オプションは、このグループをユーザーアカウントtomが既に含まれているグループのリストに追加します。このオプションがないと、ユーザーアカウントtomは新しいグループに配置されますが、他のグループからは削除されます。

 sudo usermod -a -G sudo tom 

メアリーがどのグループに属しているかを確認しましょう。

 グループ

ユーザーアカウントのmaryは、 maryグループにのみ含まれます。

トムに確認しましょう:

 グループ

tomユーザーアカウント(つまりTom)は、 tomsudoのグループに属しています。

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のsudoerファイルエントリ

ユーザーアカウント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のエントリを確認できます。

大いなる力には…

…その一部を他の人に委任する機能があります。 これで、他のユーザーに選択的に権限を与える方法がわかりました。