web-dev-qa-db-ja.com

CentOS6.4でopenldapを許可するようにselinuxを設定します

Selinuxを有効にしてCentOS6.4でOpenLDAPサーバーを実行しようとしていますが、/etc/init.d/slapd startを介して起動するとすぐにslapdが停止します。 (initスクリプトはOKを報告します。setenforce 0以降はすべて正常に機能します。

これらのメッセージが/var/log/audit/audit.logで見つかりました:

 type = AVC msg = audit(1372888328.397:3262):avc:denied {write} for pid = 1492 comm = "slapd" name = "slapd.log" dev = dm-0 ino = 4348 scontext = unconfined_u :system_r:slapd_t:s0 tcontext = unconfined_u:object_r:var_log_t:s0 tclass = file 
 type = SYSCALL msg = audit(1372888328.397:3262):Arch = 40000003 syscall = 5 success = no exit = -13 a0 = 1bd1018 a1 = 241 a2 = 1b6 a3 = 7ea191 items = 0 ppid = 1491 pid = 1492 auid = 0 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts1 ses = 337 comm = "slapd" exe = "/ usr/sbin/slapd" subj = unconfined_u:system_r:slapd_t:s0 key =(null)
 type = AVC msg = audit(1372888328.408:3263):avc:拒否された{sys_Nice} for pid = 1492 comm = "slapd" capability = 23 scontext = unconfined_u:system_r:slapd_t:s0 tcontext = unconfined_u:system_r:slapd_t:s0 tclass = capability 
 type = SYSCALL msg = audit(1372888328。 :3263):Arch = 40000003 syscall = 156 success = yes exit = 0 a0 = 5d4 a1 = 0 a2 = bfe64968 a3 = b787a6c0 items = 0 ppid = 1491 pid = 1492 auid = 0 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts1 ses = 337 comm = "slapd" exe = "/ usr/sbin/slapd" subj = unconfined_u:system_r:slapd_t:s0 key =(null)
 type = AVC msg = audit(1372888328.424:3264) :avc:denied {read} for pid = 1493 comm = "slapd" name = "log.0000000001" dev = dm-0 ino = 263969 scontext = unconfined_u:system_r:slapd_t:s0 tcontext = unconfined_u:object_r:var_log_t:s0 tclass = file 
 type = SYSCALL msg = audit(1372888328.424:3264):Arch = 40000003 syscall = 5 success = no exit = -13 a0 = 1c78270 a1 = 8000 a2 = 0 a3 = 0 items = 0 ppid = 1 pid = 1493 auid = 0 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty =(none)ses = 337 comm = "slapd" exe = "/ usr/sbin/slapd "subj = unconfined_u:system_r:slapd_t:s0 key =(null)
 

しかし、これは私にそれを修正する方法がわからないままにします。 LDAPデーモンの実行を許可するようにselinuxに指示するにはどうすればよいですか?


私は試した

restorecon -v -F -R /etc/openldap
restorecon -v -F -R /var/lib/ldap

しかし、これは機能しませんでした(実際、slapdを開始する能力が壊れているようですselinuxが無効になっている場合でも)。次のようなメッセージをたくさん受け取りました

restorecon reset/etc/openldap/cacerts context unconfined_u:object_r:etc_t:s0-> system_u:object_r:etc_t:s0

2
Brad Mace

監査ログをaudit2allow(1)audit2whyでフィルタリングすると、何が起こっているかのおおよその情報が得られます。

#============= slapd_t ==============
allow slapd_t self:capability sys_Nice;
allow slapd_t var_log_t:file { write read };
------------------------------------

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1372888328.408:3263): avc:  denied  { sys_Nice } for  pid=1492 comm=slapd capability=23  scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:system_r:slapd_t:s0 tclass=capability

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1372888328.424:3264): avc:  denied  { read } for  pid=1493 comm=slapd name=log.0000000001 dev=dm-0 ino=263969 scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

ラベルの確認

ラベルの復元によってサービスの開始が妨げられる可能性はほとんどありませんSELinuxが許可モードの場合。また、なぜ-Fスイッチなのですか?

ディレクトリまたはファイルのラベル付けを復元する必要があるかどうかを知るには、まず、ファイルまたはディレクトリが持つべきコンテキストを調べます。

# matchpathcon /etc/openldap/
/etc/openldap   system_u:object_r:etc_t:s0

次に、そのセキュリティコンテキストを一覧表示します。

# ls -ldZ /etc/openldap/
drwxr-xr-x. root root system_u:object_r:etc_t:s0       /etc/openldap//

この例では、これ以上のアクションは必要ありません。

あなたの問題に関して、問題はラベル付け自体ではなく、欠落しているtype enforcementルール、つまりラベル付けを許可するルールですたとえば、ある限定されたドメインから別のドメインへのtransitionへの処理、または特定のラベルが付いたファイルの読み取り。

SELinuxモジュールの作成

slapd_taudit.logに表示された操作を実行できるようにするモジュールの構築を試みることができます。コードをさらに調整する必要がある可能性があります。このタスクには、audit2allowmakeを使用します。すべてのコマンドは、それぞれのマンページに非常によく文書化されています。プロセスはおおよそ次のようになります(関連するメッセージをaudit.txtにコピーした後):

audit2allow -i audit.txt -m slapd -o slapd.te
make -f /usr/share/selinux/devel/Makefile load

また、この問題に関するSELinuxポリシーのバグレポートがすでに存在するかどうかを確認してください。

3
dawud