Linuxでsudoを使用する方法とsudoersファイルの使い方

  • sudoを使うと、別のユーザー(通常はroot)として、制御された一時的な方法でコマンドを実行できます。
  • 権限設定は、visudo を使用して /etc/sudoers ファイルおよび /etc/sudoers.d ファイルで定義されます。
  • sudoやwheelのようなグループ、およびsudoers内のエイリアスを使用すると、特定のユーザーに特定の権限を簡単に付与できます。
  • NOPASSWDのようなオプションを使用すると、さまざまな状況でsudoを使用する際のセキュリティと利便性を調整できます。

Linuxでsudoを使用する

毎日Linuxを使っているなら遅かれ早かれ、あなたはコマンドに出くわすでしょう sudoこれは、ユーザーとしてログインすることなく管理タスクを実行できるようにするキーです。 root 常に監視されている状態は、不便なだけでなく、非常に危険です。システムを誤って破損させたり、気づかないうちにセキュリティ上の脆弱性を残したりしないためには、その仕組み、利用可能なオプション、設定方法を理解することが不可欠です。

この記事では、詳細に解説していきます。 それは一体どんな内容なのですか? sudoユーザーとの関係性はどのようなものか? root そしてファイルと共に /etc/sudoers使用方法の違いは何ですか su y sudoまた、特定のユーザーやグループに(パスワードを必要とせずに)非常に具体的な権限を付与するように設定を微調整する方法についても説明します。この記事を読み終える頃には、いつどのように使用すべきかが明確になっているはずです。 sudoその内部で何が起こっているのか、そしてそれを恐れずに制御する方法。

sudoとは何ですか?また、Linuxにおいてなぜそれほど重要なのでしょうか?

コマンド sudo それは重要な部分の一つです 現代のLinuxシステムでは、通常「スーパーユーザー実行」または「代替ユーザー実行」と説明され、その機能はシンプルながら強力です。つまり、権限のあるユーザーが、システム上の別のユーザーであるかのようにコマンドを実行できるようにします。 root期間限定。

実際には、これは 通常ユーザーが管理タスク(パッケージのインストール、システム設定の変更、サービスの管理、機密ファイルのアクセス許可の変更など)を実行できるが、 直接ログイン root一般ユーザーとスーパーユーザーの分離は、Linuxにおけるセキュリティの柱の一つである。

最新のディストリビューション (Debian、Ubuntu、多くの派生ディストリビューション、SLEタイプのシステムなど) sudo これはプリインストールされているため、安易にアンインストールしたり変更したりすることは推奨されません。さらに、多くのシステムでは、インストール時に作成されたユーザーは、このソフトウェアを使用する権限を持つ管理者グループに自動的に追加されます。 sudoデフォルトの特権ユーザーになる。

心に留めておくべき非常に重要なこと つまり sudo ユーザーを「変換」するものではありません root これはシステムへの完全なアクセス権を与えるものではなく、設定で定義されたルールに基づいて、ユーザーが別のユーザーとして特定のコマンドを実行できるようにするものです。このようにして、システムへの完全なアクセス権を与えることなく、非常に限定的な権限を付与することができます。

sudoの内部動作

の基本操作は sudo ユーザーの視点から見ると非常にシンプルです。単語を配置します。 sudo 特権を持って実行したいコマンドの前に。たとえば、パッケージリストを更新するには、 apt-get DebianやUbuntuでは、一般ユーザーは次のような操作を行う必要があります。

> sudo apt-get update

sudo なしで管理者コマンドを実行しようとすると最も一般的には、「アクセスが拒否されました」などのエラーや、特定のロックされたファイルを開くことができないことを示すメッセージが表示されます。 /var/lib または別のシステムディレクトリ。同じコマンドを繰り返すとすぐに sudo 次に、システムはパスワードを要求します。すべてが正しく設定されていれば、コマンドはスーパーユーザー権限で実行されます。

コマンドを実行すると sudoプログラムはまず、設定ファイルを参照して、ユーザーがプログラムを使用する権限を持っているかどうか、またどの特定のコマンドを使用する権限を持っているかを確認します。 /etc/sudoers また、多くのシステムでは、ディレクトリ内の追加ファイル /etc/sudoers.d/規則で許されるなら、 sudo パスワードの入力を求められます(通常はあなたのパスワードであり、相手のパスワードではありません)。 root)そして、一時的にあなたの権限を昇格させ、対象ユーザーとしてコマンドを実行します。

最初は戸惑うことが多い、興味深い詳細 端末でパスワードの入力を求められたとき、入力中は文字はもちろん、アスタリスクも表示されません。これは正常な動作です。入力は「ブラインド」方式で行われ、パスワードの長さが他人に知られないようにするためのセキュリティ対策の一環です。

