Articles of selinux

SELinux:如何创build一个新的文件types

在RHEL / CentOS 7上我试图为文件创build一个新的SELinux安全上下文,以支持我正在编写的新服务。 我为我的新服务创build了一个Type Enforcement文件,但是我无法设法创build一个系统将识别为文件types的新types。 我正在基于这个CentOS 5“build立一个本地策略模块”文件 ,它指示我创build一个TE文件,然后使用checkmodule和semodule_package来编译它。 如果我只是写在我的TE文件中: type myservice_spool_t; 那么TE编译好,但是当我尝试semanage fcontext我得到这个: $ sudo semanage fcontext -a -t myservice_spool_t "/var/spool/myservice(/.*)?" ValueError: Type myservice_spool_t is invalid, must be a file or device type 我读过各种教程,但没有find一个可行的例子 – 我所看到的一切都是: 过时 – 例如,这个RHEL 4 SELinux文档页面说应该使用type myservice_spool_t, file_type; 但checkmodule说: ERROR 'attribute file_type is not declared' checkmodule ERROR 'attribute file_type […]

SELinux:不能将Firefox进程限制在mozilla_t域

我的目标是在mozilla_t域中执行Firefox,而不是unconfined_t 。 该机器在SELinux的强制模式下运行Fedora 20。 不幸的是,我似乎无法得到这个权利。 无论我做什么,该进程总是在unconfined_t域中执行。 我知道要满足三个条件: 目标文件上下文( mozilla_exec_t )必须对源域可执行( unconfined_t或bin_t ) 目标文件上下文( mozilla_exec_t )必须标记为目标域( mozilla_t )的入口点 必须允许源域( unconfined_t或bin_t )转换到目标域( mozilla_t ) 目标文件是/usr/bin/firefox的firefox脚本,它调用/usr/lib64/firefox/run-mozilla.run ,它再次运行二进制文件/usr/lib64/firefox/firefox 。 这是这些文件上ls -Z的输出: -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/bin/firefox -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/lib64/firefox/run-mozilla.sh -rwxr-xr-x. root root system_u:object_r:mozilla_exec_t:s0 /usr/lib64/firefox/firefox 满足第一个条件,因为unconfined_t被允许执行目标文件上下文mozilla_exec_t 。 $ sesearch -s unconfined_t -t mozilla_exec_t -c file -p execute -Ad […]

如何禁止Docker守护进程将主机的根文件系统挂载到容器中

我有以下容器安装程序。 在裸机服务器上有两个Docker Daemon安装并运行。 主Docker Daemon运行我的应用程序容器,暴露80/443到外面的世界。 插件Docker Daemon运行客户提供的一些容器,通过80/443与我的应用程序进行通信。 我想让客户访问插件Docker守护程序的API(2376),以便客户可以部署/启动/停止自己的容器。 客户只能访问API,而不能访问主机(SSH)。 我目前面临的问题是,如果客户运行一个容器,如docker run -v /:/host/root ubuntu rm -rf /host/root ,那该怎么办? 我的问题是我能做些什么来防止插件Docker守护进程挂载root /或/home/user/之外的任何其他目录, 在/home/user/启动Docker Daemon是否是一个选项? 我可以使用一些LSM(Linux安全模块SELinux / Apparmor)魔术来防止docker守护进程挂载除home用户或var / docker / libs之外的部分或全部主机path吗? 可以–userns-remap帮助我实现我的目标吗? 除虚拟机之外,还有其他选项吗? 服务器完全属于单个客户。 所以安全或数据泄漏并不是我最关心的问题。 我真正想要阻止的是Plugin Daemon中的某个人正在做一些愚蠢的事情,这会影响在Docker Daemon中运行的容器。 我想保持精益,坚持docker工作的唯一工作stream程,不会为虚拟机创build设置额外的工作stream程。

现实世界中的SELinux

