GNU/Linux >> Linux の 問題 >  >> Linux

パスワードなしでSudoコマンドを実行する方法

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 /’ コマンドはファイルシステム全体を消去します。このコマンドは元に戻せないため、このアクションを評価する機会が得られるため、パスワードプロンプトを表示することをお勧めします。


Linux
  1. パスワードプロンプトなしでルートとして特定のプログラムを実行する方法は?

  2. TTY をオーバーライドせずに su/sudo/ssh にパスワードを渡す方法は?

  3. Ansible:パスワードなしの sudo

  1. Ssh –パスワードプロンプトなしでSsh-addを自動的に実行する方法は?

  2. Ssh –パスワードなしでSudoを実行できる場合、Sudoを実行するにはTtyが必要ですか?

  3. SuなしでSudoによってrootパスワードを変更しますか?

  1. cronjob でパスワードなしの MySQLdump

  2. Linux でパスワード プロンプトを中断せずに SCP を実行する方法

  3. パスワードなしで別のユーザーとしてスクリプトを実行するには?