sam9260目标板上设定thttpd服务后出现/usr/sbin/thttpd: unknown user - 'httpd'错误提示

本文介绍如何在基于SAM9260的目标板上搭建Web服务器。通过交叉编译thttpd并配置相关文件,最终实现从浏览器访问目标板上的静态网页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

目标板:sam9260;

运行状态:bootstrap、U-Boot、kernel和rootfs都已经成功完成,这些文件烧写到Flash中可以让目标板以nandflash自身启动系统,进入shell界面;

现在想添加web应用,使用thttpd服务器;

http://www.acme.com/software/thttpd/获得thttpd的源码,放到${PRJROOT}/sysapps中,解压之后,使用如下命令进行交叉编译:

$ CC=arm-linux-gcc ./configure --host=arm-linux
$ make
将生成的thttpd复制到目标系统的根文件系统,并进行strip处理;

$ cp thttpd ${PRJROOT}/rootfs/root422/usr/sbin
$ arm-linux-strip ${PRJROOT}/rootfs/root422/usr/sbin/thttpd
将范例配置文件复制到目标板的根文件系统:

$ cp contrib/redhat-rpm/thttpd.conf ${PRJROOT}/rootfs/root422/etc
范例配置文件中,将thttpd的用户设成httpd这个帐号,将网页内容存放在目标板的/home/httpd/html目录:

$ mkdir -p ${PRJROOT}/rootfs/root422/home/httpd/html
最后,编辑目标板的/etc/inittab文件,将下面一行添加到inittab中:

::respawn:/usr/sbin/thttpd -C /etc/thttpd.conf

重启目标板,从console窗口看到不停地出现如下提示:

/usr/sbin/thttpd: unknown user - 'httpd'


解决办法:

因为在thttpd.conf中设定httpd为用户,而thttpd不能识别httpd这个用户,

试着修改/etc/passwd文件,添加httpd这个用户,如下所示:

httpd:x:498:494:Web server user:/home/httpd/html:/bin/sh
再次重启目标板,提示/var/log/thttpd.log文件找不到,

在目标板的/var目录下添加两个文件:

$ mkdir -p /var/log
$ mkdir -p /var/run
$ sudo touch /var/log/thttpd.log
$ sudo touch /var/run/thttpd.pid
再次重启目标板,待进入shell界面,从主机的浏览器中输入:

目标板IP:port/html文件名
在本人所用的调试环境下,浏览器地址栏输入:

192.168.37.244:81/a.html

就可以看到静态网页界面了。




本设计把 Apache httpd (2.4+) + 自订虚拟主机 作为靶场,让学生在一周内从 AVC 诊断 → 最小策略生成 → 标签/布尔量设计 → 加固与静态审计 → 自动化验证 五个阶段完成一套 最小特权 的 SELinux 模块;所有产物(策略源码、脚本、日志、报告)一次性打包提交。 服务场景与先决条件 元素 说明 虚拟机 RHEL 8/9 或 Fedora 40,getenforce = Enforcing 软件包 dnf install -y httpd mod_cgi policycoreutils-python-utils selinux-policy-devel setools-console bats 自订目录 站点根 /srv/www/app,备份目录 /srv/backup,CGI 脚本 /srv/www/app/cgi-bin/backup.sh 特殊需求 ① Apache 在 8080 端口监听;② /backup 端点触发 CGI 把整站打包到 /srv/backup;③ 日志写入 /srv/www/logs(而非 /var/log/httpd) 默认策略 只允许 httpd_t 访问 /var/www/html、写 /var/log/httpd、监听 80/443;因此上述改动会产生大量 AVC 拒绝。 Day 1 – 环境初始化脚本 Day 2 — 收集基线 AVC Day 3 — 生成并裁剪策略骨架 步骤 命令 / 说明 生成骨架 sepolicy generate --init /usr/sbin/httpd 精简宏 删除与 dbus、dns、smtp 不相关宏,仅保留 file/dir/port 权限 指定自订端口 semanage port -a -t http_port_t -p tcp 8080 编译加载 make -f /usr/share/selinux/devel/Makefile && semodule -i httpd_custom.pp 重试请求 发现 DocumentRoot 与日志目录仍被拒绝 报告: 记录删除的宏、audit2allow -w -a 输出剩余拒绝原因。 Day 4 — 标签与布尔量 Day 4+ — 加固与静态审计 在 “加固与静态审计” 阶段,把还未收敛的 AVC 拒绝转化为显式放行、静默阻断或彻底消除,并用静态工具验证策略没有“多给一分”的权限。 当 httpd_t 在带 httpd_sys_rw_content_t 目录里新建文件时,内核把对象直接标成 httpd_backup_t。随后在 .fc 把 /srv/backup(/.*)? 映射到 httpd_backup_t 并 restorecon -Rv /srv/backup 使之生效。 Day 5 — 自动化验证 & 打包 通过 Apache 场景的五日迭代,分析 AVC、生成最小策略、精细标签/布尔量、静态审计、自动化回归,最终获得一套可复用的 httpd 自定义安全策略,并深入理解 SELinux 在生产服务中的落地流程。 推荐阅读 《Writing a Custom SELinux Policy》— RHEL 8/9 官方文档 Quick Start KB:自定义策略速查 Apache httpd SELinux 配置案例 非标准端口与 SELinux 端口/目录 AVC 排错示例 文件标签与 DocumentRoot 变更实践 SELinux Boolean 管理博文 Bugzilla 案例分析:HTTPD 读文件被拒 PDF《SELinux Configuration for Apache》 audit2allow / audit2why 调试流程
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值