Permissions
如何檢查使用者是否可以訪問給定文件?
*nix 使用者權限非常簡單,但是當您必須在到達給定文件之前考慮所有父目錄訪問權限時,事情會變得一團糟。如何檢查使用者是否有足夠的權限?如果不是,那麼哪個目錄拒絕訪問?
例如,假設一個使用者
joe
和文件/long/path/to/file.txt
。即使file.txt
被 chmoded 到 777,joe 仍然必須能夠訪問/long/
,然後/long/path/
再/long/path/to/
之前。我需要的是一種自動檢查的方法。如果joe
沒有訪問權限,我也想知道他在哪裡被拒絕了。也許他可以訪問/long/
,但不能/long/path/
。
要直覺地驗證訪問權限,您可以使用
namei -m /path/to/really/long/directory/with/file/in
這將在垂直列表中輸出路徑中的所有權限。
或者
namei -l /path/to/really/long/directory/with/file/in
列出所有所有者和權限。其他答案解釋瞭如何以程式方式驗證這一點。
您可以使用 bash 來執行此操作。
$ cat check-permissions.sh #!/bin/bash file=$1 # Handle non-absolute paths if ! [[ "$file" == /* ]] ; then path=. fi dirname "$file" | tr '/' $'\n' | while read part ; do path="$path/$part" # Check for execute permissions if ! [[ -x "$path" ]] ; then echo "'$path' is blocking access." fi done if ! [[ -r "$file" ]] ; then echo "'$file' is not readable." fi $ ./check-permissions.sh /long/path/to/file.txt
要為特定使用者檢查這一點,您可以使用
sudo
.sudo -u joe ./check-permissions.sh /long/path/to/file.txt