수퍼 유저가 읽기 전용 파일에 쓸 수 있습니까?


11

나는 FreeBSD에 대한 놀라운 (나를 위해) 권한 행동을 발견했다. 루트가 아닌 사용자 로 작동한다고 가정 해 보겠습니다 . 파일을 작성하고 읽기 전용으로 권한을 설정 한 후 파일에 쓰려고합니다.

$ touch f
$ chmod 400 f
$ ls -l f
-r--------  1 user  wheel  f
$ echo a >> t
t: Permission denied.

여태까지는 그런대로 잘됐다. 이제 루트와 동일하게 파일에 씁니다.

# ls -l f2
-r--------  1 root  wheel  f2
# echo a >> f2
# echo $?
0

버그입니까 아니면 의도 된 동작입니까? 이것이 유닉스와 리눅스에서 제대로 작동한다고 안전하게 추측 할 수 있습니까?


누구든지이 작업 CAP_DAC_OVERRIDE을 수행 할 수 있습니다. 거의 모든 Linux 시스템에서 이것은 루트가 이것을 할 수 있음을 의미하므로 의도적입니다. FreeBSD 부분을 말할 수는 없지만 비슷한 설정이 있다고 생각합니다.
Bratchley

1
루트가 항상 파일에 쓸 수 있어야하는 이유는 전통적인 유닉스 파일 시스템 (ext4, zfs 등)에서 파일 권한이 파일의 일부이기 때문입니다. 따라서 루트가 파일에 쓸 수 없으면 NOBODY는 파일에 쓸 chmod수 없기 때문에 읽기 전용 파일을 다시 쓸 수있게 만들 수 있습니다.
slebetman

1
@slebetman 권한을 업데이트하기 위해 파일에 대한 쓰기 권한이 필요하지 않습니다. touch somefile; chmod 0000 somefile; chmod 0644 somefile일반 사용자로 시도하십시오 .
user253751

@immibis : 당신이 소유 한 것. 루트는 자신이 소유하지 않은 파일에 대한 권한을 변경할 수 있어야합니다
slebetman

@slebetman 예 ...하지만 소유하지 않은 파일에 대한 권한을 변경하는 것이 아니라 쓸 수없는 파일에 대한 권한을 변경하는 것에 대해 이야기했습니다.
user253751

답변:


13

root이런 방식으로 권한을 무시할 수있는 것은 정상입니다 .

또 다른 예는 root읽기 권한이없는 파일을 읽을 수있는 것입니다.

$ echo hello > tst
$ chmod 0 tst
$ ls -l tst
---------- 1 sweh sweh 6 Aug 16 15:46 tst
$ cat tst
cat: tst: Permission denied
$ sudo cat tst
hello

일부 시스템에는 변경 불가능한 파일 개념이 있습니다. 예를 들어 FreeBSD에서 :

# ls -l tst
-rw-r--r--  1 sweh  sweh  6 Aug 16 15:50 tst
# chflags simmutable tst
# echo there >> tst
tst: Operation not permitted.

이제는 root파일에 쓸 수 없습니다. 그러나 물론 플래그를 제거root 할 수 있습니다 .

# chflags nosimmutable tst
# echo there >> tst
# cat tst
hello
there

FreeBSD를 사용하면 한 단계 더 나아가서 플래그를 root제거 하지 못하도록 커널 플래그를 설정할 수 있습니다 .

# chflags simmutable tst
# sysctl kern.securelevel=1
kern.securelevel: -1 -> 1
# chflags nosimmutable tst
chflags: tst: Operation not permitted

이제 아무도이 root파일을 변경할 수 없습니다 .

보안 수준을 낮추려면 시스템을 재부팅해야합니다.


효과적인 보안 조치로 재부팅이 필요한 방법은 무엇입니까? 또한 루트가 루트이고 무엇이든 할 수 있다면 루트가 원하는 루트를 수행하지 못하게하는 이유는 무엇입니까?
고양이

1
안전한 시스템에서 루트는 신과 같지 않습니다 . FreeBSD securelevel은 루트를 덜 신처럼 만들기위한 작은 시도입니다. 시스템 구성에서 Securelevel을 기본값 1로 설정하여 재부팅 후에도 활성 상태를 유지할 수 있습니다. 따라서 콘솔 액세스와 단일 사용자 모드가 필요하며 이는 매우 위변조입니다. SE 주석 필드에는 너무 많은 Unix 보안에 대한 전체 에세이가 있지만 'root has all access'모델에서 더 미묘한 것으로 이동하려고합니다. 가능한 경우 (예 : 보안 수준) 시행하고 그렇지 않은 곳 (부팅 증거, 감사 추적)을 탐지하려고합니다.
Stephen Harris

4
FWIW는 Linux에서 불변 속성을 chattr +i tst설정 합니다.
Ruslan

3

예, 이것은 매우 정상입니다. root는 root이므로 읽기 / 쓰기에 대한 제한이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.