通过我迄今的(短)工作经验,从实施的angular度以及如何pipe理SELinux,我已经获得了相当多的SELinux工作知识。 我个人对SELinux有一些疑虑,比如在很多方面似乎过于复杂,似乎安全性似乎很难理解。 所以,我想知道这个行业对SELinux有多热情。 你在你的生产服务器上使用SELinux吗? 如果是这样,你有什么样的成功? 没有严重泄露细节,但你是否为一个与政府有关的组织(DoD / DoJ,国防承包商等)工作? 有非政府公司认为有用吗?

CentOS – semanage – 删除端口的范围

令人惊讶的是,找不到任何关于如何通过semanage port删除一系列端口的明确信息。 这里是我尝试的排列列表: semanage port -d -t http_port_t -p tcp 0-60000 semanage port -d -t http_port_t -p tcp [1-60000] semanage port -d -t http_port_t -p tcp 1,60000 semanage port -d -t http_port_t -p tcp 1-60000 semanage port -d -t http_port_t -p tcp 1 60000 semanage port -d -t http_port_t -p tcp 1,60000 semanage port -d […]

SELinux入门真的很了解吗?

我经常遇到SELinux问题,其中大部分是我最终解决的。 还有一些情况下,定制政策将是非常优雅和更加适当的。 我希望能够充分利用SELinux的技能。 我希望最终能够自己执行严格的政策 。 我正在寻找从哪里开始或如何进入SELinux的build议。 看起来像Dan Walsh和Stephen Smalley是互联网上唯一能够理解所有事情的人(他们是我经常看到的一些名字,完全解决了SELinux的问题)。 我不是在寻找一个简单的链接,而是“在这里阅读”我正在寻找一个清晰的介绍性材料,从SELinux开始 – 而不是技术手册。 如果你了解它,你是如何开始的? 如果这应该是社区wiki,让我不知道它是否应该是,因为它是半主观的。 我不想引用自动化工具,我想要自定义策略。 我想要接近和肮脏,但不必爬上悬崖作为学习曲线。

SELinux – 在文件创build时自动应用上下文的规范方式

我目前的理解是,您必须手动使用restorecon才能将所需的上下文应用于新创build的文件或目录,除非您对从其父目录inheritance的上下文感到满意。 我想知道是否有可能自动应用上下文创build基于其path而不必运行restorecon 。 我用googlesearch了一下,发现了Dan Walsh的这篇文章 ,他提到了使用inotify改变创build上下文的restorecond 。 他也指出了这个明显的问题(比赛条件)。 如果孩子不应该从父目录inheritance它的上下文,这是自动解决重新上下文问题的唯一方法吗? 一个问题是restorecond似乎没有像/etc/selinux/targeted/contexts/files/file_contexts那样处理条目,也就是说没有正则expression式,并且它不能recursion地工作,所以/etc/selinux/restorecond.conf不能包含类似的东西 /var/www(/.*)?/logs(/.*)? 要么 /var/www/* 甚至 /var/www/*/logs 有没有办法解决这个问题? 编辑: 根据@迈克尔的答案,这应该工作OOTB,如果各自的规则存在,但它不: # rm -rf /var/www/foo # semanage fcontext -a -t httpd_log_t '/var/www/foo/logs' # grep '/var/www.*logs' /etc/selinux/targeted/contexts/files/file_contexts* /etc/selinux/targeted/contexts/files/file_contexts:/var/www(/.*)?/logs(/.*)? system_u:object_r:httpd_log_t:s0 /etc/selinux/targeted/contexts/files/file_contexts.local:/var/www/foo/logs system_u:object_r:httpd_log_t:s0 # matchpathcon /var/www/foo/logs /var/www/foo/logs system_u:object_r:httpd_log_t:s0 # mkdir -p /var/www/foo/logs # touch /var/www/foo/logs/quux # ls -alZ /var/www/foo/logs* drwxr-xr-x. root […]

