Bash

為什麼不設置可執行位時root不能執行?

  • April 29, 2017

root即使沒有設置權限,使用者也可以寫入文件。write

root即使沒有設置權限,使用者也可以讀取文件。read

root即使沒有設置權限,使用者也可以進入目錄。 cd``execute

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

簡而言之,因為執行位被認為是特殊的;如果根本沒有設置*,*則該文件被認為不是執行檔,因此無法執行。

但是,即使設置了一個執行位,root 也可以並且將執行它。

觀察:

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!

引用自:https://unix.stackexchange.com/questions/43263