torutkのブログ

ソフトウェア・エンジニアのブログ

CentOS 4から5へのアップデートメモ

CentOS 4.5が動いているマシンを、CentOS 5.2にアップデートしました。yumでのupgradeではうまくいかないとの記述をインターネット上で目にしていたので、CD-Rからアップデート・インストールしました。

SELinuxとSamba

アップデート後、SELinuxが有効になっていたため、既存のSamba設定ではアクセス拒否されていました。SELinuxモードをEnforcingからPermissiveに変更すると、アクセスできるようになるのでこれが原因です。

SELinuxが原因でアクセス拒否されているかを切り分けるには、SELinuxモードをPermissiveに変えて再実行してみる。

また、SELinuxのセキュリティによるアクセス拒否はログに記録が残るので、ログを参照します。auditdサービスが稼動している場合、/var/log/audit/audit.logに保存されますが、auditdサービスが稼動していない場合は、/var/log/messagesに保存されます。

Sambaで共有するファイルにセキュリティ・コンテキストを設定

Sambaプロセスは、ドメイン(プロセス)・コンテキスト"smbd_t"で実行されます。smbd_tドメイン(プロセス)が読み書き可能なファイル・コンテキストは"samba_share_t"です。そこで、Sambaで共有するディレクトリに、ファイル・コンテキスト"samba_share_t"を指定します。

  • samba_shared_tを設定
 # chcon -R -t samba_share_t /home/samba/public
 # ls -Z
 drwxr-xr-x nobody nobody root:object_r:samba_share_t   public
Sambaでホームディレクトリを共有する場合、論理(boolean)パラメータsamba_enable_home_dirsを設定

ユーザのホームディレクトリをSambaで共有する場合、論理(boolean)パラメータを設定します。

 # /usr/sbin/getsebool samba_enable_home_dirs
 samba_enable_home_dirs --> off
 # /usr/sbin/setsebool -P samba_enable_home_dirs 1
Webサーバ用ディレクトリ(/var/www/html)がアクセス拒否

上記設定でもNGだったのがWebサーバ用ディレクトリです。以下ブログに同じ問題で悩んだ記述を発見しました。
http://memolet.blog22.fc2.com/blog-entry-776.html

  • 試行1:これでは駄目だった。肝心のWebアクセスができなくなった。

/var/www/html以下をchconで設定変更したが、/var/wwwディレクトリもなぜかchconでsamba_share_tを付ける必要があるようです。

 # chcon -R -t samba_share_t /var/www/html
 # chcon -t samba_share_t /var/www

これで設定したら、以下のセキュリティコンテキストに変更されました。

 /var/www/html --- system_u:object_r:samba_share_t

一方、Webサーバからアクセスするためには、httpd_sys_content_tというタイプをファイルコンテキストとして持っている必要があります。タイプは一つのリソース(ファイル)に1つしか指定できないようです。
複数種類のプロセスからアクセスできるファイルタイプとして、以下があります。

    • public_content_t
    • public_content_rw_t
  • 試行2:Sambaで参照はできるが書き込みが駄目だった。
 # chcon -t public_content_t /var/www
 # chcon -t public_content_rw_t /var/www/html -R
  • 試行3:やっとできた

public_content_rw_tを設定しても、実際にSambaから書き込み可能にするには、論理(boolean)パラメータ"allow_smbd_anon_write"をonにしなくてはなりません。

# setsebool -P allow_smbd_anon_write 1

なお、/var/wwwのラベルをvar_tに戻してもアクセスが出来るので、/var/wwwの変更は不要かもしれません。

SELinux設定

  • /etc/selinux/configファイルに起動時のSELinux動作モードを指定

SELINUX=enforcing|permissive|disable

  • 現在のSELinux動作モードの確認
 # /usr/sbin/getenforce
 Enforcing
 # /usr/sbin/setenforce 0
 # /usr/sbin/getenforce
 Permissive
 #
SELinuxの解説記事

atmark ITのサイトにSELinux解説記事があります。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280411/?ST=lin-os