SELinux阻止Apache写入文件

SELinux阻止apache用户写入它拥有的日志文件。 当我setenforce 0它的作品。 否则会显示这个错误 IOError: [Errno 13] Permission denied: '/var/www/webapp/k/site/k.log' 文件的安全上下文: $ ll -Z k.log -rw-r–r–. apache apache system_u:object_r:httpd_sys_content_t:s0 k.log 该文件是在SELinux模式设置为宽容时创build的。 如何设置安全上下文,以便apache用户可以在该目录中写入? 我没有使用chcon设置目录安全上下文,但是我找不到合适的文件types。 从audit.log : type=AVC msg=audit(1409945481.163:1561): avc: denied { append } for pid=16862 comm="httpd" name="k.log" dev="dm-1" ino=201614333 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file type=SYSCALL msg=audit(1409945481.163:1561): arch=c000003e syscall=2 success=no exit=-13 a0=7fa8080847a0 a1=441 a2=1b6 a3=3 items=0 ppid=15256 pid=16862 auid=4294967295 […]

我如何使用SELinux来限制PHP脚本?

我想在我的SL6.4(RHEL 6.4重build)Web服务器上划分不同的PHP应用程序,以便它们不能访问彼此的数据。 SELinux似乎可以做到这一点,但我不确定细节。 我的问题有两个部分: SElinux如何使用mod_phppipe理在Apache进程中运行的PHP脚本? 当运行PHP脚本时,进程是否以某种方式进入脚本上下文,还是只有当脚本通过CGI或FastCGI运行在进程外时才能工作? 如果它转换到一个脚本上下文来运行PHP脚本,是什么让PHP的错误触发转换回主要的httpd上下文? 如果我需要一个备用的PHP部署方法,这将是很好的知道。 我怎样才能分离脚本/应用程序,例如TinyTinyRSS不能访问OpenCloud拥有的东西? 看起来我应该可以通过closureshttpd_unified并提供单独的httpd_ttrss_*和httpd_opencloud_*上下文来实现这一点,并行于httpd_user_foo和httpd_sys_foo 。 考虑到我可以使用的应用程序的数量,我甚至可以使用没有新上下文的sys / user区分。 但是我还没有find关于什么closureshttpd_unified的含义的文档,或者如何设置不同的HTTP上下文。 特别是用PHP脚本通过mod_php运行。 我很好地创build了新的SELinux策略模块,但希望一些文档指向我需要做的新策略,以及如何使它与SELinux目标策略很好地集成。 如果试图用SELinux来完成这种分离是一个失败的原因,我需要在不同的上下文中分别启动不同的httpd,甚至可能是LXC容器,这也是一个有用的答案。

CentOS 6 kickstart忽略“selinux –disabled”

我一直在和这个争斗一下,似乎在CentOS 6中有一个退步,就像anaconda忽略了selinux –disabled指令。 这似乎首先出现在RHEL 4.8中 ,然后在RHEL 5.6中重新出现。 现在使用以前的版本,您只需将sed语句添加到您的%post指令中即可将其禁用。 sed -i -e 's/\(^SELINUX=\).*$/\1permissive/' /etc/selinux/config 我遇到的问题是RHEL / CentOS 6中的新增function是默认设置文件系统属性,所以现在您必须清除这些文件系统属性。 我尝试运行以下命令来去掉我的%post部分中的这些属性,但是它没有任何作用。 find . -exec setfattr -x security.selinux {} \; 我的kickstart文件在下面以防万一你觉得有帮助: #version=RHEL6 install url –url=http://ny-man01.ds.stackexchange.com/centos/6/os/x86_64 lang en_US.UTF-8 keyboard us %include /tmp/nic-include rootpw –iscrypted <mmm no you don't even get the encrypted version> firewall –service=ssh,ntp,snmp authconfig –enableshadow –passalgo=sha512 –enablefingerprint –enablekrb5 […]