さらに、須藤は一種の「信頼セッション」を維持します。パスワードを正しく入力すると、同じ端末で一定時間(多くのディストリビューションではデフォルトで約15分)管理者権限が維持されます。この期間中は、さらにコマンドを実行できます。 sudo パスワードを何度も入力するように求められることなく。

sudoの基本的な構文と最も便利なオプション

一般的な構文は、 sudo それは非常に簡単です:

> sudoコマンド

最も一般的な使用方法は、 として sudo comandoしかし、興味深いオプションが数多く用意されています。最もよく使われる(そして多くの公式ガイドで強調されている)オプションは以下のとおりです。

  • -h: プログラムの構文と利用可能なすべてのオプションを含むヘルプメッセージを表示します。 sudo.
  • -V: 現在のバージョンを表示します sudo そして、コンパイルに関する詳細情報。
  • -v認証の「猶予時間」を更新します。つまり、カウンターをリフレッシュして、権限が期限切れにならないようにし、すぐにパスワードを再入力する必要がなくなります。
  • -k: 保存されている認証情報を即座に無効にします。 sudo 既に認証済みであることを「忘れて」しまい、次回はパスワードを再度入力するよう求められる。
  • -l: 実行権限のあるコマンドを表示します sudo 現在の構成によると sudoers.

他のユーザーと同様にコマンドを実行するための非常に便利なオプションも用意されています。 以外 root。 たとえば、 -u 特定のコマンドに対して、対象ユーザーを指定できます。

> sudo -u pedro whoami

この場合、セッションが別のユーザーのものであっても、 コマンド whoami 実行時に「pedro」というユーザーとして扱われるため、結果は「pedro」と表示されます。これは、セッションを手動で切り替えることなく、権限のテストやサービスアカウントに関連するタスクを実行する場合に非常に便利です。

sudoとsu、そしてrootユーザー

Linuxでは、複数のメカニズムが共存している。 管理者権限を取得するには、次のように直接登録してください。 rootコマンドを使用する su そして使用 sudoそれぞれに長所と短所があり、それらを理解しておけば多くのトラブルを回避できます。

