如何尋找具有特定使用者特定權限的檔案?

如何尋找具有特定使用者特定權限的檔案?

如何取得特定使用者俱有「讀寫」權限的所有檔案的清單。

例如,當我進入 Mac 桌面時,右鍵單擊文件“A”,然後“獲取資訊”,然後在底部我有“共享和權限”,我可以在其中添加自定義用戶,例如“popo”例如,然後指定他可以「讀取和寫入」該檔案。

然後我想使用命令列來獲取POPO可以讀寫的所有文件,並且只有這些(我想在上面的範例中獲取“A”)。

我所有的研究目前引導我的是:

find /Users/Me/Desktop -user popo -perm 777

但我什麼也沒得到..

上述有什麼問題find,我該如何處理?

答案1

您需要搜尋每個人都可以讀寫的檔案、或可以透過使用者的 uid 讀寫的檔案、或可以被使用者所屬的所有群組讀寫的檔案。但實際情況比這要複雜一些。正如所指出的這裡作者:Stephane Chazelas,如果檔案由使用者擁有,則僅擁有者權限計數,如果檔案由使用者所屬的群組擁有,則僅群組權限計數。

因此,我們需要檢查“所有者=RW或(不是所有者和群組=rw)或(不是所有者且不是群組和其他=rw)”

您可以使用 取得使用者所屬的群組 gid 的清單id -G。這可用於建立具有標準 shell 命令替換的 find 命令列。

我最初的答案是一句台詞,但這項工作太複雜了,無法用一句台詞來完成。這是一個可以完成這項工作的 bash shell 腳本。

#! /bin/bash

U="$1"      # username to do perm search on - e.g. popo
TOPDIR="$2" # starting directory for search - e.g. /Users/Me/Desktop

# permissions to search for - defaults to "rw"
PERMS=${3:-rw}

# permission bits "style".  "/"=ANY or "-"=ALL. defaults to / 
#
# see find(1) and search for '-perm -mode' or '-perm /mode' for 
# details on how this works.
PSTYLE=${4:-/}

# construct a find expression specifying all groups that the user
# is a member of
GIDS="$(for i in $(id -G "$U"); do echo -n " -gid $i -o "; done)"
GIDS=$(echo "$GIDS" | sed -e 's/ -o $//')    # strip trailing " -o "

find "$TOPDIR" \
   \( -user "$U" -perm ${PSTYLE}u=$PERMS \) \
   -o \( -not -user "$U" -a \( $GIDS \) -perm ${PSTYLE}g=$PERMS \) \
   -o \( -not -user "$U" -not \( $GIDS \) -perm ${PSTYLE}o=$PERMS \) 

該腳本必須以 root 身分執行。其他使用者可能沒有所需的權限來查看 popo 可以查看的所有目錄。

id注意:我已經使用GNU Coreutils 和findGNU findutils的最新版本在 Debian Linux 系統上對此進行了測試。id和的 Mac 實作find可能有所不同,我目前沒有可用的 Mac 來測試。如果不同,請檢查 Mac 手冊頁中的idfind- 可能需要修改以適應 Mac 的內容是 的-G-u選項id以及-perm /的或“-perm -”選項find

答案2

這是因為-user選項在指定使用者(如果文件擁有者)所在的位置搜尋文件,而這不是您的情況。

看起來最簡單的方法是在 popo 用戶下執行命令:

find /Users/Me/Desktop -readable

答案3

sudo find . -print0 | 
  sudo -u popo perl -Mfiletest=access -l -0ne '
    print if -r && -w'

幾乎相同問題的答案為什麼檢查權限通常不起作用。

相關內容