タイプを変更する操作

 タイプを変更する操作は,chconコマンドを使うのが最も手っ取り早い。典型的な使い方を図3に示す。例えば,/var/samba/shareディレクトリをSambaで共有するには,このディレクトリのタイプを次のように「samba_share_t」にする。

図3●chconコマンドの書式
図3●chconコマンドの書式


# chcon -t samba_share_t /var/samba/share -R

タイプの確認には,lsコマンドのZオプションを使う。


# ls -Z /var/samba
drwxrwxrwx root root user_u:object_r:samba_share_t share

確かに「samba_share_t」になっている。これで,このディレクトリをSambaで共有できる。

複数のアプリケーションからアクセス

 表1の下2行のタイプ(public_content_t,public_content_rw_t)は,以下で説明するように,特殊なものである。

 例えば,ユーザー「ynakam」のWebページは,/home/ynakam/public_html以下で公開するようになっている。public_html以下には,デフォルト(初期設定)では,「httpd_sys_content_t」が付与される。この状態だと,Apacheからしかアクセスできず,Sambaでpublic_htmlを共有することはできない。

 そこで,複数のアプリケーションからアクセスさせたいときのタイプとして用意されているのが,public_content_t,public_content_rw_tである。例えば,public_htmlに「public_content_t」を付与すれば,Apache,Samba,vsftpdから読み込みアクセスできるようになる。

 これらのアプリケーションからの書き込みアクセスも許可したい場合には,「public_content_rw_t」を付与する。ただし,このタイプを付与しただけでは,読み込みしか許可されない。実際にアプリケーションに書き込みを許可する場合は,タイプ付与に加え,「allow_httpd_anon_write, allow_smbd_anon_write,allow_ftpd_anon_write」の各booleanパラメータを有効にする必要がある。

 例えば,/home/ynakam/public_htmlを,Apacheとvsftpdからは読み込み可能,Sambaからは書き込み可能にするには,次のようにする。


# chcon -t public_content_rw_t /home/ynakam/public_html -R
# setsebool -P allow_smbd_anon_write 1

タイプの不整合を修正する

 繰り返しになるが,Fedora Core 5のインストール時には,file_contextsファイルの設定通りにファイルにタイプが付与される。しかし,システムを運用していくにつれて,この設定と違うタイプが付与されて問題が生じることがある。これは「ファイルの新規作成」と「ファイルの移動」のタイプ付与の仕様が原因だ。仕様とトラブル例を見てみよう。

●仕様1:新規作成されたファイル・ディレクトリのタイプは親ディレクトリと同じ

 これによるトラブルの例としては,ユーザーによるWebページの公開が挙げられる。ユーザー「ynakam」がホーム・ディレクトリ内にpublic_htmlディレクトリを作成し,Webページを公開したとする。しかし,次のようにfile_contextsファイルの設定と異なるタイプが付与され,問題が生じる。

(1)/home/ynakamディレクトリ内のファイルには,user_home_tがデフォルトで付与されている。

(2)/home/ynakam/public_htmlには,「httpd_sys_content_t」タイプが付与されるように,file_contextsファイルに記述されている。

(3)/home/ynakamに,public_htmlディレクトリを作成すると,親ディレクトリのタイプ「user_home_t」が付与される。これはfile_contextsファイルの設定と違うタイプである。

(4)Apache(httpd_tドメイン)は,user_home_tにアクセスできないため,Webページの公開に失敗する。

 このほか,「ファイルを削除して,同名のファイルを再度作成した場合」にも,ファイルの新規作成とみなされるため,同じ問題が発生するときがある。

●仕様2:mvコマンドでファイルを移動すると,ファイルのタイプは保存される

 このトラブル事例としては,Webページのアップロードがある。mvコマンドを用いて,ユーザー「ynakam」のホーム・ディレクトリ内のファイル(/home/ynakam/homepage/index.html)を/var/www/htmlに移動する例で説明しよう。

(1)移動元のファイル(/home/ynakam/homepage/index.html)のタイプは,user_home_tである。

(2)移動先のファイル(/var/www/html/index.html)のタイプは,移動前のものが保存され,user_home_tになる。

 Apache(httpd_tドメイン)は,user_home_tにアクセスできないため,アップロードされたWebページの公開に失敗する。/var/www以下には「httpd_sys_content_t」タイプが付与されるようfile_contextsファイルに設定されており,この設定内容が正しく反映されていない。これがトラブルの原因である。

問題を解決するには

 以上の2つの仕様によるトラブルは,いずれもfile_contextsファイル通りにタイプが付与されていないことが原因である。file_contextsファイルの設定通りにファイルのタイプを付け直すコマンドとして「restorecon」コマンドが用意されている。このコマンドを使えば問題を解決できる。

 restoreconコマンドの使い方は図4のようになる。「-R」はディレクトリ内のファイルすべてを処理するためのオプションだ。

図4●restoreconコマンドの書式
図4●restoreconコマンドの書式

 例えば,「仕様1」で示したpublic_htmlにページを公開できない例では,


/sbin/restorecon -R ~/public_html

を実行して解決できる。「仕様2」に示したアップロードしたファイルを公開できない問題については,


/sbin/restorecon -R /var/www/html

と実行すれば解決する。ここでは,restoreconコマンドをディレクトリ全体に適用することで,index.html以外のファイルにも適切なタイプを設定し直している。

トラブル解決の流れ

 今回紹介したトラブル解決事例を踏まえると,トラブル解決の手順は次のようになる。

(1)トラブルが発生した場合,まずは前回までの解決方法を試みる。つまり,問題を切り分けてログを確認し,booleanパラメータで解決できる問題か否かを判断する。

(2)次に,アクセスできないファイルに対して「restorecon -R <アクセスできないファイルの所属ディレクトリ>」コマンドを試みる。これは,実行するのにほとんど手間がかからない。file_contextsと違うタイプが付与されたことによる問題があれば,これで解決できる。

(3)表1の中にある,タイプ付与で解決できる問題に当てはまるかどうかを確認する。該当すればタイプをchconコマンドで変更する。

(4)ここまでで解決しない場合は,ポリシー・ファイルに手を加える必要が出てくる。これについては,次回から紹介する予定だ。

この先は会員の登録が必要です。有料会員(月額プラン)は申し込み初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら