그룹의 사용자에 대한 권한이 거부되었습니다(그룹에는 디렉터리 쓰기 권한이 있음).

그룹의 사용자에 대한 권한이 거부되었습니다(그룹에는 디렉터리 쓰기 권한이 있음).

그룹 소유권이 있는 디렉터리에서 파일을 생성/터치하려고 하면 "권한이 거부되었습니다"라는 메시지가 나타납니다.

/data/www/acoder.txt를 터치하세요.

[acoder@box]$ touch /data/www/acoder.txt
touch: cannot touch '/data/www/acoder.txt': Permission denied

고양이/등/그룹

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

nami-olm/data/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가 그룹에 있고 포함 디렉터리에 대한 그룹 소유권(쓰기 권한 포함)을 갖고 있는 경우 webdev권한 webdev거부 오류를 유발할 수 있는 또 다른 요인은 무엇입니까?

편집하다

auseach에 대한 참조를 찾으세요 touch.

시간 -> 2023년 3월 21일 화요일 09:21:15

Node=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 이름 유형=부모 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0

Node=box.example.com type=CWD msg=audit(1679404875.375:8966252): cwd="/home/acoder"

Node=box.example.com 유형=SYSCALL msg=audit(1679404875.375:8966252): arch=c000003e syscall=257 성공=종료 없음=-13 a0=ffffff9c a1=7fff2ee2e64b a2=941 a3=1b6 항목=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/-1 도 수신됩니다.sftp

시간 -> 2023년 3월 21일 화요일 09:30:14

Node=box.example.com type=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 이름 유형=부모 cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0

Node=box.example.com type=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=normal cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0

Node=box.example.com type=CWD msg=audit(1679405414.563:8966285): cwd="/home/acoder"

Node=box.example.com 유형=SYSCALL msg=audit(1679405414.563:8966285): arch=c000003e syscall=257 성공=종료 없음=-1 a0=ffffff9c a1=561c6002f6e0 a2=241 a3=1b6 항목=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"

Node=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거부 모드에서 실행할 수 있습니다.

관련 정보