Permissions

如何檢查使用者是否可以訪問給定文件?

  • June 23, 2020

*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

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