当我尝试在具有组所有权权限的目录中创建/触摸文件时,我收到“权限被拒绝”的消息。
触摸/data/www/acoder.txt
[acoder@box]$ touch /data/www/acoder.txt
touch: cannot touch '/data/www/acoder.txt': Permission denied
猫/etc/组
webdev:x:1001:acoder
id
显示我在 webdev 组中:
[acoder@box ~]$ id
uid=1000(acoder) gid=1000(acoder) groups=1000(acoder),10(wheel),1002(webdev) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
ll -lZ /数据/
drwxr-xr-x. 3 apache webdev system_u:object_r:httpd_sys_rw_content_t:s0 4096 Mar 20 15:39 www
纳美-olm /数据/www
[acoder@box ~]$ namei -olm /data/www
f: /data/www
dr-xr-xr-x root root /
drwxr-xr-x root root data
drwxrwx--- apache webdev www
如果 acoder 位于 group 中webdev
,并且webdev
具有包含目录的组所有权(包括写入权限),那么还有什么可能触发 Permission Denied 错误?
编辑
找到对 auseach 的引用touch
:
时间->2023年3月21日星期二 09:21:15
节点=box.example.com 类型=PROCTITLE msg=audit(1679404875.375:8966252): proctitle=746F756368002F646174612F7777772F6164726961322E747874
node=box.example.com type=PATH msg=audit(1679404875.375:8966252): item=0 name="/data/www/" inode=128 dev=fd:0e mode=040755 ouid=48 ogid=1002 rdev= 00:00 obj=system_u:object_r:httpd_sys_rw_content_t:s0 nametype=父 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
节点=box.example.com 类型=CWD msg=audit(1679404875.375:8966252): cwd="/home/acoder"
节点=box.example.com 类型=SYSCALL msg=audit(1679404875.375:8966252): arch=c000003e syscall=257 成功=不退出=-13 a0=ffffff9c a1=7fff2ee2e64b a2=941 a3=1b6 items=1 ppid=602556 pid=602594 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts25 ses=1 comm="touch" exe="/usr/bin/touch “ subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="访问"
如果用户 acoder 尝试将文件上传到,也会收到错误/data/www/
-1sftp
时间->2023年3月21日星期二 09:30:14
节点=box.example.com 类型=PROCTITLE msg=audit(1679405414.563:8966285): proctitle="/usr/libexec/openssh/sftp-server"
node=box.example.com type=PATH msg=audit(1679405414.563:8966285): item=1 name="/data/www/" inode=536875051 dev=fd:0e mode=040770 ouid=48 ogid=1002 rdev= 00:00 obj=unconfined_u:object_r:httpd_sys_rw_content_t:s0 nametype=父 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
节点=box.example.com 类型=PATH msg=audit(1679405414.563:8966285): item=0 name="/data/www/acoder.php" inode=626000347 dev=fd:0e mode=0100660 ouid=48 ogid= 1002 rdev=00:00 obj=unconfined_u:object_r:httpd_sys_rw_content_t:s0 nametype=正常 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
节点=box.example.com 类型=CWD msg=audit(1679405414.563:8966285): cwd="/home/acoder"
节点=box.example.com 类型=SYSCALL msg=audit(1679405414.563:8966285): arch=c000003e syscall=257 成功=不退出=-1 a0=ffffff9c a1=561c6002f6e0 a2=241 a3=1b6 items=2 ppid=602648 pid=602649 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(无) ses=3674 comm="sftp 服务器" exe="/usr /libexec/openssh/sftp-server" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="access"
节点=box.example.com 类型=FANOTIFY msg=audit(1679405414.563:8966285): resp=2
[根@盒子]#
在这两种情况下,我都看到搜索将上下文显示为
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
但文件系统的实际上下文是
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
根据RHEL 文档,
主题=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
subj字段记录SELinux上下文在执行时对分析的进程进行标记。
我对这到底意味着什么感到困惑。 SELinux 读取的上下文与我所看到的不同吗ll -lZ
?
两个ausearch结果参考syscall=257
,openat
每257 ausyscall
。
audit2allow
并不建议相关的政策变化:
[root@box]# ausearch -c 'touch' --raw | audit2allow -M my-touch
Nothing to do
[root@box]#
编辑 2(2023 年 3 月 24 日)
相信我已经将问题缩小到法波利西德。如果我停止此服务,我可以通过 sftp 传输该文件。但是它必须正在运行,所以我需要学习如何配置它以允许访问 sftp(可能还有我尚未了解的其他进程)
还有更多想法吗?
答案1
这最终被fapolicyd
否认。
不确定这是否被认为是最佳实践,但我通过以下方式解决了这个问题
添加新规则:
# fapolicyd-cli --file add /data/www/nbsprod/public_html/ --trust-file nbsprod_pub_html
更新规则fapolicyd-cli
# fapolicyd-cli --update
验证是否fapolicyd
设置为在强制模式下运行(非宽松模式)
# vi /etc/fapolicyd/fapolicyd.conf
...
permissive = 0
...
重新开始fapolicyd
# fapolicyd-cli --update
最终用户现在可以将脚本上传到上面指定的 www 目录并fapolicyd
在拒绝模式下运行。