我有一个目录,其中保存共享PHP脚本(名称是任意的,但它不是/ var /,/ usr /,或SELinux将具有特定设置的
任何内容):/ whatever/scripts /
这些脚本可以由cronjobs执行,也可以由Apache或Tomcat执行,因此输出可以包含在网页中.
SELinux拒绝允许:
type = AVC msg = audit(1363205612.276:476923):avc:拒绝{execute} for pid = 6855 comm ="sh"name ="script.php"dev = sda3 ino = 4325828 scontext = system_u:system_r:httpd_t:s0 tcontext = unconfined_u:object_r:etc_runtime_t:s0 tclass = file
type = SYSCALL msg = audit(1363205612.276:476923):arch = c000003e syscall = 59 success = no exit = -13 a0 = 2431d10 a1 = 2431d70 a2 = 24301e0 a3 = 50 items = 0 ppid = 23100 pid = 6855 auid = 4294967295 uid = …
昨天我花了5个小时直接发现一个看似不合理的错误“无法打开流。权限被拒绝”,该错误是在执行任何写入文件系统的操作之后发生的:fopen(带有“ w”和“ a”标志),move_uploaded_file, file_put_contents。
我已经多次检查目录所有者(用户和组-chown,chgrp),将文件夹属性更改为不安全的777(带有的rwx chmod),但是没有效果。我什至重新安装了Apache和PHP,但仍然遇到相同的错误。
经过数小时的阅读各种文档后发现,错误的根源是SELinux限制自动适用于Apache服务httpd。我只是/etc/selinux/config通过更改行在Fedora(版本20)上编辑文件来关闭SELinux :
SELINUX=enforcing
Run Code Online (Sandbox Code Playgroud)
至
SELINUX=disabled
Run Code Online (Sandbox Code Playgroud)
我重新启动计算机,那个烦人的错误终于消失了。
我必须注意到,Stack Overflow上有关LAMP环境中“权限被拒绝”问题的所有问题都只涉及文件夹权限问题,而我的情况并非如此。
(实用)如何在不完全禁用SELinux的情况下授予Apache httpd服务对目录的写-删除-更新权限?
(理论上)什么是SELinux?目的是什么?为什么(出于什么原因)创建它?我为什么要使用它?是否有理由在本地开发机上保持启用SElinux?
仅针对资源的主持人:我知道这个问题比实际编程涵盖的管理更多,但是我敢肯定,与新手管理员相比,它对开发人员的影响更为严重,因此我选择了SuperUser和StackOverflow。但是,由您决定将问题移至SuperUser还是保留在此位置。
我想在启动时为Android L或5禁用SELinux.原因是因为SELinux问题,我的守护程序在启动时不会开始执行.我在init.rc文件中有以下内容:
su 0 setenforce 0
service my_daemon /system/bin/my_daemon
class main # Also tried: class core (but it didn't make a difference)
user root
group root
Run Code Online (Sandbox Code Playgroud)
但是,在启动时,我使用adb shell来检查SELinux是否被禁用(使用getenforce)并返回Enforcing.我希望SELinux在启动时完全禁用.如果没有完全禁用那么至少Permissive.
有什么建议?
android selinux android-ndk android-4.4-kitkat android-5.0-lollipop
当安装SELinux时,有一个设置 - httpd_can_network_connect - 这通常会阻止PHP的fsockopen()在通过HTTP进入的请求实例化时建立出站连接.
我希望能够通过PHP看到系统是否启用了SELinux/httpd_can_network_connect.如果是这样,我会向用户显示一条警告,说明此设置可能会干扰该页面.
我在一台Ubuntu机器上安装了SELinux,而httpd_can_network_connect 似乎甚至不是我可以使用的选项 SELinux似乎没有安装,而且即使在phpinfo中我也没有看到任何安装的迹象( )输出..
有任何想法吗?
当rsync与jenkins一起使用作为CentOS 6.4上的执行shell命令时,它失败:
[workspace] $ /bin/sh -xe /tmp/hudson3424899639384884888.sh
+ rsync -av /var/lib/jenkins/jobs/myjob/workspace/target/classes/ myuser@myserver.com:/home/myuser/test
rsync: Failed to exec ssh: Permission denied (13)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.6]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(600) [sender=3.0.6]
Run Code Online (Sandbox Code Playgroud)
但是,它可以从命令行运行:
su jenkins
rsync -av /var/lib/jenkins/jobs/myjob/workspace/target/classes/ myuser@myserver.com:/home/myuser/test
sending incremental file list
sent 17875 bytes received 83 bytes 3990.67 bytes/sec
total size is 1981027 speedup is 110.31
Run Code Online (Sandbox Code Playgroud)
必须做什么才能使其在詹金斯中也起作用?
我遇到了一个问题,我有一个应用程序需要访问我由内核驱动程序创建的 /proc 条目,并且遇到了 selinux 被拒绝的问题:
avc: denied { write } for pid=30200 comm="omg.flashlight" name="omg_flash_brightness" dev="proc" ino=4026534208 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:proc:s0 tclass=file permissive=0
Run Code Online (Sandbox Code Playgroud)
我尝试解决这个拒绝问题,发现我不能允许 untrusted_app 写入 proc:file,因为会出现 CTS 问题。我尝试为 omg.flashlight APP 添加域。我使用 ps -Z 并发现该应用程序如下
u:r:untrusted_app:s0:c512,c768 u0_a89 6669 382 com.omg.flashlight
Run Code Online (Sandbox Code Playgroud)
我尝试添加以下设置以使其成为seapp_contexts 中的selinux 域:
user=app domain=omg_flashlight seinfo=platform name=com.omg.flashlight type=app_data_file
Run Code Online (Sandbox Code Playgroud)
我新建了一个 omg_flashlight.te:
type omg_flashlight,domain;
app_domain(omg_flashlight)
Run Code Online (Sandbox Code Playgroud)
但结果是一样的,APP仍然是untrusted_app。
有人知道这件事吗?我发现有c512,c768。有谁知道这是什么?
谢谢!
我想它会标记它启动的容器,但是从 的输出来看ps -eZ,我看不出任何区别。例如,容器etcd有相同的域,不管守护进程有没有这个选项:
system_u:system_r:container_runtime_t:s0 16212 ? 00:00:00 dnsmasq-nanny
Run Code Online (Sandbox Code Playgroud)
但它确实阻止了我的容器 (k8s-dns-dnsmasq-nanny-amd64:1.14.8) 启动,并且拒绝日志显示对/etc/localtime/usr/sbin/dnsmasq 的访问被拒绝。我认为这些是容器文件系统中的文件。如何编写 SELinux 策略以允许访问容器文件系统?
我使用以下命令生成策略文件:
ausearch -ts today |audit2allow -M sample
Run Code Online (Sandbox Code Playgroud)
它将生成两个文件:sample.te 和 sample.pp
sampel.te 包含以下几行:
allow container_t unlabeled_t:dir { add_name create remove_name rename write };
Run Code Online (Sandbox Code Playgroud)
我想编辑此行以添加“读取”权限:
allow container_t unlabeled_t:dir { add_name create remove_name rename write read};
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将 .te 文件编译成 .pp 文件,以便我可以应用它(稍后在其他节点中也使用)
背景:我自定义了一个 AOSP 发行版并创建了一个自定义 OTA 更新程序服务以与之集成。但是每当我调用更新程序服务时,都会生成以下错误消息:
E/SELinux: avc: denied { find } for service=android.os.UpdateEngineService pid=22801 uid=10024 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:update_engine_service:s0 tclass=service_manager permissive =0
诊断:根据错误消息,我们的应用程序正在构建为平台应用程序。因此,我们无法访问系统上的路径“/data/”。
可能的解决方案:解决方案可能有两种方法:
或者,
主要问题:根据此处所述的理解和可能的解决方案,我是否朝着正确的方向前进?如果没有,我错过了什么,应该怎么做才能解决这个问题?
我正在启动一个运行bash脚本的容器,该脚本使用Centos 7.0.1406上的docker 1.3.2在内部进行docker构建.文件/命令位于https://gist.github.com/wrabbit-revisited/1d70d0f1805be1848c08.
docker build需要访问docker socket,所以我使用了一个常见的技巧,如http://nathanleclaire.com/blog/2014/07/12/10-docker-tips-and-tricks-that-will-make-你唱一首鲸鱼之歌/:
-v /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
在构建之前,我在脚本中运行检查:
if [ -e "/var/run/docker.sock" ];
then
echo "docker.sock found"
else
echo "docker.sock not found"
fi
Run Code Online (Sandbox Code Playgroud)
并且"echo"显示找不到docker.sock.如果使用sudo在容器外部进行检查,则会发现.
我尝试在"docker run"命令行中添加"--permissive = true",但没有明显的变化.
这里有一些类似问题的参考:https://github.com/dpw/selinux-dockersock.它针对Fedora/RHEL,但也没有解决这个问题.如果我使用"setenforce Permissive"和sestatus来确保selinux处于许可模式,问题仍未得到解决.
我还尝试将"--security-opt = label:type:docker_t"添加到docker命令行,按照https://github.com/jwilder/nginx-proxy/issues/40.没有明显的效果.
这里描述了Docker的selinux策略:http://www.unix.com/man-page/centos/8/docker_selinux/.
很多信息,但我不确定selinux是否有助于解决问题.如果我编辑/ etc/selinux/config以禁用selinux然后重新启动并运行sestatus它说selinux被禁用,但问题仍然存在.
看,它可能与此有关:https://github.com/docker/compose/issues/983.使用这个技巧在容器内运行docker是很常见的,但也许有更好的方法来做到这一点或一个好的解决方法.我认为是dind,但这是工作,这是一个广泛使用的,简单的(表面上),在容器内运行docker构建的方法.可能有一个简单的解决方案.
任何帮助,将不胜感激!谢谢