나는 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
예, 이는 정상입니다. 루트는 루트이기 때문에 읽기/쓰기에 제한이 없습니다(드물게 예외 있음).