/tmp 디렉토리에서 이상한 동작이 발생합니다. 사용자는 파일 읽기/쓰기 권한이 있는 그룹에 속해 있지만 그렇게 할 수는 없습니다.
이 예에서는 /tmp/test.txt
user 로 새 파일을 만듭니다 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
다른 디렉터리로 이동하면 모든 것이 예상대로 작동합니다.
/tmp
tmpfs는 다음 옵션을 사용하여 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
/tmp
max
root
/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에서 수행되었습니다.이 최신 커밋.