SELinux の Tips

面倒くさいことで有名な 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 が使えるようになる。