실행 가능 비트가 설정되지 않은 경우 루트를 실행할 수 없는 이유는 무엇입니까?

실행 가능 비트가 설정되지 않은 경우 루트를 실행할 수 없는 이유는 무엇입니까?

root사용자할 수 있는write권한이 설정되지 않은 경우에도 파일에 씁니다 .

root사용자할 수 있는read권한이 설정되지 않은 경우에도 파일을 읽으십시오 .

root사용자할 수 있는 cdexecute권한이 설정되지 않은 경우에도 디렉토리를 입력하십시오 .

root사용자할 수 없다execute파일 권한이 설정되지 않은 경우 파일을 실행합니다.

왜?

user$ echo '#!'$(which bash) > file
user$ chmod 000 file
user$ ls -l file
---------- 1 user user 12 Jul 17 11:11 file
user$ cat file                      # Normal user cannot read
cat: file: Permission denied
user$ su
root$ echo 'echo hello' >> file     # root can write
root$ cat file                      # root can read
#!/bin/bash
echo hello
root$ ./file                        # root cannot execute
bash: ./file: Permission denied

답변1

즉, 실행 비트가 설정되지 않은 경우 특수한 것으로 간주되기 때문입니다.별말씀을요, 해당 파일은 실행 파일이 아닌 것으로 간주되어 실행할 수 없습니다.

그러나 루트는 실행 비트가 설정되어 있어도 이를 실행할 수 있고 실행할 것입니다.

관찰하다:

caleburn: ~/ >cat hello.sh
#!/bin/sh

echo "Hello!"

caleburn: ~/ >chmod 000 hello.sh
caleburn: ~/ >./hello.sh
-bash: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
sudo: ./hello.sh: command not found

caleburn: ~/ >chmod 100 hello.sh
caleburn: ~/ >./hello.sh
/bin/sh: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
Hello!

답변2

과거에는 시스템 관리 도구에 /etc, , /etc/restore, 등이 포함되었습니다. /etc/rrestores를 로 설정하고 실행 하면 /etc/init어떤 일이 일어날지 상상해 보세요 ./etc/haltrootPATH/etc:/binrootpasswd

제대로 작동하지 않습니다.

설상가상으로 과거에는 바이너리 실행 파일에 매직 헤더가 없었기 때문에 바이너리가 실행 가능한지 확인하는 것은 권한 비트를 확인하는 것 외에는 사실상 불가능했습니다. 따라서 exec실제로 파일이 아니고(디렉터리 등이 아닌) 적어도 하나의 실행 비트가 설정되어 있지 않은 한 파일을 유효한 대상이 아닌 것으로 만듭니다 .

*확인은 사용자 모드 기능인 execvp에서 수행할 수 있습니다.

이론적으로는 무엇이든 쉘 스크립트가 될 수 있으므로 여전히 유용한 검사입니다. 그런데 왜 제거합니까?

관련 정보