rootとして直接ログイン (例えば、 ssh root@servidorこれにより、システムへのフルアクセスが最初から可能になります。これは非常に便利ですが、同時に極めて危険でもあります。コマンドの入力ミスは、システムの半分を消去したり、重要な権限を変更したり、マシンを使用不能にしたりする可能性があります。したがって、ほとんどの場合、ログインセッションの使用は推奨されません。 root 常時営業中。

コマンド su (代替ユーザー) これにより、同じターミナル内で別のユーザーに切り替えることができます。元のセッションはバックグラウンドで残り、新しいセッションを「カプセル化」します。 su pedroパスワードの入力を求められます。 pedro そして、中に入ったら、 exit 以前のユーザーに戻ります。ユーザー名を指定しない場合、 su デフォルトでは、 root.

重要なニュアンスがあります suログインオプションを通過しない場合(su -, su -l o su --login) はユーザーを変更しますが、環境は変更しません。つまり、作業ディレクトリと前のユーザーの変数がそのまま残るため、権限エラーが発生する可能性があります (たとえば、 ホーム (元のユーザーの認証情報に新しいユーザーの認証情報を適用したもの)

その代わりに、 sudo より安全で制御しやすいアプローチを提供するパスワードを知る必要はありません rootしかし、あなた自身のパスワードであり、システムが決定します。 /etc/sudoersどのユーザーがどのコマンドを実行できるか、例えばどのユーザーでどのマシンから実行できるかなど。さらに、各使用において sudo ログに記録されるため、昇格された権限で行われた操作を監査しやすくなります。

sudo を使用した「別のユーザーとして」の対話型セッションの場合いくつか非常に実用的なバリエーションがあります。

  • sudo -s: 現在のユーザーの環境を継承して、対象ユーザーとしてシェルを開きます。
  • sudo -i: 対象ユーザーの環境とディレクトリをクリーンな状態で、対象ユーザーの完全なログインシェルを起動します。 $HOMEファイルの読み込みなど .profile o .bash_profile.

どちらのオプションも、単発の作業には便利です。 別のユーザーとして(通常は root パスワードを覚えて使用することなく、または任意のサービスアカウントを操作でき、実行された操作の制御と記録を維持できます。

/etc/sudoers ファイルと /etc/sudoers.d ディレクトリ

sudo設定の中核 アーカイブにあります /etc/sudoersそこで誰がそれを使用できるかが定義されるのです sudoどのユーザーや特定のコマンドがどこから実行できるかなど。さらに、多くのディストリビューションには、以下の場所にあるすべての追加設定ファイルを自動的に読み込むディレクティブが含まれています。 /etc/sudoers.d/.

それを理解することが重要です /etc/sudoers 「適切な編集なしに」編集してはいけません。 どのテキストエディタでも使用できます。常にコマンドを使用して変更する必要があります。 visudoデフォルトでは、ファイルをエディタで開きます。 vi o nano(設定によりますが)セキュリティ層が追加されます。保存前に構文チェックを行い、2人が同時に編集することを防ぎます。

sudoersを編集する一般的な用途 次のとおりです。

> sudo visudo -f /etc/sudoers

また、特定のファイルを作成することもできます。 /etc/sudoers.d/ ユーザーグループ、サービスなどごとに設定を分ける。たとえば、ファイルを用意する。 /etc/sudoers.d/networking ネットワーク管理に関する特定のルールを設け、一般的な設定とは混同しないようにする。

一般的なシステムで /etc/sudoers を開く場合以下のような行が表示されます(コメントは除く)。

  • ルート ALL=(ALL:ALL) ALL: ユーザー root どのホスト上でも、どのユーザー、どのグループとしてでも、あらゆるコマンドを実行できます。
  • %admin ALL=(ALL) すべてグループ内の誰でも admin 完全な使用権限があります sudo.
  • %sudo ALL=(ALL:ALL) ALLグループにも同じことが当てはまります sudoこれは、Ubuntuとその派生ディストリビューションでは通常キーグループです。
  • #include /etc/sudoers.d: そのディレクトリ内のファイルも読み込む必要があることを示します (たとえ #(これはこの特定の文脈におけるコメントではありません。)

ユーザーおよびグループルールに加えて, sudoers 複雑な設定を簡素化するためにエイリアスを定義できます: ユーザーエイリアス (User_Alias) コマンド (Cmnd_Alias)、実行グループ(Runas_Alias)または宿主の(Host_Alias).

sudoersを使用してユーザーとグループを管理する

サーバーでよく行われる慣行 アクセスを制御しています sudo グループを通じて。たとえば、多くのシステムでは、ユーザーをグループに追加するだけで十分です。 sudo o wheel そうすれば、正式な行政許可を取得できます。

どのユーザーがグループに属しているかを確認する 決定された(例えば、 sudo)、以下を使用できます。

> grep 'sudo' /etc/group

ユーザーにsudo権限を付与したい場合は通常のやり方としては、対応するグループに追加します。たとえば、組み込むには bill グループへ sudo:

> sudo adduser bill sudo

それらの特権を取り消す必要がある場合グループから削除するだけです。

> sudo deluser bill sudo

もう一つ、はるかに優れた可能性 これは、特定のコマンドのみに権限を付与し、無制限の権限を与えないことを含みます。これを行うには、通常、特定のファイルが作成されます。 /etc/sudoers.d/例えば、ファイルを定義できます /etc/sudoers.d/networking たとえば次のようになります:

Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​NETALL = CAPTURE、SERVERS
%netadmin ALL = NETALL

この構成では、グループ内のどのユーザーでも netadmin エイリアスで定義されたコマンドを実行できるようになります NETALL (エイリアスをグループ化する) CAPTURE y SERVERSすべてに完全にアクセスすることなく sudo必要なのは追加することだけです bill グループへ netadmin 使用できるように tcpdump そして、定義されたサーバーツール。

sudoを必要とする一般的なコマンド

システムの日常的な管理においてほぼ常に一緒に行われるいくつかの種類のタスクがあります sudoなぜなら、それらはシステムの変更や特権情報へのアクセスを伴うからである。

パッケージ管理: に基づく分布において zypper, apt または他のパッケージマネージャの場合、ソフトウェアのインストール、削除、または更新を行う操作には権限が必要です。例:

> sudo zypper install package
> sudo apt-get install docker-ce

ただし、情報を読み取るだけのクエリリポジトリの一覧表示などは、通常は sudoシステム自体が権限エラーを返すタイミングをテストして確認するしかない。

systemdによるサービス管理 通常は systemctlサービスの開始、停止、再起動などの操作には通常、 sudo:

> sudo systemctl restart apache2

それとは対照的に、サービスの状態を確認するなどのより無害なコマンド 多くのシステムでは、特権なしで動作可能です。

> systemctl status NetworkManager

ユーザーアカウントの管理にも注意が必要です. 次のようなコマンド usermod, useradd o deluser 彼らはほぼ常に sudoなぜなら、それらはシステムのユーザーデータベースを変更するからである。

> sudo usermod -L -f 30 tux

最後に、ファイル権限と所有権の管理 とともに chown そして、システムパスや他のユーザーに影響を与える場合、企業は通常、権限を必要とします。たとえば、すべてのファイルとサブディレクトリを /home/test/tux-files ユーザーの所有物となる tux 次のようなものを使用できます:

> sudo chown -R tux:tux /home/test/tux-files

sudo の使用例

実際の事例をいくつか見てみましょう。 どこ sudo それは、権限エラーと正しい管理操作との違いを生む。

Debian/Ubuntu のパッケージインデックスを更新する 権限がないと、ファイルを操作できないためエラーが発生します。 /var/lib/apt/listsコマンド:

> apt-get update

最終的には「アクセス拒否」メッセージが表示されます。そう繰り返すと、状況が変わる。

> sudo apt-get update

システムがパスワードを要求します。ユーザーが承認されている場合 sudoersアップデートは問題なく実行されます。これは繰り返されるパターンです: 権限エラーなしで sudo正しい実行 sudo.

もう一つの非常に一般的な例は、ファイルをシステムパスにコピーすることです。として /usr/local/binそこにスクリプトをコピーしようとすると、次のようになります。

> cp script.sh /usr/local/bin/

端末がエラーを出すのは普通のことです そのディレクトリに書き込む権限がないことを示しています。 sudo:

> sudo cp script.sh /usr/local/bin/

パスワードの入力を求められ、認証に成功すると、複製は、特権昇格により実行されたものとして作成され、記録される。

sudo をオプションと組み合わせることもできます -u セッションを変更したり、 su。 例えば、

> whoami
> sudo -u pedro whoami

最初の注文では、あなたの実際のユーザー名が表示されます。一方、2番目のコマンドは「pedro」を返し、実行がそのターゲットユーザーとして行われたことを示します。

パスワードなしで権限を付与する、その他の高度なオプション

スウェットパンツの最も強力な効果の1つは、 この機能を使用すると、パスワードを要求する頻度や、どの特定のコマンドに対してパスワードを要求するかを調整できます。たとえば、自動化されたスクリプトやデスクトップ環境のシャットダウンボタンなど、特定のコマンドを実行する際に、毎回パスワードを入力する必要がないようにしたい場合があります。

これはラベルによって実現されます NOPASSWD ルールでは sudoers例えば、 miusuario 実行可能 /bin/cat とともに sudo パスワードを要求せずに、次の行を追加できます。

myuser ALL = NOPASSWD: /bin/cat

同様に、機器のシャットダウンを管理させることもできます。 認証を繰り返さずに、次のようなものを追加する:

myuser ALL = NOPASSWD: /sbin/shutdown、/sbin/halt、/sbin/reboot、/sbin/restart

よりクリーンで拡張性の高い構成を実現するためエイリアスを使用することをお勧めします。典型的な例としては、ユーザーグループ、コマンドグループ、そして必要に応じて実行ユーザーエイリアスを定義することが挙げられます。

User_Alias GROUP = ペペ、ペリコ、アンドレス
Cmnd_Alias ​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​WEB = www-data, apache

これらの定義を使えば、次のように書くことができます。 より読みやすいルール、例えば以下のようなもの:

全グループ=パワー

したがって、エイリアスに含まれるすべてのユーザーは GRUPO コンピューターの電源を切ったり再起動したりするには、 sudoパスワードを要求するかどうかは、 NOPASSWD o PASSWDまた、特定のホストへの使用を制限することもできます。 Host_Alias つまり、特定のネットワークからのみ有効となる。

ビヨンド NOPASSWD他にもラベルがあります として NOEXEC (コマンドが他のプログラムを昇格された権限で起動するのを防ぐため)または、追加するなどのちょっとした面白いこと insults 線まで Defaults、 そのため sudo パスワードの入力に失敗するたびに、英語でジョークを言います。

これらすべては、sudoersが単なる「root権限の切り替え」以上の機能を持っていることを示している。適切に設定すれば、ニーズに合わせて非常にきめ細かな権限モデルを設計でき、一般的な「root権限でログインして何でもできる」というレベルよりもはるかに優れたセキュリティを実現できます。

このようなツールがあれば sudo正しく理解され、正しく構成されている複数のユーザーが作業する、またはリスクを最小限に抑えたい現代のLinuxシステムでは、たとえユーザーが1人であっても、これはほぼ必須です。 sudo, /etc/sudoers、グループ sudo o wheel 高度なタグなど NOPASSWDセッションに常に張り付いていなくても、快適さ、細かい操作性、安全性の間で非常にバランスの取れた状態を実現できます。 root 運だけに頼ってはならない。

Linuxのrootユーザー
関連記事
Linuxにおけるrootユーザー:権限、リスク、およびベストプラクティス

優先ソースとして追加