그룹 구성원은 reiserfs 및 확장 ACL을 사용하여 그룹 쓰기 가능 파일에 쓸 수 없습니다.

그룹 구성원은 reiserfs 및 확장 ACL을 사용하여 그룹 쓰기 가능 파일에 쓸 수 없습니다.

사용자 virust공유 그룹은 rust특정 파일을 공유하려고 합니다.

rust$ ls -l myfile 
-rw-rw-r-- 1 vi rust 0 May 30 03:48 myfile
rust$ stat myfile  | grep Gid
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      vi)   Gid: ( 1057/    rust)
rust$ id
uid=1048(rust) gid=1057(rust) groups=1057(rust),...

rust$ cat myfile
rust$ touch myfile 
touch: cannot touch ‘myfile’: Permission denied
rust $ dd of=myfile 
dd: failed to open ‘myfile’: Permission denied

vi$ id
uid=1000(vi) gid=1000(vi) groups=1000(vi),{many unrelated groups skipped},1057(rust),{many unrelated groups skipped}
vi$ touch myfile
vi$ 

g+w에도 불구하고 "vi" 사용자만 파일에 대한 쓰기 권한을 갖습니다.

root# chown rust myfile
rust$ ls -l myfile 
-rw-rw-r-- 1 rust rust 0 May 30 03:51 myfile
vi$ touch myfile
rust$ chmod g-w myfile
vi$ touch myfile 
touch: cannot touch ‘myfile’: Permission denied

vi쓰기 가능한 rust파일은 g+w 비트에 따라 다릅니다(예외).

그룹 쓰기 가능 비트가 한 방향으로만 작동하는 이유는 무엇입니까?

모드에서도 파일을 사용할 수 없습니다 a+w. 세 번째 사용자는 파일에 쓸 수 있지만 a+w...

getfacl myfile반품 Invalid argument.

이 파일은 로컬 reiserfs에 있습니다.

id vi그리고 각 사용자의 쉘에서 관련되지 않은 그룹의 순서를 id rust일치시킵니다 .id


또 하나의 실험:

vi$ chmod a+w myfile
vi$ stat myfile
  File: ‘myfile’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fb02h/64258d    Inode: 12618147    Links: 1
Access: (0666/-rw-rw-rw-)  Uid: ( 1000/      vi)   Gid: ( 1057/    rust)
Access: 2016-05-30 18:49:20.000000000 +0300
Modify: 2016-05-30 20:48:23.000000000 +0300
Change: 2016-05-30 20:48:23.000000000 +0300
 Birth: -
뿌리#다이빙-J -u 녹슨 -g 녹슨 -- id
uid=1048(러스티) gid=1057(러스티) 그룹=1057(러스티)
루트# 다이브 -J -u 녹 -g 녹 -- dd of=/home/vi/home/rust/myfile
dd: '/home/vi/home/rust/myfile'을 열 수 없습니다: 권한이 거부되었습니다.

루트# 다이빙 -J -u 녹 -g 99999 -- id
uid=1048(rust) gid=99999 그룹=99999
루트# dive -J -u Rust -g 99999 -- dd of=/home/vi/home/rust/myfile
식품의약품안전청
0+1 레코드
0+1 레코드 출력
9바이트(9B), 1.14971초, 0.0kB/초 복사

미스터리. grsecurity 패치가 문제가 될까요?


다음 실험:

root# stat /home/vi/home/rust/myfile
  File: ‘/home/vi/home/rust/myfile’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fb02h/64258d    Inode: 13848412    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (99997/ UNKNOWN)   Gid: (99998/ UNKNOWN)
Access: 2016-05-31 00:39:24.000000000 +0300
Modify: 2016-05-31 00:39:24.000000000 +0300
Change: 2016-05-31 00:39:24.000000000 +0300
 Birth: -
root# getfacl /home/vi/home/rust/myfile
getfacl: /home/vi/home/rust/myfile: Invalid argument
root# for i in {0..1099}; do if dived -J -u $i -g 99998 -- touch /home/vi/home/rust/myfile 2> /dev/null; then echo $i; fi; done
0
1000
root# 
root# 
root# mount -o remount,noacl /home
root# 
root# for i in {0..1099}; do if dived -J -u $i -g 99998 -- touch /home/vi/home/rust/myfile 2> /dev/null; then echo $i; fi; done | head
0
1
2
3
4
5
6
7
8
9
(and so on, basically it works)
root# mount -o remount,acl /home
root# 
root# for i in {0..1099}; do if dived -J -u $i -g 99998 -- touch /home/vi/home/rust/myfile 2> /dev/null; then echo $i; fi; done | head
0
1000
root# 

getfacl(또는 커널 부분) 문제가 있는 것 같습니다 . ACL은 유효하지만 관리할 수 없습니다.

답변1

문제는 Linux에서 ReiserFS가 무시된다는 것입니다.https://bbs.archlinux.org/viewtopic.php?id=197628

커널 4.4.x의 reiserfs에서 ACL이 손상되었습니다(잘못된 매개변수 오류). 4.3.x는 나에게 잘 작동합니다...

4.4 이후에는 커널에 들어가는 방법을 확인하지 않았습니다.

파일 시스템에서 손상된 ACL을 제거하려면 <4.4 커널로 재부팅해야 합니다.

관련 정보