我有两个Centos 7系统应该是相同的(数据除外)。
我在服务器A上有一个服务器进程被拒绝写访问特定的目录。 拒绝显示为SELinux拒绝。
在服务器B上,同一个服务不会被拒绝写入同一个目录。
我比较了两个服务器之间的文件权限,目录权限,ACL和SELinux上下文,它们看起来是相同的 – 除了A得到“被拒绝”的错误,而B则没有。
作为解决方法,我将SELinux设置为“Permissive”,现在A上的服务器进程可以写入目录。
在这一点上,我真的只是在寻找什么我可以排除故障的想法; 如果需要,我很乐意提供技术细节。 我对Linuxpipe理非常有经验,但对于SELinux并不是很有经验,所以在这一点上我很难过。
编辑 – 技术细节
我一直遇到的服务是IPA。 实际上,它是与IPA捆绑在一起的Apache,不允许写入memcached目录。 具体地说,用户“apache”被拒绝写入“/ var / run / ipa_memcached /”。
这里是我运行的命令,它们在服务器之间以字面相同的方式返回(除PID之外)。 (这些以root身份运行,所以以“$”开头的行是命令,接下来是输出)
$ semanage fcontext -l | grep memc /var/run/memcached(/.*)? all files system_u:object_r:memcached_var_run_t:s0 /var/run/ipa_memcached(/.*)? all files system_u:object_r:memcached_var_run_t:s0 /usr/bin/memcached regular file system_u:object_r:memcached_exec_t:s0 /etc/rc\.d/init\.d/memcached regular file system_u:object_r:memcached_initrc_exec_t:s0 $ ls -ldZ /var/run/ipa_memcached/; ls -lZ /var/run/ipa_memcached/ drwx------. apache apache system_u:object_r:memcached_var_run_t:s0 /var/run/ipa_memcached/ srwx------. apache apache system_u:object_r:memcached_var_run_t:s0 ipa_memcached -rw-r--r--. apache apache system_u:object_r:memcached_var_run_t:s0 ipa_memcached.pid $ sudo -u apache id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $ ps auxZ | grep http system_u:system_r:httpd_t:s0 apache 12321 0.0 6.6 674224 124860 ? Sl 19:07 0:06 (wsgi:ipa) -DFOREGROUND system_u:system_r:httpd_t:s0 apache 12322 0.0 1.3 324060 26040 ? S 19:07 0:00 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 kdcproxy 12319 0.0 1.2 628032 23604 ? Sl 19:07 0:00 (wsgi:kdcproxy) -DFOREGROUND system_u:system_r:httpd_t:s0 kdcproxy 12320 0.0 1.2 628032 23604 ? Sl 19:07 0:00 (wsgi:kdcproxy) -DFOREGROUND system_u:system_r:httpd_t:s0 root 12314 0.0 1.3 298704 24652 ? Ss 19:07 0:00 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 root 12318 0.0 0.5 53880 11096 ? S 19:07 0:00 /usr/libexec/nss_pcache 4423694 off /etc/httpd/alias unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 17615 0.0 0.0 112648 972 pts/0 R+ 21:11 0:00 grep --color=auto http $ find /var/run/ipa* | xargs getfacl getfacl: Removing leading '/' from absolute path names # file: var/run/ipa # owner: root # group: root user::rwx group::--- other::--- # file: var/run/ipa/services.list # owner: root # group: root user::rw- group::r-- other::r-- # file: var/run/ipa/renewal.lock # owner: root # group: root user::rw- group::--- other::--- # file: var/run/ipa_memcached # owner: apache # group: apache user::rwx group::--- other::--- # file: var/run/ipa_memcached/ipa_memcached.pid # owner: apache # group: apache user::rw- group::r-- other::r-- # file: var/run/ipa_memcached/ipa_memcached # owner: apache # group: apache user::rwx group::--- other::---
编辑发现问题
audit2why为什么显示我实际上造成了我的问题
grep jsilverman /var/log/audit/audit.log* | grep denied| audit2why ... /var/log/audit/audit.log.1:type=AVC msg=audit(1471293346.098:440365): avc: denied { create } for pid=13668 comm="httpd" name="krbcc_A_jsilverman" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:memcached_var_run_t:s0 tclass=file Was caused by: The boolean httpd_manage_ipa was set incorrectly. Description: Allow httpd to manage ipa Allow access by executing: # setsebool -P httpd_manage_ipa 1 ... (and more, similar messages) ...
这导致了比较selinux设置
服务器A
$ getsebool -a| grep httpd_manage_ipa httpd_manage_ipa --> off
服务器B
$ getsebool -a| grep httpd_manage httpd_manage_ipa --> on
那么怎么会发生这种事? 另外,如何克隆B-> A的selinux设置?
不是以任何方式回答,但是如果audit2why或audit2allow的输出有效,您会看到什么结果? 他们是否指定了可能需要更新以允许访问的模块?