标签: selinux

告诉SELinux让Apache执行文件根目录外的PHP文件访问权限

我有一个目录,其中保存共享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 = …

php apache selinux

5
推荐指数
1
解决办法
4965
查看次数

SELinux影响“无法打开流:权限被拒绝” PHP错误

昨天我花了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环境中“权限被拒绝”问题的所有问题都只涉及文件夹权限问题,而我的情况并非如此。

  1. 实用)如何在不完全禁用SELinux的情况下授予Apache httpd服务对目录的写-删除-更新权限?

  2. 理论上)什么是SELinux?目的是什么?为什么(出于什么原因)创建它?我为什么要使用它?是否有理由在本地开发机上保持启用SElinux?

仅针对资源的主持人:我知道这个问题比实际编程涵盖的管理更多,但是我敢肯定,与新手管理员相比,它对开发人员的影响更为严重,因此我选择了SuperUser和StackOverflow。但是,由您决定将问题移至SuperUser还是保留在此位置。

php permissions lamp fedora selinux

5
推荐指数
2
解决办法
7200
查看次数

如何在init.rc文件中完全禁用Android L中的SELinux?

我想在启动时为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

5
推荐指数
3
解决办法
2万
查看次数

检测是否有人安装了selinux/httpd_can_network_connect

当安装SELinux时,有一个设置 - httpd_can_network_connect - 这通常会阻止PHP的fsockopen()在通过HTTP进入的请求实例化时建立出站连接.

我希望能够通过PHP看到系统是否启用了SELinux/httpd_can_network_connect.如果是这样,我会向用户显示一条警告,说明此设置可能会干扰该页面.

我在一台Ubuntu机器上安装了SELinux,而httpd_can_network_connect 似乎甚至不是可以使用的选项 SELinux似乎没有安装,而且即使在phpinfo中我也没有看到任何安装的迹象( )输出..

有任何想法吗?

php linux ubuntu selinux

5
推荐指数
1
解决办法
924
查看次数

为什么 jenkins 的 rsync 失败

当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)

必须做什么才能使其在詹金斯中也起作用?

ssh rsync centos selinux jenkins

5
推荐指数
1
解决办法
4053
查看次数

selinux进程的c512,c768是什么

我遇到了一个问题,我有一个应用程序需要访问我由内核驱动程序创建的 /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。有谁知道这是什么?

谢谢!

android selinux linux-kernel

5
推荐指数
1
解决办法
6652
查看次数

docker daemon 选项--selinux-enabled 有什么作用

我想它会标记它启动的容器,但是从 的输出来看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 策略以允许访问容器文件系统?

selinux docker

5
推荐指数
1
解决办法
5328
查看次数

如何修改audit2allow生成的.te文件并重新编译成.pp文件

我使用以下命令生成策略文件:

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 文件,以便我可以应用它(稍后在其他节点中也使用)

policy compilation selinux

5
推荐指数
1
解决办法
2844
查看次数

avc : 拒绝 { find } for service=android.os.UpdateEngineService

背景:我自定义了一个 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/”。

可能的解决方案:解决方案可能有两种方法:

  1. 将应用程序构建为 system_app

或者,

  1. 将应用程序构建为 plaform_app 并更改 SELinux 配置,以便应用程序被授予对系统上“/data/”的必要访问权限。

主要问题:根据此处所述的理解和可能的解决方案,我是否朝着正确的方向前进?如果没有,我错过了什么,应该怎么做才能解决这个问题?

android porting selinux

5
推荐指数
0
解决办法
1485
查看次数

/var/run/docker.sock在centos 7上运行的容器中无法访问

我正在启动一个运行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构建的方法.可能有一个简单的解决方案.

任何帮助,将不胜感激!谢谢

sockets selinux docker centos7

4
推荐指数
1
解决办法
3507
查看次数