背景
圖片上傳後到伺服器的磁碟上,落盤後的檔案,歸屬使用者和屬組為應用程式a許可權,比如aaa:aaa,且許可權是600。這個時候應用程式b也想訪問這些圖片,該如何授權。
!!!研發要求,不改動程式碼,運維來實現!!!(無奈表情)(程式碼不想判斷linux還是windows)
思路
1.本人非正規軍,但也遵循使用者許可權最小原則。root先排除。
2.想辦法提高落盤圖片檔案許可權
圖片許可權600改成660
3.修改檔案所屬組
應該要有個圖片專門的屬組,比如imagegroup
只要檔案目錄下的子目錄或者檔案屬組都是imagegroup,屬於這個組的使用者就可以對該圖片進行讀寫
usermod -aG 使用者名稱
-a (append):這個選項告訴 usermod 不要替換使用者的現有附加組,而是將指定的組追加到現有的附加組列表中。
-G (groups):這個選項後面跟著一個逗號分隔的組名列表,用來指定使用者應該屬於哪些附加組。
透過inotifywait實現
指令碼如下:
#!/bin/bash
# 監控的目錄
MONITORED_DIR="/path/to/directory"
sudo groupadd imagegroup
sudo usermod -aG imagegroup aaa
sudo usermod -aG imagegroup bbb
# 列印除錯資訊
echo "開始監控目錄: $MONITORED_DIR"
# 使用 inotifywait 監控目錄,-m 表示保持執行,-r 表示遞迴監控子目錄
inotifywait -m -r -e create,moved_to,close_write --format '%w%f' "$MONITORED_DIR" | while read NEW_FILE
do
# echo "檢測到新檔案或目錄: $NEW_FILE"
# 檢查是否為新檔案或目錄
if [[ -e $NEW_FILE ]]; then
# 修改檔案或目錄的所有者和組為 aaa:imagegroup
chown aaa:imagegroup "$NEW_FILE"
# echo "已修改所有者和組為 aaa:imagegroup: $NEW_FILE"
# 如果是檔案,則設定許可權為 660
if [[ -f $NEW_FILE ]]; then
chmod 660 "$NEW_FILE"
# echo "已設定檔案許可權為 660: $NEW_FILE"
# 如果是目錄,則設定許可權為 770
elif [[ -d $NEW_FILE ]]; then
chmod 770 "$NEW_FILE"
# echo "已設定目錄許可權為 770: $NEW_FILE"
fi
else
echo "無法找到檔案或目錄: $NEW_FILE"
fi
done
建議與意見
有錯誤請批評指正
有更好的辦法還請指點迷津