Linuxを使用しているときに、一部のファイルにアクセスしたり、機密性の高い操作を実行したりするには、ユーザーに昇格された特権が必要であることがわかりました。 sudoコマンド ユーザー権限を一時的に昇格させ、ユーザーが機密性の高いコマンドを実行したり、制限なしにファイルにアクセスしたりできるようにします。
sudoコマンドの構文 は次のとおりです:
$ sudo --help
sudoコマンドを実行する4つの方法について説明します 毎回パスワードを入力する必要はありません。最初の2つは、 sudoersの編集です。 およびsudoers.d 最後の2つは、ユーザー権限をrootに昇格させるコマンドの実行を伴います。
1。 / etc/sudoersファイルの編集
まず、 sudoを使用してコマンドを実行してみましょう。 パスワードプロンプトが表示されるかどうかを確認します:
$ sudo systemctl start mariadb
パスワードなしでSudoコマンドを実行する
ユーザーアリスが必要な場合 すべてのsudoを実行します sudoを必要としないコマンド 任意/すべてのホストのパスワード、sudoersファイルを編集します。
$ sudo visudo
NOPASSWDを使用します 示されているディレクティブ:
alice ALL=(ALL) NOPASSWD: ALL
パスワードなしで特定のsudoコマンドを実行する
ユーザーにアリスを許可するには パスワードを入力せずに単一の特定のsudoコマンドを実行するには、sudoersファイルに対して次の行を使用する必要があります。
alice ALL=(ALL) NOPASSWD: /bin/systemctl start mariadb
次に、いくつかのコマンドを実行してみてください…
$ sudo systemctl start mariadb $ sudo systemctl status mariadb $ cat /etc/sudoers
上記のターミナルセッションから、 MariaDBを開始しました sudoersファイルに変更を加えたため、パスワードプロンプトが表示されません。また、後続のコマンドには、パスワードプロンプトがあることに注意してください。
パスワードなしで特定のホストでSudoコマンドを実行する
ユーザーが特定のホストでrootとしてコマンドを実行できるようにするため 、 ALLを使用する代わりに 私たちは次のように書いています:
alice linuxshelltips1=(root) NOPASSWD: /bin/systemctl start mariadb
上記はアリスを許可します linuxshelltips1という名前のホストでリストされたコマンドを実行します パスワードを入力せずに。
sudoで3つのコマンドを実行できるようにするため ホストの特権linuxshelltips1 パスワードプロンプトがない場合は、次のようにリストします。
alice linuxshelltips1=(ALL) NOPASSWD: /bin/systemctl start mariadb, /bin/systemctl status mariadb, /bin/cat /etc/sudoers
ここでは、ユーザーにアリスを許可します mariadbのステータスを開始して確認します ホスト名がlinuxshelltips1のホスト上で、パスワードを入力せずにサービスを提供する 。ユーザーは/etc / sudoersを連結することもできます パスワードを入力せずにファイルします。
3つのコマンドはすべて、パスワードを必要とせずに実行されます。ただし、mariadbサービスを停止しようとすると、sudoersファイルでパスワードを指定しなかったため、パスワードの入力を求められます。
グループユーザーのパスワードなしでSudoコマンドを実行する
group1 のように、ユーザーのグループのパスワードを入力せずにsudoコマンドを実行できるようにすることもできます。 どのユーザーにアリス 所属します。
%group1 ALL=(ALL) NOPASSWD: ALL
ユーザー、グループ、コマンドを組み合わせることもできます。たとえば、特定のユーザーまたはグループのみに特定のコマンドを実行させたい場合は、sudoersファイルに次の行を貼り付けます。
alice,%group2 ALL=(ALL) NOPASSWD: /bin/systemctl, /bin/cat, /bin/kill
アリスとgroup2に属するすべてのユーザー sudoを使用してすべてのsystemctl、cat、およびkillコマンドを実行でき、パスワードプロンプトはありません。
次のようにリストすることで、特定のユーザー(alice、bob)が特定のコマンド(systemctl、cat、kill)を実行できるようにすることもできます。
bob,alice, ALL=(ALL) NOPASSWD: /bin/systemctl, /bin/cat, /bin/kill
ファイルを保存したら、 alice およびボブ パスワードの入力を求められることなく、すべてのホストでsystemctl、cat、およびkillコマンドを実行できます。
/ bin /にコマンドをリストする方法に注目してください などのディレクトリ。 bin / systemctl、または/ bin/cat。代わりに、ディレクトリ全体を含めて、‘/’
で終わることができます。 キャラクター。これは、ユーザーが / bin内の任意のコマンドを実行できることを意味します ディレクトリ。ただし、これは / binのサブディレクトリ内のコマンドには適用されません。 ディレクトリ。
たとえば、アリスを許可するには / bin /内のすべてのコマンドを実行します 私たちが書くディレクトリ:
alice ALL=(ALL) NOPASSWD: /bin/
Aliceは、 / bin /にあるsudo権限を必要とするすべてのホストですべてのコマンドを実行できるようになりました。 パスワードを必要としないディレクトリ。
2。 /etc/sudoers.dファイルの編集
または、 /etc/sudoers.dに変更を加える方が安全です。 sudoersファイルの代わりに。これにより、sudo特権の管理がより管理しやすくなり、sudoersのファイルは変更されません。
前のセクションで説明したすべてがここに適用できることに注意してください。唯一の違いは、 sudoers.dを使用することです。 安全のためにファイルします。
たとえば、 aliceのファイルを作成しましょう パスワードを入力せずに、特定のホストでsudoコマンドを実行できるようにします。
$ sudo nano /etc/sudoers.d/alice
ファイルを開いたら、次の行を貼り付けます。
alice linxshelltips=(root) NOPASSWD: /bin/
これで、ユーザーは / bin /ですべてのsudoコマンドを実行できます。 ホスト名がlinuxshelltipsのホストにパスワードを入力せずにディレクトリ 。
次のように、ユーザーのグループが実行できるsudoコマンドを指定することもできます。
$ sudo nano /etc/sudoers.d/groups
次の行を貼り付けて、 group1のすべてのメンバーを許可します パスワードを入力せずに、すべてのホストですべてのsudoコマンドを実行します。
%group1 ALL=(ALL) NOPASSWD: ALL
この方法でsudo特権を管理すると、何かを壊すことを心配せずに簡単に管理できます。
3。 Sudoersファイルの修正
visudoの使用方法に注目してください sudoersファイルを編集するには?システムを壊さないようにしたいので、これは慣例です。 visudoを実行すると ファイルをチェックして、たとえば構文に関して何も混乱していないことを確認します。
代わりにプレーンテキストエディタを使用して間違えた場合、ファイルを編集するにはsudo権限が必要になるため、ファイルを再度編集できなくなります。
visudoの使用 また、一度にsudoersファイルを複数回編集することもできません。つまり、別のユーザーがファイルを編集している場合、他のユーザーはファイルを編集できません。
sudoersファイルがめちゃくちゃになっていて、ロックアウトされていると仮定します。 pkexecを使用します sudoコマンドの代替コマンドです。
$ pkexec visudo
sudoersファイルにアクセスできたら、間違いを修正できます。たとえば、 /etc/sudoers.d/aliceを修正するには ファイル、私たちは書きます:
$ pkexec visudo /etc/sudoers.d/alice
4。 「sudo-s」コマンドの使用
毎回パスワードを入力せずにこれらのコマンドを実行するには、次のコマンドを実行します。
$ sudo -s
パスワードを1回入力すると、このターミナルセッションの後続のすべてのsudoコマンドで、パスワードを再度入力する必要がなくなります。
これで、sudoコマンドを実行しようとしても、パスワードの入力を求められることはありません:
$ sudo systemctl start mariadb.service
exit を発行して、このモードを終了します コマンド:
$ exit
5。 「sudosu」コマンドの使用
パスワードの入力を求められずにsudoコマンドを実行する別の方法は、sudosuコマンドを実行することです。 rootユーザーになります。このコマンドが実行された後、パスワードを1回入力すると、後続のすべてのsudoコマンドで、実行するためにパスワードを入力する必要がなくなります。
$ sudo su
これでroot権限が付与されたため、以降に実行するsudoコマンドでパスワードを入力する必要がなくなりました。
通常、パスワードなしでsudoコマンドを実行するには、 sudoers.dを編集するときに次の構文を使用します。 ファイル:
user_list host_list=effective_user_list tag_list command_list
どこで、
- user_list 特定のユーザー、グループ、エイリアスにすることができます。
- host_list は、ユーザーがパスワードなしでsudoコマンドを実行できるホストのホスト名です。
- effective_user_list 現在のユーザーまたは現在のユーザーのエイリアスとして実行されているユーザーのリストを指定します。
- tag_list NOPASSWDなどのタグを指定します 。
- command_list ユーザーまたはグループがパスワードを必要とせずに実行できるsudoコマンドのリストを指定します。
パスワードの入力を求めるプロンプトを表示せずにsudoコマンドを実行すると、セキュリティ上のリスクと見なされます。パスワードプロンプトは、コマンドが実行される前にコマンドを確認する機会を与えるだけでなく、権限のないユーザーが自分の特権を超えてアクションを実行するのを防ぎます。
たとえば、‘sudo rm -rf /’
コマンドはファイルシステム全体を消去します。このコマンドは元に戻せないため、このアクションを評価する機会が得られるため、パスワードプロンプトを表示することをお勧めします。