用戶與權限
操作範例
- UNIX 系統如何將同一部機器上的硬碟儲存空間分給很多使用者用,
又讓每個人保有自己的檔案, 不被別人看到甚至修改? 每個檔案的主人
(owner) 可以用 chmod 命令來開放或關閉該檔案的權限給別人.
先看看自己是誰:
whoami
-
看看系統內所有使用者的家:
cd ~/.. ; ls -l | less
第三欄與第四欄就是擁有該檔案的主人與群 (group). 第一欄最左邊的字母代表檔案形態; 剩下 9 個字元看成 9 個 bits, 切成三組:rwx rwx rwx 主人 群 他人
r, w, x 分別代表開放 讀, 寫, 執行 的權限; - 表該權限不開放. 這三組分別代表開放給 主人自己 (user), 同一群的人 (group), 其他所有人 (others) 的各項 rwx 權限. - 學校的系統比較少「根據任務編組的 group」, 所以一般使用者擁有的檔案, 開放給 group 的權限與開放給 others 的權限一樣. 如果不是私密文件, 通常開放 rw 給自己; 開放 r 給其他所有人. 普通私密的文件只開放 rw 給自己. 高度機密的文件還要用其他方式加密, 以免系統管理員看到. 有時候為避免檔案被自己不小心刪除, 只開放 r 給自己. 至於 x 權限, 等一下解釋.
- 查看自己的 uid 及自己所屬的 primary group 的 gid:
grep "^你的帳號名稱:" /etc/passwd
所列出來的資訊以 : 分隔欄位, 其中第三四兩個欄位就是自己的 uid 與所屬 primary group 的 gid. 詳見 passwd(5) 與 group(5) - (在 penguin 帳號下) 查看 postgres
使用者的家開放了那些權限給大家:
ls -l ~/.. | grep postgres
這奇怪的寫法是因為如果用 ls -l ~postgres 會看到 postgres 家裡面的檔案的細節; 又因為系統管理者不一定都把所有使用者的家放在 /home 下, 所以用 ~/.. (其實用ls -ld ~postgres
也可以) - (假設剛才看到的 permission 設定是 rwx--x--x) 試著要看 postgres
的家裡面有什麼:
ls -l ~postgres
結果出現 Permission denied 錯誤訊息. 但是卻可以進入該目錄:cd ~postgres
甚至可以印出該目錄下的檔案 -- 只要你知道那裡面有什麼檔案可以讀:cat ~postgres/.login
-
使用 chmod 開放/關閉 檔案/目錄 權限的語法一 (增/減權限):
chmod u+x ... 允許自己可以執行 ... 檔案/進入 ... 目錄 chmod og-r ... 不許工作群及他人讀 ... 檔案/目錄 chmod a-w ... 不允許任何人寫入 ... 檔案/目錄
語法二 (全面重新設定權限):chmod 777 ... 允許所有人對 ... 做任何動作 chmod 711 ... 允許自己對 ... 做任何動作; 工作群及他人只能執行/進入 chmod 644 ... 允許自己可以讀寫; 工作群及他人都只能讀, 而不能寫或執行
重要選項: -R 遞迴進入子目錄, 孫目錄, ... -
重要觀念: 把目錄想成是一個檔案,
裡面記載著這個目錄底下所有檔案與子目錄的名稱. 請與隔壁的同學
B 共同練習 (要接近同步練習, 改變任何檔案或目錄的權限之前,
要停下來先等 B 做到相對應的步驟.):
- 先把自己的家改成: 別人只能進入 (即執行) 而不能讀.
- 在自己家裡建立一個目錄叫做 pub, 設定成所有人都可以 rwx. 再在 pub 下建立一個檔案叫做 ro. (內定 permission 應為 rw-r--r--)
- 進入 B 的家 (應該沒有問題, 可用 pwd 看目前目錄)
- 試著看看 B 的家裡有什麼 (應該出現 permission denied)
- 進入 B 的 pub 子目錄並看看裡面有什麼.
- 建立一個檔案叫做 ext (成功地存檔!)
- 試著修改 B 的 ro 檔: 結果發現可讀不可寫
- 試著把 B 的 ro 檔改名為 junk: 居然成功! 接下來把 junk 檔刪除, 居然也成功!
- 一步跳回自己家裡的 pub 子目錄:
cd ~/pub
並關閉工作群與其他人對 pub 子目錄的寫的權限:chmod og-w .
- 看一下剛才 B 在我家的 pub 下建立的 ext 檔的內容.
- 跳回 B 的 pub 目錄下:
cd -
試著修改我放在 B 的 pub 下的 ext 檔的內容, 居然還是可以修改! 並關閉工作群與其他人對我的 ext 檔的讀的權限, 也成功了! 再試著刪除我的 ext 檔, 結果失敗. - 再跳回自己家裡的 pub 子目錄:
cd -
再試一次讀 B 在我家的 pub 下建立的 ext 檔的內容, 結果出現 permission denied. 但是卻可以把這個檔刪除掉!
- 特殊權限一: 請見
ls -l /usr/bin/passwd
這個 "s" 的 permission flag 表示執行該程式的人 (real user) 暫時可以用程式擁有者的身份做事 (effective user) 這是因為 passwd 命令必須去修改系統的 /etc/passwd 或 /etc/shadow 檔案, 而這些檔案的擁有者是 root. 像 passwd 這種把 "檔案擁有者自己的執行權限欄位" 設定成 s 的程式稱為 setuid 或 suid. - 特殊權限二: 請見
ls -lL / | grep tmp
(其中 ls 的 -L 選項表示在列出 symbolic link 的時候, 你想看到 symbolic link 所指到的東西的屬性, 而不想看 symbolic link 本身的屬性. 把 L 拿掉, 再試一次看看) /tmp 這個目錄有 "t" 的 permission flag, 表示大家都可以寫入, 但是任何人不得刪除他人的檔案. - 每次建立新目錄時, 系統自動將該目錄的權限設定為 ...? 視 umask 的值而定. 請以 umask 命令檢視你的內定值, 應該是 (八進位的) 022. 把 umask 的值看成 9 個 bits, 有值的 bit 會阻礙該權限, 所以內定建立目錄時, 自己可以 rwx, 工作群和他人都只能 r-x. 詳見 tcsh 或 bash 的手冊 (Q: 為什麼我們知道要看 shell 的手冊, 而不是看 umask 的手冊?) Q: 如何讓你在產生目錄時, 內定值為: 工作群和他人皆不可 rwx? 這個命令要放在那個檔案裡面?
- umask 對新建檔案的影響: 一般新檔本來就沒有任何 x 的權限, 因此 umask 只對新檔的 rw 有影響.
- Q: 下
find ~ckhung/public_html -type d
看看使用者 ckhung 家的 public_html 底下有那些子目錄, 孫目錄... 再用 output redirection 把結果存檔到 ~/a. 結果發現螢幕上還是有一兩列輸出, 這是怎麼回事? 印出來這些資訊為什麼沒有被 redirect? 而你的 ~/a 當中有沒有錯誤訊息? 出問題的目錄沒有開放什麼權限? 要如何驗証你的推測? - 下列指令可以找出家目錄 (及底下所有的子目錄孫目錄)
裡面, 所有 「對群組或對別人關閉讀取權限」 的檔案:
find ~ -type f -not -perm -044
。 如果要找 「對群組或對別人開放讀取權限」 的檔案, 則可以:find ~ -type f -perm +044
名詞解釋
- user 使用者: 一部機器上的各種資源 (CPU time, 儲存空間, ...) 可以供許多人使用. 每個 user 有自己的帳號 (account); 每個使用者都屬於某一個 primary group.
- uid (user id): 使用者的數字代號.
- gid (group id): 使用者群的數字代號.
- (file/directory) owner (檔案/目錄的) 擁有者: 每個檔案/目錄都有其 owner (也就是系統內的某個 user). Owner 除了可以使用該檔案/目錄外, 還可以決定要把那些使用權限開放給系統內的其他人. 例如每個人都是自己的 home directory 的 owner.
-
permission 權限: 上述的使用權限包含了三種: read 讀取, write 寫入,
execute 執行. 用 ls -l 命令可以得知各檔案/目錄的 owner 是誰,
並得知該 owner 把該檔案的那些權限開放出來給大家使用.
一般使用者通常只擁有自己家裡 (home directory) 的檔案與目錄,
因此可以自由地在自己家裡建立檔案,
但是不能在系統內其他地方建立檔案, 甚至不可以進入 (cd)
他人的目錄或讀取他人的檔案. 注意: 對目錄而言:
- "讀" 的權限是指 "可否列出本目錄下的檔案名稱大小等相關資料"
- "寫" 的權限是指 "可否在本目錄下建立/刪除檔案, 及更改本目錄下的檔名"
- "執行" 的權限是指 "可否更換工作目錄至本目錄底下"
- root (也叫做 super user): 系統內權限最大的使用者. 他有權限可以讀取, 寫入, 執行任何檔案, 也可以進入任何目錄.
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/gnu/permission.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。