在端口80上的非root用户下在AIX中运行Apache

UrbanBiel

非root用户配置javahome 非root用户启动apache_Apache最近,有人问我,如果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。

  1. 一点点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特权。

  1. 使用aix71@/# mkdom命令创建域。
mkdom "id=1" dfltmsg="TCP Port 80" apache_80

我们刚刚创建了一个名称为apache_80,ID = 1的域以及您的自定义标识字符串。使用lsdom ALL列出系统中的所有定义的域。

  1. 设置域对象的安全属性。我们希望将TCP端口80设置为可被属于我们域的进程访问。
aix71@/# setsecattr -o domains=apache_80 \
objtype=netport secflags=FSF_DOM_ANY TCP_80
  1. 设置域对象的访问属性。我们希望将Apache二进制文件设置为在命令运行时对其网络端口及其子进程具有特权。
aix71@/# setsecattr -c accessauths=ALLOW_ALL \
innateprivs=PV_NET_PORT inheritprivs=PV_NET_PORT \
secflags=FSF_EPS  /opt/freeware/apache/sbin/httpd
  1. 设置用户www属于域apache_80
aix71@/# chuser "domains=apache_80" www
  1. 而且总是总是,在更改域设置中的任何内容后,运行setkst命令来设置内核安全性表。

现在怎么办。啊,可以,运行apachectl命令来启动Apache。检查并确保所有apache进程都在www用户下运行。不行吗 嗯

故障排除

如果遵循了所有步骤,并且您正在运行AIX 7.1(我的测试系统),那么很难相信它不会起作用。很可能与Apache配置有关。

  • 您的Apache首先是否在root用户下运行?
  • 检查用户www是否有权访问所有必需的目录:配置目录,DocumentRoot目录,日志文件...。
  • 80端口免费吗?
  • Apache是否在用户www上的非特权端口(例如8080)上运行?如果是,则可能是RBAC问题。

感谢Viktor Vojtanik的审查和反馈以及独立测试。