AI 開發權限管理

你以為的唯讀指令,可能正在偷偷改你的檔案

權限的本質不是危不危險,而是讀還是寫:純讀取的指令永久允許,會改變專案狀態的停下來確認,rm 與 git push --force 這種不可復原的直接拒絕。麻煩的是有些指令長得像唯讀其實會寫,例如 sed 加 -i 會直接改寫檔案,find 能掛 -delete 與 -exec;而且權限規則比對的是指令長相不是行為,它是降低誤觸的護欄,不是絕對保險。
你以為的唯讀指令,可能正在偷偷改你的檔案:文章重點卡

你以為的唯讀指令,可能正在偷偷改你的檔案

你將學到什麼

判斷標準只有一個

這個指令會不會改變專案的狀態?會的就停,不會的就放。

偽唯讀陷阱

sed 加 -i 直接改寫檔案,find 能掛 -delete 刪檔、-exec 跑任意命令。

三分類

純讀取永久允許;會改狀態停下確認;rm 與強制推送直接拒絕。

規則的極限

前綴比對的是指令長相,cat a > b 的重導向寫入不一定攔得到。

你以為的「唯讀指令」,可能正在偷偷改你的檔案!很多人裝好 Claude Code 第一件事,就是被無止盡的 Approve 彈窗逼瘋,所以就會出現兩種極端:一種是看到什麼都按「允許」,一種是乾脆 bypass 全開。前者很煩,後者很危險。

所以呀!你真正該做的,是花十分鐘把權限規則設好一次,但在動手設定之前,要先知道以下幾個觀念。

權限的本質,不是「危不危險」,是「讀還是寫」

你要回答的問題只有一個:這個指令會不會改變專案的狀態?

只讀資料的(看檔案、搜尋、列目錄),永久允許,讓它自己跑。會動到檔案、版本歷史、相依套件的(刪、搬、commit、安裝),就要停下來確認。

聽起來很簡單。麻煩的是,有些指令長得像「唯讀」,其實會寫。

① sed 不是唯讀指令

很多人會把 sed 歸進「純讀取」那一類,因為印象中它就是拿來做文字處理、把結果印在畫面上。

但只要加一個參數 -i,例如 sed -i 's/a/b/' file,它就會直接改寫你的檔案,不會問你。

如果你把整個 sed 設成永久允許,等於連 sed -i 一起放行了。這已經是會改變專案狀態的操作。

② find 可以刪檔,也可以跑任意指令

find 本身是查詢工具沒錯。但它能掛 -delete 或 -exec:
find . -name "*.log" -delete 會幫你刪檔。
find . -exec rm {} \; 會對找到的每個檔案執行任意命令。

所以整包永久允許 find,也不安全。

那到底怎麼分?

① 可以放心永久允許(純讀取):
grep、rg、cat、head、tail、ls,這些本質上只讀不寫,讓它自己跑沒問題。

② 要停下來確認(會改變狀態):
git commit、git push、git merge、mv、cp、prisma migrate、npm install、npm uninstall,再加上前面提到的 sed 跟 find。

③ 建議直接拒絕、連問都不要問:
rm(含 rm -rf)跟 git push --force,原因是這兩個不可復原。

如果只設成「詢問」,當你連點十次 Approve 點到生無可戀的時候就很容易手滑放行,而它跟瑞凡一樣回不去的!

npm install 留在「詢問」也是有意義的,因為安裝過程會跑套件自己的 install scripts,有供應鏈風險。

規則擋的是「指令長相」,不是「指令行為」

Claude Code 的權限規則,是用前綴比對指令的「長相」。

評估順序是 deny(拒絕)先看,再看 ask(詢問),最後才是 allow(允許),第一個命中的規則就決定結果,而且 deny 永遠贏過 allow。

但也這代表它判斷的是指令長什麼樣子,不是它實際做了什麼。

舉例來說,cat a > b 用的是 shell 重導向把內容寫進 b,這其實是「寫」的動作,可是你比對 cat 前綴時,它看起來就是個無害的唯讀指令,不一定攔得到。

所以請記住!權限規則是降低誤觸的護欄,不是絕對保險!

喔!這個也要記住!真正關鍵的那道防線不是規則寫得多細,而是你有沒有把 Claude Code 指向正式環境、正式資料庫、或那些刪了就回不來的東西。

護欄是給「萬一」用的,但你有責任不要沒事就站在懸崖邊!

設權限的時候,不要背「哪些指令安全、哪些危險」這種清單

那只會越背越多、越背越錯,改成問自己一個問題就好:這個指令會不會改變狀態?會的就停,不會的就放。

然後永遠假設,最危險的操作不該被「詢問」,而該被「拒絕」。

權限三分類:會不會改變專案狀態?永久允許純讀取,不改狀態grep、rg、cathead、tail、ls讓它自己跑沒問題停下來確認會改變專案狀態git commit、mv、cpnpm install、migratesed、find長得像唯讀也要小心直接拒絕不可復原的操作rm(含 rm -rf)git push --force連問都不要問評估順序:deny 先看,再看 ask,最後 allow,deny 永遠贏
用會不會改變狀態這一個問題分類,不用背指令清單

本文原發表於 2026/06/19 的 Facebook 貼文,原文照登,僅調整網頁排版;文中提及的產品、價格與活動以當時為準。

繼續追蹤酒Ann想看更多 AI 系統、工具實測、品牌方法與生活觀察,歡迎前往 酒Ann 的 Facebook

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

為什麼 rm 要設成拒絕而不是詢問?
因為 rm 含 rm -rf 跟 git push --force 都不可復原;如果只設成詢問,當你連點十次 Approve 點到生無可戀的時候,很容易手滑放行,而它跟瑞凡一樣回不去。
npm install 為什麼建議留在詢問?
因為安裝過程會跑套件自己的 install scripts,有供應鏈風險,所以留在詢問是有意義的。
權限規則的評估順序是什麼?
deny 先看,再看 ask,最後才是 allow,第一個命中的規則就決定結果,而且 deny 永遠贏過 allow;但它判斷的是指令長什麼樣子,不是它實際做了什麼。
把規則設好就安全了嗎?
權限規則是降低誤觸的護欄,不是絕對保險;真正關鍵的防線是你有沒有把 Claude Code 指向正式環境、正式資料庫、或那些刪了就回不來的東西。護欄是給萬一用的,你有責任不要沒事就站在懸崖邊。