AWSにデプロイされたUbuntuシステムでスクリプトを使用しています。このスクリプトの主な目的は、特定のサービスが定期的に(正確には1分ごとに)実行されているかどうかを確認し、何らかの理由でサービスが停止した場合はそのサービスを自動的に開始することです。しかし、問題は、サービスを開始するためにsudo権限が必要なことです。ご存知かもしれませんが、sudoユーザーとして何かを実行するときはパスワードを入力する必要があります。しかし、私はそれをしたくありません。私が実際にやりたいのは、パスワードなしでsudoとしてサービスを実行することです。このような状況に陥った場合は、簡単な回避策を知っています。今日は、この簡単なガイドで、LinuxおよびUnixライクなオペレーティングシステムでsudoパスワードなしで特定のコマンドを実行する方法を説明します。
次の例を見てください。
$ sudo mkdir /ostechnix [sudo] password for sk:
上のスクリーンショットでわかるように、ルート(/)フォルダーにostechnixという名前のディレクトリを作成するときに、sudoパスワードを指定する必要があります。 sudo権限でコマンドを実行しようとするときは常に、パスワードを入力する必要があります。ただし、私のシナリオでは、sudoパスワードを提供したくありません。 Linuxボックスでパスワードなしでsudoコマンドを実行するために行ったことは次のとおりです。
免責事項: これは教育目的のみです。この方法を適用するときは、十分に注意する必要があります。この方法は、生産的かつ破壊的です。たとえば、ユーザーに'rm'
の実行を許可する場合を考えてみましょう。 sudoパスワードなしでコマンドを実行すると、誤ってまたは意図的に重要なものを削除する可能性があります。警告されました!
Linuxでsudoパスワードなしで特定のコマンドを実行する
何らかの理由で、ユーザーがsudoパスワードを指定せずに特定のコマンドを実行できるようにする場合は、そのコマンドを sudoers
に追加する必要があります。 ファイル。
skという名前のユーザーが欲しい mkdir
を実行します sudoパスワードを指定せずにコマンドを実行します。方法を見てみましょう。
sudoersファイルの編集:
$ sudo visudo
ファイルの最後に次の行を追加します。
sk ALL=NOPASSWD:/bin/mkdir
ここで、 sk ユーザー名です。上記の行のように、ユーザーは sk 'mkdir'
を実行できます sudoパスワードなしで、任意の端末からコマンドを実行できます。
コマンドを追加できます(例: chmod
)以下に示すように、カンマ区切りの値を使用します。
sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod
ファイルを保存して閉じます。システムをログアウト(または再起動)します。次に、通常のユーザー「sk」としてログインし、sudoを使用してこれらのコマンドを実行して、何が起こるかを確認します。
$ sudo mkdir /dir1
見る? 'mkdir'
を実行したのに sudo権限を持つコマンドでは、パスワードプロンプトはありませんでした。今後、ユーザーは sk 'mkdir'
の実行中にsudoパスワードを入力する必要はありません コマンド。
sudoersファイルに追加されたコマンドを除く他のすべてのコマンドを実行すると、sudoパスワードの入力を求められます。
sudoを使用して別のコマンドを実行してみましょう。
$ sudo apt update
見る?このコマンドにより、sudoパスワードの入力を求められます。
このコマンドでsudoパスワードの入力を求めるプロンプトを表示したくない場合は、sudoersファイルを編集します。
$ sudo visudo
'apt'
を追加します 以下のようなvisudoファイルのコマンド:
sk ALL=NOPASSWD: /bin/mkdir,/usr/bin/apt
aptバイナリ実行可能ファイルのパスがmkdirとは異なることに気づきましたか?はい、正しい実行可能ファイルのパスを指定する必要があります。コマンドの実行可能ファイルパスを検索するには、たとえば'apt'
、'whereis'
を使用します 以下のようなコマンド。
$ whereis apt apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz
ご覧のとおり、aptコマンドの実行可能ファイルは /usr/bin/apt
です。 、したがって、sudoersファイルに追加しました。
すでに述べたように、コンマ区切りの値を使用してコマンドをいくつでも追加できます。完了したら、sudoersファイルを保存して閉じます。ログアウトして、システムに再度ログインします。
ここで、sudoパスワードを使用せずにコマンドを実行できるかどうかを確認します。
$ sudo apt update
見る? sudoで実行しても、aptコマンドでパスワードの入力を求められませんでした。
これがさらに別の例です。特定のサービス(apache2など)を実行する場合は、以下に示すように追加します。
sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin systemctl restart apache2
これで、ユーザーは'sudo systemctl restart apache2'
を実行できます。 sudoパスワードなしのコマンド。
推奨ダウンロード -無料のチートシート:「Linuxコマンドラインチートシート」
上記の場合、特定のコマンドに対して再認証できますか?もちろんはい!追加したコマンドを削除するだけです。ログアウトして再度ログインします。
または、 'PASSWD:'
を追加することもできます コマンドの前のディレクティブ。次の例を見てください。
以下に示すように、次の行を追加/変更します。
sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt
この場合、ユーザーは sk 'mkdir'
を実行できます および'chmod'
sudoパスワードを入力せずにコマンドを実行します。ただし、'apt'
を実行するときは、sudoパスワードを入力する必要があります。 コマンド。
推奨される読み物:
- UbuntuのユーザーにSudo権限を付与および削除する方法
- LinuxでデフォルトのSudoログファイルを変更する方法
- ユーザーにSudo特権を復元する方法
- LinuxシステムですべてのSudoユーザーを検索する方法
- sudoを使用するときに、ユーザーが自分のパスワードではなくrootパスワードを使用するように強制する方法