在端口80上的非root用户下在AIX中运行Apache
UrbanBiel
最近,有人问我,如果Apache以非特权(非root)帐户运行,是否可以绑定到端口80。当然,任何过程都可以使用RBAC。
HTTP服务器
Apache HTTP Server在其配置文件中有一个指令,该进程应在该指令下运行用户帐户。但是,如果希望它在默认端口TCP / 80上侦听,则父进程必须在root用户下运行。Apache以root身份打开端口80,然后派生子进程,这些子进程根据httpd.conf删除其有效的uid和gid。有一些缺点:
- 有些人只是觉得不够安全
- 它还要求Apache必须由root用户控制
一种解决方案是在非特权端口(例如8080)上运行它并使用端口转发,或者使用负载平衡器/代理服务器。专业人员使用RBAC。
首先,我们将Apache配置为在用户www下运行
aix71@/# mkgroup id=10000 www
aix71@/# mkuser id=10000 home=/var/www shell=/bin/ksh login=false pgrp=www groups=www www
aix71@/# mkdir -p /var/www
aix71@/# chown www.www /var/www
aix71@/# grep -E "^User|^Group" /etc/opt/freeware/apache/httpd.conf
User www
Group www
aix71@/# grep "^Listen" /etc/opt/freeware/apache/httpd.conf
Listen 80
一些勿忘的:
- 更改启动脚本,以便Apache在用户www下启动
- 将所有者和权限更改为DocumentRoot,日志文件,httpd.conf文件,pid目录等。请对其进行三次检查。尤其要确保错误日志文件可由用户www写入。
- 验证Apache是否在root用户下运行。停止它(自由端口80)。
这就是关于Apache配置的全部内容。
RBAC
基于角色的访问控制使您可以比传统的root / nonroot方法更好地控制用户对系统资源的访问。使用RBAC,您可以指定某个非root用户可以对通常需要root访问权限的对象执行任务。例如,使用LVM,创建备份或打开小于1024的TCP端口。让我们为方案配置RBAC。
- 一点点RBAC黑客攻击。我们需要知道,httpd程序需要绑定到端口80哪些特权。您已验证,您的Apache将成功以root用户身份启动和运行,对吗?以root用户运行tracepriv命令:
aix71:/# tracepriv -f /opt/freeware/apache/sbin/httpd
12255428: Used privileges for /opt/freeware/apache/sbin/httpd:
PV_DAC_W PV_NET_CNTL
PV_NET_PORT
要获取基于AIX 7.1信息中心或更高版本的特权描述,请下载PDF。IT直觉表明我们需要PV_NET_PORT特权。
- 使用aix71@/# mkdom命令创建域。
mkdom "id=1" dfltmsg="TCP Port 80" apache_80
我们刚刚创建了一个名称为apache_80,ID = 1的域以及您的自定义标识字符串。使用lsdom ALL列出系统中的所有定义的域。
- 设置域对象的安全属性。我们希望将TCP端口80设置为可被属于我们域的进程访问。
aix71@/# setsecattr -o domains=apache_80 \
objtype=netport secflags=FSF_DOM_ANY TCP_80
- 设置域对象的访问属性。我们希望将Apache二进制文件设置为在命令运行时对其网络端口及其子进程具有特权。
aix71@/# setsecattr -c accessauths=ALLOW_ALL \
innateprivs=PV_NET_PORT inheritprivs=PV_NET_PORT \
secflags=FSF_EPS /opt/freeware/apache/sbin/httpd
- 设置用户www属于域apache_80
aix71@/# chuser "domains=apache_80" www
- 而且总是总是,在更改域设置中的任何内容后,运行setkst命令来设置内核安全性表。
现在怎么办。啊,可以,运行apachectl命令来启动Apache。检查并确保所有apache进程都在www用户下运行。不行吗 嗯
故障排除
如果遵循了所有步骤,并且您正在运行AIX 7.1(我的测试系统),那么很难相信它不会起作用。很可能与Apache配置有关。
- 您的Apache首先是否在root用户下运行?
- 检查用户www是否有权访问所有必需的目录:配置目录,DocumentRoot目录,日志文件...。
- 80端口免费吗?
- Apache是否在用户www上的非特权端口(例如8080)上运行?如果是,则可能是RBAC问题。
感谢Viktor Vojtanik的审查和反馈以及独立测试。