# Linux chmod、chgrp、chown 權限管理筆記 [TOC] 感謝您點進本篇文章,我是 LukeTseng,近期接觸到 Linux 系統,時常需要面對黑色終端機,有些時候想做到一些操作,卻也不知道那個指令叫什麼,我也沒有好好奠基 Linux 的基礎指令,所以特此製作本篇文章!希望能解決到你我的痛點! 若本篇文章某處有誤,敬請告知,感謝! ## Linux 檔案、目錄權限 Linux 的檔案權限分為三個層級: - 擁有者(Owner/User, u):檔案的所有者。 - 群組(Group, g):與檔案擁有者同群組的使用者。 - 其他人(Others, o):系統上其他所有使用者。 每個層級可以設定三種權限: - r(read, 讀取):數字值為 4,可以查看檔案內容或列出目錄內容。 - w(write, 寫入):數字值為 2,可以修改檔案或在目錄中新增 / 刪除檔案。 - x(execute, 執行):數字值為 1,可以執行檔案或進入目錄。 當在輸入 `ls -l` 時,會列出像以下這些東西: ![image](https://hackmd.io/_uploads/B1m8U4z0xx.png) 其中 `drwxr-xr-x` 就是檔案或目錄的權限,可以分成三個部分來看: ``` d rwx r-x r-x 1 234 567 890 ``` 其中第一個欄位是檔案類型,有以下這幾種檔案類型: - `-`:普通檔案 - `d`:directory,目錄。 - `p`:pipe 管道檔案。 - `l`:link 符號連結。 第 2~4 欄位是擁有者(u:owner)的權限: - `r`:可讀(read) = 4。 - `w`:可寫(write) = 2。 - `x`:可執行(execute) = 1。 - `-`:沒有權限。 第 5~7 欄位是群組(g:group)權限,內容與上方(owner)敘述相同,第 8~0 欄位是其他人(o:others)權限,內容同上。 這串 `rwxr-xr-x` 可以表示成 7(`rwx`)5(`r-x`)5(`r-x`),每個數字左到右代表的是 u(owner)、g(group)、o(others)這些人的權限。 ## chmod 更改檔案、目錄權限 chmod 是取自 change mode 的縮寫,分成兩種模式,一種是數字模式,另一種是符號模式。 ### 數字模式 先來講講數字模式: 數字模式透過三位八進位數字來設定權限,每位數字是權限值的總和: * 0:無權限(`---`) * 1:僅執行(`--x`) * 2:僅寫入(`-w-`) * 3:寫入+執行(`-wx`) * 4:僅讀取(`r--`) * 5:讀取+執行(`r-x`) * 6:讀取+寫入(`rw-`) * 7:完整權限(`rwx`) 範例: ```bash chmod 644 file.txt # -rw-r--r-- 擁有者可讀寫,其他人僅可讀 chmod 755 script.sh # -rwxr-xr-x 擁有者完整權限,其他人可讀取執行 chmod 700 private.txt # -rwx------ 僅擁有者有完整權限 chmod 777 shared.txt # -rwxrwxrwx 所有人完整權限 ``` ### 符號模式 接下來是符號模式,符號模式使用字母組合來新增、移除或設定權限: 操作對象: - `u`:擁有者(user)。 - `g`:群組(group)。 - `o`:其他人(others)。 - `a`:所有人(all)。 操作符號: - `+`:新增權限。 - `-`:移除權限。 - `=`:設定特定權限(清除其他權限後會重新設定)。 範例: ```bash chmod u+x script.sh # 給擁有者新增執行權限 chmod a+r file.txt # 給所有人新增讀取權限 chmod g-w document.txt # 移除群組的寫入權限 chmod u=rw,g=r,o=r file.txt # 設定擁有者讀寫,群組和其他人僅讀取 chmod go-rwx private.txt # 移除群組和其他人的所有權限 ``` ### 常用參數 - `-R`:遞迴,對目錄及其所有子目錄和檔案套用權限變更。 - `-v`:詳細模式,顯示每個檔案的權限變更情況。 - `-c`:僅顯示有變更的檔案。 - `-f`:安靜模式,不顯示錯誤訊息。 範例: ```bash chmod -R 755 /var/www/html # 遞迴設定整個網站目錄權限 chmod -v 644 *.txt # 詳細顯示每個 txt 檔案的權限變更 ``` ## chown chown(change owner)是 Linux 系統中用來變更檔案或目錄「擁有者」和「群組」的指令。 擁有者(owner)以及群組(group)可用 `ls -l` 查看,於第三欄、第四欄就會顯示誰是擁有者以及群組: ![image](https://hackmd.io/_uploads/ryxQnrfRle.png) 第三欄(左邊紅框)是擁有者,第四欄(右邊紅框)是群組。 chown 主要做以下這三件事情: - 變更檔案或目錄的擁有者(誰擁有這個檔案)。 - 變更檔案或目錄的群組(哪個群組的成員可以存取這個檔案)。 - 同時變更擁有者與群組。 基本語法: ```bash chown [options] [owner][:[group]] <files or directories> ``` owner:可為使用者名稱或使用者 ID。 group:可為群組名稱或群組 ID。 `:`(冒號):分隔 owner 與 group。 常用參數與 chmod 相同: - `-R`:遞迴,對目錄及其所有子目錄和檔案套用權限變更。 - `-v`:詳細模式,顯示每個檔案的權限變更情況。 - `-c`:僅顯示有變更的檔案。 - `-f`:安靜模式,不顯示錯誤訊息。 相關範例: - 只改變擁有者:`sudo chown alice file.txt` `file.txt` 的擁有者變成 `alice`,群組不變。 - 只改變群組:`sudo chown :devteam file.txt` `file.txt` 的群組變成 `devteam`,擁有者不變。 - 同時改變擁有者和群組:`sudo chown alice:devteam file.txt` `file.txt` 的擁有者變成 `alice`,群組變成 `devteam`。 - 遞迴更改整個目錄及其內容:`sudo chown -R alice:devteam project_folder` `project_folder` 及其所有子目錄、檔案的擁有者和群組都變更。 ### 使用權限 - 只有 root 或檔案擁有者可以更改檔案的擁有者。 ### 疑難雜症 - 權限不足:一般使用者無法隨意更改檔案擁有者,需加 `sudo`。 - 目錄遞迴未加 `-R`:只會改變目錄本身,不會影響裡面的檔案。 ## chgrp chgrp 是取自 change group 的縮寫,是 Linux 系統中用來變更檔案或目錄所屬群組的指令。 基本語法: ```bash chgrp [options] <group_name or group_ID> <files or directories> ``` 群組名稱須已存在於 `/etc/group` 檔案中。 常用參數與 chmod 相同: - `-R`:遞迴,對目錄及其所有子目錄和檔案套用權限變更。 - `-v`:詳細模式,顯示每個檔案的權限變更情況。 - `-c`:僅顯示有變更的檔案。 - `-f`:安靜模式,不顯示錯誤訊息。 相關範例: - 更改單一檔案的群組:`chgrp developers file.txt` 讓 `file.txt` 歸屬於 `developers` 群組。 - 更改多個檔案的群組:`chgrp users file1.txt file2.txt`。 同時更改多個檔案的群組。 - 遞迴更改目錄及其內容的群組:`chgrp -R www-data /var/www/html` 讓整個網站目錄及其所有檔案都歸屬於 www-data 群組。 ### 使用權限 - 只有檔案擁有者或 `root` 管理員可以執行 `chgrp`。 - 要是目標群組的成員才可以用,否則會出現權限錯誤。 ## whoami `whoami` 是在 Linux 查看目前有效使用者名稱的指令,只要直接輸入即可,效力等同於 `id -un` 指令。 ## 總整理 Linux 檔案權限分為三個層級(`user`、`group`、`others`),每層級有三種權限: - `r`(讀取)= 4 - `w`(寫入)= 2 - `x`(執行)= 1 使用 `ls -l` 查看時,如 `drwxr-xr-x`: * 第 1 位:檔案類型(`-` 普通檔、`d` 目錄、`l` 連結、`p` 管道)。 * 第 2-4 位:擁有者(owner)權限。 * 第 5-7 位:群組(group)權限。 * 第 8-10 位:其他人(others)權限。 ### chmod(變更權限) 數字模式: ```bash chmod 644 file.txt # 擁有者讀寫,其他人唯讀 chmod 755 script.sh # 擁有者完整,其他人讀+執行 ``` 符號模式: ```bash chmod u+x script.sh # 擁有者增加執行權限 chmod go-rwx private.txt # 移除群組和其他人所有權限 chmod u=rw,g=r file.txt # 設定特定權限組合 ``` ### chown(變更擁有者、群組) ```bash chown alice file.txt # 改變擁有者 chown :devteam file.txt # 改變群組 chown alice:devteam file.txt # 同時改變擁有者和群組 chown -R alice:devteam folder/ # 遞迴更改整個目錄 ``` ### chgrp(變更群組) ```bash chgrp developers file.txt # 改變單一檔案群組 chgrp -R www-data /var/www/ # 遞迴改變目錄群組 ``` ### 常用參數 三個指令共用這些參數: * `-R`:遞迴處理目錄及子內容。 * `-v`:顯示詳細變更過程。 * `-c`:僅顯示有變更的檔案。 * `-f`:安靜模式,隱藏錯誤訊息。 ### 注意事項 - 變更擁有者需要 `root` 權限(使用 `sudo`)。 - 目標群組必須存在於 `/etc/group`。 - 遞迴操作記得加 `-R`,否則只影響目錄本身。 ## 參考資料 [Linux 檔案權限教學:深入理解 chmod 指令與 -rw-r-r- 實用設定方法 - オープンソースの力を活用する方法~Ubuntuの世界へようこそ~](https://www.linux.digibeatrix.com/zh/security-and-user-management/linux-chmod-permission-guide/) [Linux chmod 命令 | 菜鸟教程](https://www.runoob.com/linux/linux-comm-chmod.html) [Linux - Chmod 工具管理檔案/目錄權限 - HowHow の WebSite](https://how64bit.com/posts/linux/2022/linux-chmod-permission-tool/) [Linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思-腾讯云开发者社区-腾讯云](https://cloud.tencent.com/developer/article/1838097) [Linux檔案權限配置- FineReport帮助文档 - 全面的报表使用教程和学习资料](https://help.fanruan.com/finereport-tw/doc-view-222.html) [Linux chgrp 命令 | 菜鸟教程](https://www.runoob.com/linux/linux-comm-chgrp.html) [鳥哥私房菜 - 第五章、Linux 的檔案權限與目錄配置](https://linux.vbird.org/linux_basic/centos7/0210filepermission.php) [Lunix chgrp 命令详解-CSDN博客](https://blog.csdn.net/qq646748739/article/details/81137576) [簡單易懂的 chown 指令使用指南:改變檔案和目錄的擁有者](https://vocus.cc/article/64dd7bd6fd897800018f68e2) [Linux 更改檔案擁有者與群組,chown 指令使用教學與範例 – G. T. Wang](https://blog.gtwang.org/linux/linux-chown-command-tutorial/)