/tmp에서는 루트에 대한 그룹 권한이 작동하지 않습니다.

/tmp에서는 루트에 대한 그룹 권한이 작동하지 않습니다.

/tmp 디렉토리에서 이상한 동작이 발생합니다. 사용자는 파일 읽기/쓰기 권한이 있는 그룹에 속해 있지만 그렇게 할 수는 없습니다.

이 예에서는 /tmp/test.txtuser 로 새 파일을 만듭니다 max. 777 권한을 부여하고 파일을 그룹에 속하게 했지만 root사용자가 root여전히 편집할 수 없습니다.

su max
touch /tmp/test.txt
chmod 777 /tmp/test.txt

su root
chown max:root /tmp/test.txt

# ls -l /tmp/test.txt 
-rwxrwxrwx 1 max root 0 26. Feb 12:08 test.txt

# echo "foobar" > /tmp/test.txt
bash: /tmp/test.txt: Permission denied

test.txt다른 디렉터리로 이동하면 모든 것이 예상대로 작동합니다.

/tmptmpfs는 다음 옵션을 사용하여 fstab을 통해 설치되었습니다.

tmpfs       /tmp    tmpfs   nodev,nosuid,size=5G    0 0

을 실행하면 ls -l /tmp 폴더는 다음과 같습니다.

drwxrwxrwt  20 root root   640 26. Feb 12:01 tmp/

저는 Arch Linux의 파생 버전인 Manjaro를 실행하고 있습니다.

tmpfs를 마운트할 때 내가 뭔가 잘못했나요?

답변1

당신이 보여주는 동작은 다음에 의해 fs.protected_regular결정되는 Linux 커널 매개 변수에 따라 달라지는 것 같습니다.fs.protected_fifos이번에 제출하세요(내 생각에 버전 4.19에 집계됨) 보안 취약점을 수정합니다.

제출 메시지에서 발췌(강조):

namei: FIFO 및 일반 파일에 대해 제한된 O_CREAT 허용

FIFO를 열 수 없습니다.소유자가 디렉터리와 동일하거나 파일이 O_CREAT 플래그 없이 열린 경우를 제외하고 사용자가 소유하지 않은 고정 디렉터리의 세계 쓰기 가능 일반 파일. 목적은 데이터 스푸핑 공격을 더욱 어렵게 만드는 것입니다. ...

동일한 커밋 메시지는 관련된 CVE(Common Vulnerability and Exposures) 번호 목록도 보고합니다.

따라서 쓰기 액세스 권한이 에 userX부여되거나 root다른 방식으로 부여 /tmp/file되고 이 /tmp디렉터리가 고정 비트가 설정된 전역 쓰기 가능 디렉터리인 경우 다음과 file같은 경우에만 쓰기 위해 열 수 있습니다.

  • userX예, 소유자 file또는
  • file디렉토리는 모두 /tmp동일한 사용자에게 속합니다.

테스트에서 root쓰기 권한이 있지만 파일의 소유자가 아니며 및 ( 각각 ) 과 동일한 소유자 /tmp/test.txt도 없습니다 ./tmp/test.txt/tmpmaxroot

/tmp이 문제는 설치 방법과 전혀 관련이 없는 것 같습니다 .

관련 문서는 다음 위치에 있습니다.문서/sysctl/fs.txt:

보호된 FIFO:

이 보호의 목적은 프로그램이 일반 파일을 생성할 것으로 예상되는 공격자가 제어하는 ​​FIFO에 대한 부주의한 쓰기를 방지하는 것입니다.

...

protected_general:

이 보호는 protected_fifos와 유사하지만 프로그램이 파일을 생성할 것으로 예상되는 일반적인 공격자가 제어하는 ​​파일에 쓰는 것을 방지합니다.

"0"으로 설정하면 일반 파일에 대한 쓰기가 제한되지 않습니다.

"1"로 설정하면 O_CREAT는 디렉터리 소유자가 소유하지 않는 한 우리가 소유하지 않은 누구나 쓸 수 있는 고정 디렉터리의 일반 파일을 열 수 없습니다.

"2"로 설정하면 그룹 쓰기 가능한 고정 디렉터리에서도 작동합니다.

즉, 다음 명령을 사용하여 위의 보호를 비활성화할 수 있습니다.

sysctl fs.protected_regular=0

우리의 가설을 뒷받침하는 몇 가지 테스트:

$ su - root
# sysctl fs.protected_regular
fs.protected_regular = 1
# cd /
# mkdir test
# chmod 1777 test
# su - otheruser
$ echo hello >/test/somefile
$ exit
logout
# cat /test/somefile
hello
# ls -lah test/somefile
-rw-r--r-- 1 otheruser otheruser 6 Feb 26 17:21 test/somefile
# echo root >>test/somefile
-bash: test/somefile: Permission denied
# sysctl fs.protected_regular=0
fs.protected_regular = 0
# echo root >>test/somefile
# cat /test/somefile
hello
root
# sysctl fs.protected_regular=1
fs.protected_regular = 1
# echo root >>test/somefile
-bash: test/somefile: Permission denied
# chmod 0777 /test/
# echo root >>test/somefile
# cat test/somefile 
hello
root
root

fs.protected_hardlinks및 와 달리 fs.protected_symlinks기본적으로 및 는 커널 코드에서 활성화되지 않습니다 fs.protected_regular. 이를 활성화하는 것은 이전 버전과 호환되지 않는 변경 사항입니다.fs.protected_fifos
이 댓글지적), 내가 아는 한 systemd버전 241에서 수행되었습니다.이 최신 커밋.

감사의 말: 감사합니다제이드 BP올바른 방향을 가리키는 데 사용됩니다.논평이 질문에.

관련 정보