4.4. 管理制御

自宅のマシンを管理する際は、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)の章を参照)。 ただし、ネットワークの設定変更、新しいマウスの設定、ネットワークデバイスのマウント などの他の重要な管理タスクは管理アクセスがないと実行できません。 結果、システム管理者はネットワーク上のユーザーがどのくらい管理アクセスを 与えられるかを決定する必要がでてきます。

4.4.1. rootアクセスを許可する

企業内のユーザーが信頼できるコンピュータ知識の豊富な人達ばかりなら、 rootアクセスの許可を与えるのは悪くないかもしれません。 rootアクセスを許可するということは、 デバイスの追加やネットワークインターフェースの設定などをユーザー個人で行なうことが できるため、システム管理者はネットワークセキュリティや他の重要な問題の処理から 解放されることになります。

一方、rootアクセスを個別のユーザーに与えると 次のような問題の原因となる可能性があります。

4.4.2. rootアクセスを禁止する

こうした理由や諸事情から、 ユーザーにrootとしてのログイン許可を与えることが不安に思われる場合、 rootパスワードは機密とし、ランレベル1やシングルユーザーモードへのアクセスは ブートローダパスワード保護(詳細は項4.2.2 を参照)で禁止してください。

表4-1では、rootログインを確実に禁止する方法を示します。

方法説明効果対象外
rootシェルを変更する。/etc/passwdファイルを編集して、 シェルを/bin/bashから/sbin/nologin に変更します。

rootシェルへのアクセスを妨げ、試行を記録します。
次のプログラムがrootアカウントへのアクセスを妨げられます。
� login
� gdm
� kdm
� xdm
� su
� ssh
� scp
� sftp

シェルを必要としないプログラム、FTPクライアントや メールクライアント、多くのsetuidプログラム。
以下のプログラムはrootアカウントへのアクセスを妨げられません。
� sudo
� FTP クライアント
� Email クライアント

すべてのコンソールデバイス(tty)からのrootアクセスを使用禁止にする。空の/etc/securettyファイルはコンピュータに接続している すべてのデバイスでのrootログインを妨げます。

コンソールまたはネットワークからのrootアカウントへの アクセスを妨げます。以下のプログラムはrootアカウントへのアクセスを妨げられます。
� login
� gdm
� kdm
� xdm
� ttyを開く他のネットワークサービス

rootとしてログインしないプログラム。ただし、 setuid や他のメカニズムから管理タスクを実行するもの。
以下のプログラムはrootアカウントへのアクセスを妨げられません。
� su
� sudo
� ssh
� scp
� sftp

rootのSSHログインを使用禁止にします。/etc/ssh/sshd_configファイルを編集して、 PermitRootLoginパラメータをnoに 設定します。

OpenSSHツールセットからのrootアクセスを妨げます。 以下のプログラムはrootアカウントへのアクセスを妨げられます。
� ssh
� scp
� sftp

これはOpenSSHツールセットへのrootアクセスのみを妨げます。

PAMを使ってサービスへのrootアクセスを制限する。/etc/pam.d/ディレクトリで目的のサービスのファイルを編集します。 pam_listfile.soが認証を必要とするのを確認します。 詳細は、項4.4.2.4を参照してください。

PAM認識であるネットワークサービスヘのrootアクセスを妨げます。
以下のサービスはrootアカウントへのアクセスを妨げられます。
� FTP クライアント
� Email クライアント
� login
� gdm
� kdm
� xdm
� ssh
� scp
� sftp
� PAM認識サービスはすべて

PAM認識ではないプログラムとサービス

表 4-1. rootアクセスを使用禁止にする方法

4.4.2.1. rootシェルを使用禁止にする

ユーザーが直接rootとしてログインしないようにするために、システム管理者は rootアカウントのシェルを/etc/passwdファイルで /sbin/nologinに設定できます。 これにより、suコマンドやsshコマンドなど、シェルを必要とするコマンドからrootアカウントへのアクセスが妨げられます。

誓要項目重要
 

シェルにアクセスする必要のないプログラム。電子メールクライアントや sudoコマンドなどは、rootアカウントにアクセスできます。

4.4.2.2. 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ユーザー ログインは防ぎません。

4.4.2.3. rootSSHログインを使用禁止にする

SSHプロトコルからのrootログインを防ぐには、SSHデーモンの設定ファイル (/etc/ssh/sshd_config)を編集します。 次のように表示されている行を見つけます。

# PermitRootLogin yes

次のように変更します。

 
PermitRootLogin no

4.4.2.4. PAMを使うrootを使用禁止にする

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)の章を 参照してください。

4.4.3. rootアクセスを制限する

rootユーザーへのアクセスを完全に拒否する代わりに、su やsudoなどのsetuidプログラムからのみアクセスを許可させたい ことがあるかもしれません。

4.4.3.1. suコマンド

suコマンドを入力すると、ユーザーはrootパスワードを 求められ、認証されるとrootシェルプロンプトが与えられます。

suコマンドからログインすると、 ユーザーはrootユーザーとなり、 システムに対して絶対的な管理アクセス権を持ちます。 さらに、ユーザーがrootを獲得すると、パスワードを求められることなく suコマンドを使ってシステム上の他のユーザーに なることができるかもしれません。

このプログラムは非常に強力であるため、 企業内の管理者はそのコマンドへのアクセスを持つ人を 限定したいことがあるかもしれません。

これを行なう簡単な方法は、ユーザーをwheelと呼ばれる 特殊管理グループに追加することです。追加するには、rootになり次のコマンドを 入力します。

usermod -G wheel <username>

上記のコマンドで、<username>には、 wheelグループに追加されるユーザー名を入れます。

この目的でユーザーマネージャを使用するには、 メインメニューボタン (パネル上) => システム設定 => ユーザーとグループの順に進むか、シェルプロンプトでredhat-config-usersコマンドを入力します。ユーザータブを選択して、 ユーザーの一覧からユーザーを選択します。ボタンメニューのプロパティをクリックします(または、プルダウンメニューからファイル => プロパティと選ぶ)。

次に、グループタブを選択して、 図4-2で示すように wheel グループをクリックします。

図 4-2. Groupsのペイン

次に、su (/etc/pam.d/su)の PAM設定ファイルをテキストエディタで開き、以下の行から[#]コメントを削除します。

auth  required /lib/security/pam_wheel.so use_uid

これを行なうと、管理グループwheelの メンバーだけにそのプログラムの使用を許可します。

注意注記
 

デフォルトでは、rootユーザーはwheelグループ のメンバーです。

4.4.3.2. sudoコマンド

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ページにはこのファイル用オプションの詳細一覧が 記述されています。