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の変更は不要かもしれません。