수퍼유저가 읽기 전용 파일에 쓸 수 있나요?

수퍼유저가 읽기 전용 파일에 쓸 수 있나요?

나는 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

이것은 버그입니까 아니면 예상되는 동작입니까? 이것이 모든 Unix 및 Linux에서 작동한다고 안전하게 가정할 수 있습니까?

답변1

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이 파일을 변경할 수 없습니다.

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

답변2

예, 이는 정상입니다. 루트는 루트이기 때문에 읽기/쓰기에 제한이 없습니다(드물게 예외 있음).

관련 정보