自宅のマシンを管理する際は、rootユーザーとしてあるいは sudoやsuなどのsetuid プログラムから有効なroot権限を取得して、いくつかのタスクを実行する必要があります。 setuidプログラムは、ユーザーがプログラムを操作するのではなく、 プログラムのオーナーのユーザーID(UID)で動作するプログラムです。 このようなプログラムは、次の例のように、長い一覧形式のオーナーセクションに 小文字のsが表示されています。
-rwsr-xr-x 1 root root 47324 May 1 08:09 /bin/su |
しかし、社内のシステム管理者は、社内のユーザーにユーザーのマシンに対して どのくらいの管理アクセスを持たせるかを決めなくてはなりません。 pam_console.soと呼ばれるPAMモジュールで、 再起動やリムーバブルメディアのマウントなど通常はrootユーザー専用のいくつかの作業が 物理的なコンソールでログインした最初のユーザーに許可されます (pam_console.soモジュールについての詳細は、 Red Hat Enterprise Linux リファレンスガイドにある PAM (Pluggable Authentication Modules)の章を参照)。 ただし、ネットワークの設定変更、新しいマウスの設定、ネットワークデバイスのマウント などの他の重要な管理タスクは管理アクセスがないと実行できません。 結果、システム管理者はネットワーク上のユーザーがどのくらい管理アクセスを 与えられるかを決定する必要がでてきます。
企業内のユーザーが信頼できるコンピュータ知識の豊富な人達ばかりなら、 rootアクセスの許可を与えるのは悪くないかもしれません。 rootアクセスを許可するということは、 デバイスの追加やネットワークインターフェースの設定などをユーザー個人で行なうことが できるため、システム管理者はネットワークセキュリティや他の重要な問題の処理から 解放されることになります。
一方、rootアクセスを個別のユーザーに与えると 次のような問題の原因となる可能性があります。
マシンの誤設定 — rootアクセスを持つユーザーが 自分のマシンの設定を誤り助けが必要になったり、悪くすると知らずにセキュリティホール を作ってしまうことがあります。
安全ではないサービスを実行する — rootアクセスを持つユーザーが自分のマシン上で安全ではないサービス、 FTPやTelnetなどを実行してしまい、 明瞭にネットワーク上でユーザー名やパスワードを渡してしまうので、 これらを危険にさらす可能性があります。
rootで電子メールの添付ファイルを実行する — 稀れですが、Linux に影響をおよぼす電子メールウィルスが存在します。 ただし、これらウィルスが危険なのは、rootユーザーで実行したときのみです。
こうした理由や諸事情から、 ユーザーにrootとしてのログイン許可を与えることが不安に思われる場合、 rootパスワードは機密とし、ランレベル1やシングルユーザーモードへのアクセスは ブートローダパスワード保護(詳細は項4.2.2 を参照)で禁止してください。
表4-1では、rootログインを確実に禁止する方法を示します。
| 方法 | 説明 | 効果 | 対象外 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| rootシェルを変更する。 | /etc/passwdファイルを編集して、 シェルを/bin/bashから/sbin/nologin に変更します。 |
|
| |||||||||||||||
| すべてのコンソールデバイス(tty)からのrootアクセスを使用禁止にする。 | 空の/etc/securettyファイルはコンピュータに接続している すべてのデバイスでのrootログインを妨げます。 |
|
| |||||||||||||||
| rootのSSHログインを使用禁止にします。 | /etc/ssh/sshd_configファイルを編集して、 PermitRootLoginパラメータをnoに 設定します。 |
|
| |||||||||||||||
| PAMを使ってサービスへのrootアクセスを制限する。 | /etc/pam.d/ディレクトリで目的のサービスのファイルを編集します。 pam_listfile.soが認証を必要とするのを確認します。 詳細は、項4.4.2.4を参照してください。 |
|
|
表 4-1. rootアクセスを使用禁止にする方法
ユーザーが直接rootとしてログインしないようにするために、システム管理者は rootアカウントのシェルを/etc/passwdファイルで /sbin/nologinに設定できます。 これにより、suコマンドやsshコマンドなど、シェルを必要とするコマンドからrootアカウントへのアクセスが妨げられます。
![]() | 重要 |
|---|---|
シェルにアクセスする必要のないプログラム。電子メールクライアントや sudoコマンドなどは、rootアカウントにアクセスできます。 |
rootアカウントへのアクセスを更に制限するには、/etc/securetty ファイルを編集してコンソールでrootログインを使用禁止にすることができます。 このファイルは、rootユーザーがログインする許可のあるデバイスすべてを 一覧表示しています。ファイルがまったく存在しない場合は、 rootユーザーはシステム上のあらゆる通信デバイスから、あるいは、 コンソールかrawネットワークインターフェース経由でログインできます。 これはユーザーがrootとして自身のマシンにTelnetできるため危険であり、 ネットワーク上で自分のパスワードをプレーンテキスト送信してしまいます。 デフォルトでは、Red Hat Enterprise Linuxの/etc/securettyファイルは、 マシンに物理的に接続されているコンソールでのログはrootユーザーのみに 許可しています。rootがログインしないようにするには、 以下のコマンドを入力してこのファイルの内容を削除します。
echo > /etc/securetty |
![]() | 警告 |
|---|---|
空白の/etc/securettyファイルは、 認証までコンソールが開かないため、OpenSSHツールセットを使う遠隔からのrootユーザー ログインは防ぎません。 |
SSHプロトコルからのrootログインを防ぐには、SSHデーモンの設定ファイル (/etc/ssh/sshd_config)を編集します。 次のように表示されている行を見つけます。
# PermitRootLogin yes |
次のように変更します。
PermitRootLogin no |
PAMは、/lib/security/pam_listfile.soモジュールを通して、 特定アカウントを拒否するのに柔軟性を発揮します。これで、ログイン許可のない ユーザーの一覧でモジュールをポイントすることができます。 /etc/pam.d/vsftpdPAM設定ファイルにある vsftpd FTP サーバーに、どのようにモジュールが使用されるのか 以下に例を示します(例の中の最初の行の末尾にある\文字は、ディレクティブが1行であれば必要ありません)。
auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeed |
これは、PAMが /etc/vsftpd.ftpusersファイルを参照して、 記載されているユーザーすべてに対してサービスへのアクセスを拒否します。 このファイルの名前は変更しても構いません。各サービスの一覧を別々に保持したり、 複数のサービスへのアクセスを拒否するために1つの主要一覧を使うこともできます。'
管理者が複数のサービスへのアクセスを拒否したい場合、 メールクライアントの/etc/pam.d/pop や /etc/pam.d/imap、あるいはSSHクライアントの /etc/pam.d/sshなどのPAM設定サービスに、 似たような行を加えることができます。
PAMついての詳細は、Red Hat Enterprise Linux リファレンスガイドにある PAM (Pluggable Authentication Modules)の章を 参照してください。
rootユーザーへのアクセスを完全に拒否する代わりに、su やsudoなどのsetuidプログラムからのみアクセスを許可させたい ことがあるかもしれません。
suコマンドを入力すると、ユーザーはrootパスワードを 求められ、認証されるとrootシェルプロンプトが与えられます。
suコマンドからログインすると、 ユーザーはrootユーザーとなり、 システムに対して絶対的な管理アクセス権を持ちます。 さらに、ユーザーがrootを獲得すると、パスワードを求められることなく suコマンドを使ってシステム上の他のユーザーに なることができるかもしれません。
このプログラムは非常に強力であるため、 企業内の管理者はそのコマンドへのアクセスを持つ人を 限定したいことがあるかもしれません。
これを行なう簡単な方法は、ユーザーをwheelと呼ばれる 特殊管理グループに追加することです。追加するには、rootになり次のコマンドを 入力します。
usermod -G wheel <username> |
上記のコマンドで、<username>には、 wheelグループに追加されるユーザー名を入れます。
この目的でユーザーマネージャを使用するには、 メインメニューボタン (パネル上) => システム設定 => ユーザーとグループの順に進むか、シェルプロンプトでredhat-config-usersコマンドを入力します。ユーザータブを選択して、 ユーザーの一覧からユーザーを選択します。ボタンメニューのプロパティをクリックします(または、プルダウンメニューからファイル => プロパティと選ぶ)。
次に、グループタブを選択して、 図4-2で示すように wheel グループをクリックします。
次に、su (/etc/pam.d/su)の PAM設定ファイルをテキストエディタで開き、以下の行から
auth required /lib/security/pam_wheel.so use_uid |
これを行なうと、管理グループwheelの メンバーだけにそのプログラムの使用を許可します。
![]() | 注記 |
|---|---|
デフォルトでは、rootユーザーはwheelグループ のメンバーです。 |
sudoコマンドでは、ユーザーに管理アクセスを与える別の 方法を提供しています。信頼できるユーザーが管理コマンドにsudo を先に付けて実行すると、このユーザーは自身のパスワードを 要求されます。次に、認証されそのコマンドが許可されれば、 管理コマンドがrootユーザーで行なわれたかのように実行されます。
sudoコマンドの基本形式は次のようになります。
sudo <command> |
上記の例で、<command>には、 mountなどの通常はrootユーザー専用のコマンドを入れます。
![]() | 重要 |
|---|---|
sudoers は5分間パスワードを求められることなく再度そのコマンドを使用できるため、 sudoコマンドのユーザーは、 マシンから離れる前にログアウトするよう十分に気をつける必要があります。 この設定は設定ファイルの/etc/sudoersから変更できます。 |
sudoコマンドは高い柔軟性を備えています。 例えば、/etc/sudoers設定ファイルに記載されているユーザー のみがsudoコマンドの使用を許可され、そのコマンドは rootシェルではなくそのユーザーのシェルで実行されます。 つまり、項4.4.2.1で示すように rootシェルを完全に使用禁止にすることができます。
sudoコマンドは広範囲の追跡監査も行ないます。 成功した認証はそれぞれ/var/log/messagesファイルに記録され、 発行されたコマンドは発行者のユーザー名と共に/var/log/secure ファイルに記録されます。
sudoコマンドのもうひとつの利点は、 管理者が必要に応じて特定コマンドに別々のユーザーアクセスを 許可することができることです。
sudo設定ファイルの/etc/sudoersを 編集する管理者は、visudoコマンドを使用してください。
誰かに管理権限を与えるには、visudoを入力してから ユーザーの権利指定セクションで以下のような行を追加します。
juan ALL=(ALL) ALL |
この例では、ユーザーjuanが どのホストからもsudoを使用してどのコマンドも実行できるように 決めています。
例えば、sudoを設定する際に、 以下のように特定コマンドを設定できます。
%users localhost=/sbin/shutdown -h now |
この例では、コンソールでならいずれのユーザーも/sbin/shutdown -h nowコマンドを発行できるように決めています。
sudoersのmanページにはこのファイル用オプションの詳細一覧が 記述されています。