アクセス権に関わる様々なことについて理解を深める

【連載コラム:Linuxを学ぼう(16)】
サーバーを扱う上で必須と言える技術が「Linux」。今回は前回のパーミッションに引き続き、アクセス権について掘り下げて解説していきます。

最終更新日:2023年10月05日

OSがインストールしたファイルなどのアクセス権は適切に設定されていることがほとんどですが、データの置き場所など管理者自身が作成するファイルやディレクトリは適切にアクセス権が設定されている必要があります。

OSの内部的な動作についてきちんと理解することで、さらにアクセス権について理解を深めましょう。


実ユーザーと実効ユーザー

ユーザーやグループは、ファイルに対してアクセスするプログラムを実行したユーザーと、そのユーザーが所属しているグループです。これを「実ユーザー」と呼びます。

一方、sudoコマンドなどのように、実行したユーザーと異なる権限で動作する仕組みもあります。この時のユーザーを「実効ユーザー」と呼びます。たとえばユーザーlinucがsudoコマンドで管理者権限が必要となるプログラムを実行すると、実効ユーザーは「ユーザーroot」となります。

サーバープロセスと実効ユーザー

サーバープロセスはユーザーrootが起動することがほとんどですが、セキュリティ等の関係で実効ユーザーをrootではなく、そのサーバー用に作成したユーザーに変更したりすることがあります。その場合、サーバープロセスがファイルにアクセスするには、その実効ユーザーによるアクセス権が必要となります。

設定をユーザーrootで作業することによって、ファイルやディレクトリがユーザーrootの所有権に設定されている場合があります。このような場合にはサーバープロセスがアクセスできませんので、chownコマンドなどを使って適切な所有権を設定するようにしましょう。

実効ユーザーの確認

実効ユーザーは、psコマンドでプロセスの状態を観ることで、そのプロセスがどのユーザーが実行しているかを確認できます。psコマンドにuオプションを付けて実行すると確認できます。

$ ps u
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
linuc      34847  0.0  0.3 226468  5588 pts/1    S    02:16   0:00 -bash
linuc      34988  0.0  0.2 257436  3964 pts/1    R+   02:22   0:00 ps u

一番左のUSERの項目が、各プロセスの実効ユーザーを表しています。多くの場合、プロセスを起動(プログラムを実行)したユーザーと、psコマンドで確認できる実効ユーザーは同じになっていますが、サーバープロセスなどでは実効ユーザーが変わっていることがあるので、何か問題が起きた時には確認するようにするとよいでしょう。

Webサーバーに見る面白い例

1つ身近で面白い例を紹介します。それはApache Webサーバーです。起動している状態で確認すると、以下のようになります。

# ps aufx
root        2946  0.2  0.6 258132 10848 ?        Ss   00:57   0:00 /usr/sbin/httpd -DFOREGROUND
apache      2947  0.0  0.4 262816  8164 ?        S    00:57   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache      2948  0.0  0.7 1910496 13800 ?       Sl   00:57   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache      2949  0.0  0.6 1779368 11792 ?       Sl   00:57   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache      2950  0.0  0.6 1779368 11792 ?       Sl   00:57   0:00  \_ /usr/sbin/httpd -DFOREGROUND

この例だと、まずrootで実行されているプロセスID 2946が起動しています。これはポート番号80番を使うためにはroot権限が必要だからです。そこからさらに子プロセスが起動していますが、これらはユーザーapacheが実行していることになります。

これらのプロセスが実際にWebサーバーとして動作するプロセスですが、これらのプロセスはroot権限を持たないので、許可されたアクセス権のあるファイルやディレクトリにしかアクセスできません。

デフォルトのアクセス権

デフォルトのアクセス権はumaskと呼ばれる値で決まります。umaskコマンドを実行すると、現在のumaskの値が分かります。

$ umask 
0002

すべてのアクセス権を与える値からumask値を引くことでデフォルトのアクセス権が決まります。ファイルなら0666、ディレクトリなら0777がすべてのアクセス権を表すので、それぞれ0664(rw-rw-r--)、0775(rwxrwxr-x)がデフォルトのアクセス権になります。

Umaskの値を変更したい場合には、引数として値を与えます。

$ umask 0022
$ umask
0022

常に変えておきたい場合には、シェル起動時のシェルスクリプトなどで実行するとよいでしょう。

POSIX ACL

伝統的なUNIXのアクセス権の設定はユーザーとグループ、その他という大まかなアクセス主体でしかアクセスを制御できません。そのため、より細かなアクセス制御を行うためにPOSIX ACLと呼ばれるアクセス権設定をLinuxはサポートしています。
ただし、基本的なLinuxの操作などでPOSIX ACLが使われることはありません。SambaのようなWindows向けファイルサーバー機能の内部で使われるケースなどがあります。

SELinuxとの関係

SELinuxはLinux上でより強力なアクセス制御を行う仕組みです。SELinuxが有効になっていると、アクセス権があるように見えても実際にはアクセスができないというようなことが起こります。

SELinuxについては、また回をあらためてアクセス権の確認方法等を解説する予定です。

アクセス権はOSの根幹であるファイルへのアクセスを制御する仕組みのため、しっかりと理解しておかないとトラブルシューティングなどに支障を来します。何かあった時には対象となるファイルのアクセス権やプロセスの実効ユーザーを確認する習慣をつけましょう。


筆者紹介
宮原 徹 氏

宮原 徹 氏

株式会社びぎねっと

Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。

バックナンバー

第21回:外部からWebサーバーにアクセスする

第20回:Webサーバーを動かす

第19回:Webサーバーをインストールする

第18回:典型的なネットワークトラブルについて理解する

第17回:ネットワークの状態確認を理解する

第16回:アクセス権に関わる様々なことについて理解を深める

第15回:ファイルのアクセス権を理解する

第14回:パッケージをアップデートする dnf編

第13回:PAMを理解する

第12回:グループとは何かを理解する

第11回:sudoコマンドについて理解する

第10回:suコマンドで特権ユーザーになる

第9回:ユーザー権限を理解する

第8回:SSHによるリモートログイン

第7回:Linuxインストール後にやること

第6回:Linuxイストールの実際

第5回:Linuxインストールの準備

第4回:Linux学習のためのネットワーク環境

第3回:学習環境を用意する

第2回:Linuxをどう学ぶのか

第1回:Linuxを学ぼう

ページトップへ