Bash
為什麼不設置可執行位時root不能執行?
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!