그룹 소유권이 있는 디렉터리에서 파일을 생성/터치하려고 하면 "권한이 거부되었습니다"라는 메시지가 나타납니다.
/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
거부 모드에서 실행할 수 있습니다.