다른 사용자가 쓰기 권한을 가지고 있는 파일을 사용자가 변경하는 것을 방지하는 방법은 무엇입니까?

다른 사용자가 쓰기 권한을 가지고 있는 파일을 사용자가 변경하는 것을 방지하는 방법은 무엇입니까?

최근 이상한 상황이 발생했습니다. User1은 User2에 속하고 User2 그룹에 있는 디렉터리의 파일을 변경할 수 있어야 합니다. 이 편집을 용이하게 하려면 디렉터리 구조의 권한을 757로 반복적으로 수정하십시오. 그러면 목록은 아래와 같습니다.

drwxr-xrwx 3 user2 user2 4096 Nov 19 19:41 .
drwxr-xr-x 3 user2 user2 4096 Nov 19 19:41 ..
drwxr-xrwx 3 user2 user2 4096 Nov 19 19:41 directory1
drwxr-xrwx 3 user2 user2 4096 Nov 19 19:41 directory2
drwxr-xrwx 3 user2 user2 4096 Nov 19 19:41 directory3
-rwxr-xrwx 3 user2 user2   42 Nov 19 19:41 file1

사용자 1은 파일을 읽을 수 있지만 새 파일을 만들거나 기존 파일을 편집/복사하려는 시도는 실패합니다. 오류는 다음과 유사합니다.

$ touch file1
touch: cannot touch 'file1': Permission denied

사용자 1은 드라이브가 쓰기 금지되어 있다고 생각하고 사용자 2에게 파일을 변경하도록 요청합니다. 사용자 2는 아무런 문제 없이 이 작업을 수행할 수 있었으며 이는 드라이브가 쓰기 금지되어 있음을 나타냅니다.

df및 을 살펴보면 /etc/fstab파일이 로컬로 마운트된 하드 드라이브에 있는 것으로 보입니다.

기타 정보. User1은 User2 그룹에 속합니다. (처음에는 그렇지 않다고 생각했습니다.) 파일에 잠금이 없습니다. SE Linux가 비활성화된 것 같습니다. (표시된 바와 같이 sestatus) 일반적으로 누구나 쓸 수 있도록 전체 디렉토리를 설정하고 싶지 않을 것이라고 생각하지만 이것은 특별한 경우입니다. 별도의 컴퓨터에서 거의 동일한 빌드가 작동합니다. getfacl의 출력은 파일과 디렉터리에 대해 동일합니다.

# file: .
# owner: user
# group: user
user::rwx
group::r-x
other::rwx

이 보호의 원인은 무엇이며 이를 취소하는 방법은 무엇입니까?

답변1

원래 사실 중 하나가 잘못되었기 때문에 이 질문을 삭제하려고 했습니다. 나는 명백한 답변을 놓쳤기 때문에 나중에 비슷한 문제가 발생할 수 있는 사람들을 돕기 위해 이 문제에 대한 가능한 원인과 해결책을 게시하기 위해 덜 명확한 대안을 찾기로 결정했습니다.

1) 이 문제가 발생하고 user1이 user2에 속하지 않는다고 생각되면 user1에게 그룹을 확인하거나 passwd 파일을 확인하여 직접 확인하십시오. 이 경우 user1이 다음 /etc/passwd항목으로 잘못 추가되었으며 에는 항목이 없습니다 /etc/group.

user1:x:1001:1000:User1:/home/user1:/bin/bash

그리고 사용자 2는 다음과 같습니다/etc/passwd

user2:x:1000:1000:User2:/home/user2:/bin/bash

그리고

user2:x:1000:user2 user1

그룹 권한은 다른 권한보다 우선하므로 쓰기가 허용되지 않습니다. 그룹 권한을 변경하거나 user2 그룹에서 user1을 제거하면 이 문제를 해결할 수 있습니다. 이것은 원래의 가설이 맞다면 아마도 많은 사람들이 얻을 수 있는 간단한 대답이다. 작동하지 않는 것이 있으면 직접 확인해야 한다는 점을 기억하세요.

2) 덜 명확한 대답은 파일 액세스 제어 목록(ACL)을 사용하는 것입니다. 해당 사용자에게 특정 권한이 할당된 경우 이러한 권한은 일반 권한보다 우선합니다. ACL을 사용해 본 사람이라면 누구나 이 사실을 알고 있을 것입니다. 그러나 많은 사람들은 ACL이 존재한다는 사실조차 모르는 것 같습니다. 다음은 사용자를 차단하는 방법의 예입니다.

$ sudo setfacl -m u:user:r-x .
$ ls -la
total 0
drwxr-xrwx+  2 root root  60 Nov 21 20:46 .
drwxrwxrwt. 12 root root 300 Nov 21 20:45 ..
-rw-rw-r--.  1 user user   0 Nov 21 20:46 dog
$ touch cat
touch: cannot touch ‘cat’: Permission denied
$ getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:user:r-x
group::r-x
mask::r-x
other::rwx

이 작업을 실행 취소하려면

$ sudo setfacl -b .
$ sudo getfacl .
# file: .
# owner: root
# group: root
user::rwx
group::r-x
other::rwx

$ touch cat
$ ls -la cat
-rw-rw-r--. 1 user user 0 Nov 21 20:51 cat

궁극적으로 나를 돌아가서 재검증하게 만든 그룹에 요청한 @andcoz와 이전에 본 적이 없거나 사용한 적이 없는 "getacl"을 언급한 @Rianto Wahyudi에게 감사드립니다.

관련 정보