ユーザーアカウントとアクセス制限
【連載コラム:Linuxでサーバーを構築してみよう(5)】
テスト環境ができたら、次はサーバーとして動かす管理者の登録をすることになります。
テスト環境の構築が完了したら、次はそのサーバーを管理する人の登録と管理が必要になります。suコマンドとsudoコマンドの両方の使い方、それと便利なグループ機能の使い方を紹介します。
目次
ユーザーアカウントとアクセス制限
サーバーを動かすには、ユーザーアカウントを適切に管理し、必要に応じてアクセス制限(制御)を行う必要があります。
一般ユーザーアカウント
Linuxには、ユーザーアカウントがあります。サーバー用途として利用する場合、必要に応じて一般ユーザーアカウントを作成することになります。サーバーソフトウェアによっては一般ユーザーの作成が必須の場合もあります。
ユーザー作成には、useraddコマンドや、パスワード設定にpasswdコマンドを使用します。
# useradd user1
# passwd user1
New password: (←パスワードを入力)
Retype new password: (←パスワードを再度入力)
passwd: password updated successfully
管理者権限で作業する
管理者権限が必要でも一般ユーザーアカウントから
管理者向けにも、一般ユーザーアカウントを作成することが一般的です。rootでログインできるからといって、いきなり「root」アカウントでログインするのはセキュリティ上、好ましくありません。特にSSHを利用してサーバーにログインする場合、rootで直接ログインすることはできないように設定しておきましょう。
この設定は、/etc/ssh/sshd_configの中の
PermitRootLogin yes
という記述を
PermitRootLogin no
に書き換え(記述がなければ付加する)、sshdを再起動します。
# systemctl restart sshd
suコマンドとsudoコマンド
root権限が必要な作業を行う場合の対応は、suコマンドでrootになる、sudoコマンドを利用する、の2つの方法があります。suは「substitute」(交代する)、すなわちユーザーアカウントを切り替えるコマンドです。suとsudo、どちらを利用するかについてはさまざまな考え方があるのですが、ここでは両方の方法を紹介します。
suコマンドでrootになる
suコマンドでrootになるという方法をとる場合、すべてのユーザーがrootになることができるというのは好ましいことではありません。よく行われるのは、「wheel」というグループを作成し、そのグループに属しているユーザーのみがsuコマンドでrootになれるように設定しておくという方法です。
wheelグループを作成し、そこにユーザーを登録するには、root権限で以下のコマンドを実行します。
# groupadd wheel
# usermod -aG wheel user1
(vigrを利用する方法もあります)
次に、PAMの設定ファイル「/etc/pam.d/su」ファイルを編集し、次の記述を追加します(ほとんどの場合、コメントアウトされているので、頭の#を削除します)。
auth required pam_wheel.so
root権限の設定を行うに当たっての注意
以上に述べたような、root権限にまつわる設定を、SSHなどを利用してリモートから変更する際には注意が必要です。もし設定を失敗した場合に、root権限での作業ができなくなってしまうためです。リモートで失敗したら直接サーバーを操作すればよいといえばそうなのですが、直接サーバーを操作することが物理的に困難な場合もあります。
root権限にまつわる設定をリモートから行う場合は、必ずroot権限で接続したセッションを、必ず1つ有効にした状態で行いましょう(つまり、root権限でログインできているウィンドウを閉じることなく作業する)。そうすれば、失敗しても作業を続行することができます。root権限の設定を変更した場合は、新しいセッションを使って、うまくroot権限が適切に利用できることを確認してから、すべてのセッションを閉じるようにしましょう。
sudoを利用する
sudoは、一般ユーザーがrootユーザの権限が必要なコマンドを実行できるツールです。利用にあたっては、rootユーザーのパスワードではなく、sudoコマンドを実行している一般ユーザーのパスワードが要求されます。
sudoを利用するためには、/etc/sudoersを適切に設定する必要があります。/etc/sudoersを編集するためには、「visudo」というツールを利用することが推奨されています。root権限でvisudoを実行し、以下の記述を行うと、wheelグループに所属しているユーザーはすべてのコマンドを利用することができます。
%wheel ALL=(ALL) ALL
頭の「%」が、グループ名であることを表しています。これがないとユーザー名と解釈されます。
sudoのメリットに、「できること」をきめ細かく設定することができる点が挙げられます。特定のコマンド、たとえばshutdownコマンドのみをuser1ユーザーに実行できるようにするためには、visudoを利用して以下の記述を行います。
user1 ALL=(ALL) /usr/sbin/shutdown
利用を許可するコマンドを、フルパスで記述します。
なお、sudoを利用すると、root権限だけではなく、他のユーザー権限でコマンドを実行できるようにもなりますが、本稿では詳細は省略します。
管理者以外のアカウントのアクセス制限
パーミッションは適切に
ディレクトリのパーミッション設定は適切に行いましょう。「すべてを許可」してしまうと、楽はできますがトラブルの原因となります。セキュリティ面だけではなく、誤操作により他人のファイルを壊してしまうということも起こり得るので、十分注意しましょう。
パーミッションの設定には「chmod」コマンドを利用します。たとえば、/home/user1のパーミッションを、自分はすべて、グループに所属している人には読み取りと実行を許可し、それ以外のユーザーには一切の許可を与えないようにするには、以下のように実行します。
$ chmod 750 /home/user1
chmodコマンドの利用法は本稿では省略しますが、ファイルとディレクトリで実行権限の意味が異なること、umaskコマンドの利用法などについても確認しておいて下さい。
グループを活用しよう
グループは思った以上に便利です。1つのユーザーは複数のグループに所属させることが可能ですし、パーミッションもグループを使えば、「そのグループに所属するユーザーにはすべてを許す、所属していないユーザにはすべてを許さない」ということもできます。
グループに所属させるには、usermodコマンドを利用するか、vigrツールを利用します。
# usermod -aG group user1
所属するグループを追加する際には必ず「-aG」を利用してください。「-G」を用いると、所属しているセカンダリグループが上書きされてしまいます。
vigrは便利なツールです。vigrを利用すると、viエディタで/etc/groupsファイルを編集する形でのグループ設定が可能になります。
そのユーザーが所属しているグループを確認するためには、groupsコマンドを利用します。
# groups user1
グループを活用していないLinuxユーザーが多いのですが、非常に便利な機能ですので、サーバー管理者として必ず理解し、うまく活用しましょう。パーミッションの設定に至っては、たとえばPostgreSQLなどを正しく動作させる上で必須の知識と言えます。
- 筆者紹介
川原 龍人 氏
1975年生まれ。 著書に「BIND9によるDNSサーバ構築」、「シェルスクリプト ポケットリファレンス Bash編(技術評論社)」など。 予備校講師としても活躍中。Linuxとのつきあいは20年を超える。
バックナンバー
第14回:バックアップ
第13回:異常発生時の対応
第12回:サーバー構築という仕事
第11回:ユーザー教育の重要性
第10回:テスト環境を構築する
第9回:ログローテーションとは
第8回:ログの取得と管理
第7回:アクセス制限
第6回:OpenSSHの活用
第5回:ユーザーアカウントとアクセス制限
第4回:テスト環境を構築する
第1回:Linuxでサーバーを構築しよう