概要
sudo スーパーユーザーdoの略です 。これにより、許可されたユーザーが別のユーザーとしてコマンドを実行できるようになります。別のユーザーは、通常のユーザーまたはスーパーユーザーです。ただし、ほとんどの場合、昇格された特権でコマンドを実行するために使用します。
sudoコマンドはセキュリティポリシーと連携して機能します。デフォルトのセキュリティポリシーはsudoersであり、 / etc / sudoersを介して構成できます。 ファイル。そのセキュリティポリシーは高度に拡張可能です。独自のポリシーをプラグインとして開発および配布できます。
suとの違い
GNU / Linuxでは、昇格された特権でコマンドを実行する2つの方法があります。
- suの使用 コマンド
- sudoの使用 コマンド
su スイッチユーザーの略です 。 suを使用すると、rootユーザーに切り替えてコマンドを実行できます。ただし、このアプローチにはいくつかの欠点があります。
- rootパスワードを別のユーザーと共有する必要があります。
- rootユーザーはスーパーユーザーであるため、アクセスを制御することはできません
- ユーザーの行動を監査することはできません。
sudoはこれらの問題に独自の方法で対処します。
- まず、rootユーザーのパスワードを危険にさらす必要はありません。通常のユーザーは、独自のパスワードを使用して、昇格された特権でコマンドを実行します。
- sudoユーザーのアクセスを制御できます。つまり、ユーザーが特定のコマンドのみを実行するように制限できます。
- これに加えて、sudoユーザーのすべてのアクティビティがログに記録されるため、実行されたアクションをいつでも監査できます。 DebianベースのGNU/Linuxでは、すべてのアクティビティが /var/log/auth.logに記録されます。 ファイル。
このチュートリアルの後半のセクションでは、これらの点に光を当てます。
sudoを使って実践する
これで、sudoについてかなり理解できました。実用的に手を汚しましょう。デモンストレーションには、Ubuntuを使用しています。ただし、別のディストリビューションでの動作は同じである必要があります。
sudoアクセスを許可する
通常のユーザーをsudoユーザーとして追加しましょう。私の場合、ユーザーの名前はlinuxtechi
です。1)/ etc/sudoersファイルを次のように編集します。
$ sudo visudo
2)以下の行を追加して、ユーザーlinuxtechiにsudoアクセスを許可します。
linuxtechi ALL=(ALL) ALL
上記のコマンドの場合:
- linuxtechiはユーザー名を示します
- 最初のALLは、任意の端末/マシンからのsudoアクセスを許可するように指示します
- 2番目(ALL)は、sudoコマンドに任意のユーザーとしての実行を許可するように指示します
- 3番目のALLは、すべてのコマンドをrootとして実行できることを示します
昇格された権限でコマンドを実行する
昇格された特権でコマンドを実行するには、次のようにコマンドの前にsudoワードを追加するだけです。
$ sudo cat /etc/passwd
このコマンドを実行すると、rootユーザーのパスワードではなく、linuxtechiのパスワードが要求されます。
別のユーザーとしてコマンドを実行する
これに加えて、sudoを使用して別のユーザーとしてコマンドを実行できます。たとえば、以下のコマンドでは、ユーザーlinuxtechiがdeveshユーザーとしてコマンドを実行します。
$ sudo -u devesh whoami [sudo] password for linuxtechi: devesh
組み込みのコマンド動作
sudoの制限の1つは、Shellの組み込みコマンドがsudoで機能しないことです。たとえば、履歴はコマンドに組み込まれています。sudoを使用してこのコマンドを実行しようとすると、コマンドが見つかりませんというエラーが次のように報告されます。
$ sudo history [sudo] password for linuxtechi: sudo: history: command not found
ルートシェルにアクセス
上記の問題を克服するために、ルートシェルにアクセスし、そこからシェルの組み込みを含む任意のコマンドを実行できます。
ルートシェルにアクセスするには、以下のコマンドを実行します:
$ sudo bash
このコマンドを実行すると、プロンプト記号がポンド(#)文字に変わることがわかります。
レシピ
このセクションでは、生産性の向上に役立ついくつかの便利なレシピについて説明します。ほとんどのコマンドは、日常のタスクを完了するために使用できます。
sudoユーザーとして前のコマンドを実行します
前のコマンドを昇格された特権で実行したいとします。その場合、以下のトリックが役立ちます。
$ sudo !4
上記のコマンドは、昇格された特権で履歴から4番目のコマンドを実行します。
sudoコマンドを使用してroot権限で前のコマンドを実行する場合は、次のコマンドを使用します。
$ sudo !!
Vimを使用したsudoコマンド
多くの場合、システムの構成ファイルを編集しますが、保存している間、これを行うにはrootアクセスが必要であることがわかります。これにより、変更が失われる可能性があります。パニックになる必要はありません。Vimで以下のコマンドを使用して、この状況から救うことができます。
:w !sudo tee %
上記のコマンドの場合:
- コロン(:)は、Vimのexモードになっていることを示します
- 感嘆符(!)は、シェルコマンドを実行していることを示します
- sudoとteeはシェルコマンドです
- パーセンテージ(%)記号は、現在の行のすべての行を示します
sudoを使用して複数のコマンドを実行する
これまで、sudoを使用して実行したコマンドは1つだけでしたが、sudoを使用して複数のコマンドを実行できます。次のようにセミコロン(;)を使用してコマンドを区切るだけです:
$ sudo -- bash -c 'pwd; hostname; whoami'
上記のコマンドの場合:
- ダブルハイフン(–)は、コマンドラインスイッチの処理を停止します
- bashは、実行に使用されるシェル名を示します
- 実行するコマンドの後に–cオプションが続きます
パスワードなしでsudoコマンドを実行する
sudoコマンドを最初に実行すると、パスワードの入力を求められ、デフォルトでは、パスワードは次の15分間キャッシュされます。ただし、次のように、この動作をオーバーライドし、NOPASSWDキーワードを使用してパスワード認証を無効にすることができます。
linuxtechi ALL=(ALL) NOPASSWD: ALL
特定のコマンドの実行をユーザーに制限する
制御されたアクセスを提供するために、sudoユーザーが特定のコマンドのみを実行するように制限できます。たとえば、以下の行では、echoコマンドとlsコマンドのみを実行できます
linuxtechi ALL=(ALL) NOPASSWD: /bin/echo /bin/ls
sudoコマンドを使用してファイルに行またはテキスト文字列を追加します
sudo権限を持つローカルユーザーがいる既存のファイルに数行を追加するシナリオがいくつかあります
$ echo‘text-string’ | sudo tee -a
例を以下に示します:
[email protected]:~$ echo "deb http://ftp.de.debian.org/debian buster main contrib" | sudo tee -a /etc/apt/sources.list deb http://ftp.de.debian.org/debian buster main contrib [email protected]:~$
sudoコマンドを使用して既存のファイルに行またはテキストを追加する別の方法
sudo sh -c 'echo "deb http://ftp.de.debian.org/debian buster main contrib" >> /etc/apt/sources.list'
sudoに関する洞察
sudoコマンドについてさらに掘り下げて、洞察を得ましょう。
$ ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 145040 Jun 13 2017 /usr/bin/sudo
ファイルのパーミッションを注意深く観察する場合は、 setuid sudoでビットが有効になります。ユーザーがこのバイナリを実行すると、ファイルを所有するユーザーの権限で実行されます。この場合はrootユーザーです。
これを示すために、次のようにidコマンドを使用できます。
$ id uid=1002(linuxtechi) gid=1002(linuxtechi) groups=1002(linuxtechi)
sudoを使用せずにidコマンドを実行すると、ユーザーlinuxtechiのIDが表示されます。
$ sudo id uid=0(root) gid=0(root) groups=0(root)
ただし、sudoを指定してidコマンドを実行すると、rootユーザーのIDが表示されます。
結論
この記事の要点は–sudoは通常のユーザーにより制御されたアクセスを提供します。これらの手法を使用すると、複数のユーザーが安全な方法でGNU/Linuxと対話できます。
また読む: Linuxシステムでハードリンクとソフト(シンボリックリンク)リンクを作成する方法