组中用户的权限被拒绝(组具有目录写入权限)

组中用户的权限被拒绝(组具有目录写入权限)

当我尝试在具有组所有权权限的目录中创建/触摸文件时,我收到“权限被拒绝”的消息。

触摸/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=257openat每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在拒绝模式下运行。

相关内容