面倒くさいことで有名な selinux。 FAQ的なものについて、コマンド等をまとめました。
なお詳細な解説はgoogleで検索すれば済むので割愛します。
SELinuxが機能しているか確認する
1) id コマンドを使う。
SELinuxが無効な場合は、
$ id -Z id: --context (-Z) works only on an SELinux-enabled kernel
有効な場合は
$ id -Z
sysadm_u:sysadm_r:sysadm_t:s0
となる
2) getenforce コマンドを使う
$ /usr/sbin/getenforce
3) /selinux 以下のファイルを見る
$ cat /selinux/enforce
SELinuxを無効にする(redhat系)
redhat系なら /etc/sysconfig/selinux に
SELINUX=disabled
と書く。これで次回起動時からSELinuxが無効になる
SELinuxを有効にする(redhat系)
redhat系なら /etc/sysconfig/selinux に
SELINUX=enforcing
と書く。これで次回起動時からSELinuxが有効になる。 permissive モードなら
SELINUX=permissive
と書く。
タイプの確認
$ ls -Z
タイプの変更
chcon を使う。以下、具体例
samba でファイル共有できるようにする場合
$ chcon -t samba_share_t /var/samba/share -R
apache(httpd) で外部にファイルを公開する場合(read-only)
$ chcon -t public_content_t public_html -R
apache(httpd) で外部にファイルを公開する場合(掲示板など、ログを書き込み可能にする場合)
$ chcon -t public_content_rw_t public_html/log -R
期待通りに動かない場合
$ sudo /etc/init.d/auditd start
で、 auditd を起動しておく。これで、 selinux 関連のエラーログが /var/log/audit/audit.log に保存される。
このようにして保存したエラーログを audit2why コマンドに与えると、SELinuxがうまく動かない原因を特定できる。
$ audit2why < /var/log/audit/audit.log
ログファイルが巨大で読みにくい場合は
$ tail /var/log/audit/audit.log | audit2why
などとする。
sudo や su が使えない
一度
$ ssh -l root localhost
などとして、ルートでログインして、
# semanage login -a -s sysadm_u "ユーザ名"
を実行する。
あとは、"ユーザ名" でログインしなおすだけで、sudo や su が使えるようになる。