訪問權限基礎:chmod
, chown
, umask
1. 訪問權限的概念
當你操作 Linux 裡的檔案或目錄時,經常會需要管理他們的訪問權限。想像一下,你把你的襪子放在公開的地方,現在家裡的每個人都可以使用它們!Linux 的訪問權限讓你可以避免“未經授權的使用襪子”(或更重要的,例如你的 script)。讓我們開始了解吧。
在 Linux 中,每一個檔案(和目錄)都有三組訪問權限,這些權限能決定誰可以讀取、寫入或執行它們:
- 讀取 (r): 允許查看文件內容或目錄中的文件列表。
- 寫入 (w): 允許修改文件內容或在目錄中新增/刪除文件。
- 執行 (x): 允許將文件作為程序運行(或者進入目錄)。
三層模型
每個權限適用於三個使用者群體:
- 擁有者 (owner): 創建文件的人。
- 群組 (group): 被分配到文件的用戶群組。
- 其他人 (others): 系統中的所有其他用戶。
文件的訪問權限示例:
-rwxr-xr--
解讀內容:
- 第一個符號
-
表示這是一個文件(目錄為d
)。 - 前三個符號
rwx
— 擁有者的權限(讀取、寫入、執行)。 - 接下來的三個符號
r-x
— 群組的權限(讀取、執行)。 - 最後的三個符號
r--
— 其他人的權限(僅讀取)。
2. 指令 chmod
:管理權限
符號格式的寫法
指令 chmod
會改變檔案和目錄的權限。符號格式的寫法如下:
chmod [誰][操作][權限] 文件名
- 誰:
u
(擁有者),g
(群組),o
(其他),a
(全部)。 - 操作:
+
(增加權限),-
(移除權限),=
(精確設定權限)。 - 權限:
r
(讀取),w
(寫入),x
(執行)。
範例:
# 為所有人設置執行權限
chmod a+x script.sh
# 只為群組增加寫入權限
chmod g+w file.txt
# 移除其他人的讀取權限
chmod o-r document.txt
八進位格式寫法
八進位格式(或稱數字格式)更簡潔,但需要了解“數字魔法”。在這種格式中,每一組權限都用數字表示:
r = 4
w = 2
x = 1
權限會相加:
rwx = 7
(4 + 2 + 1)rw- = 6
(4 + 2)r-- = 4
寫法格式:
chmod [數字][數字][數字] 文件名
範例:
# 設置擁有者有rwx權限,群組有r-x權限,其他人有r--權限
chmod 754 file.sh
3. 更改檔案擁有者:指令 chown
如果你需要把檔案交給其他用戶(或群組),chown
指令會幫到你。
格式:
chown [用戶]:[群組] 檔案名稱
範例:
# 轉移檔案擁有權給用戶 user1
chown user1 myfile.txt
# 轉移擁有者和群組
chown user1:group1 myfile.txt
# 僅更改群組
chown :group2 myfile.txt
4. 預設遮罩:umask
當你建立文件時,系統會為其設定權限。例如,權限可能是 rw-r--r--
。但這些權限是從哪裡來的呢?答案是:來自命令 umask
。
什麼是 umask
?
umask
定義了哪些權限不會被設定在新文件上。
例如:
- 文件的基本權限集合:
666
(無執行權)。 - 遮罩:
022
。 - 最終權限:
644
(666 - 022
)。
命令:
- 查看當前遮罩:
umask
- 設定新遮罩:
umask 0022
範例:
# 設定遮罩,讓新的文件具有 rw-rw-r--
umask 0002
5. 管理員權限與 sudo
什麼是 sudo
?
sudo
(即 "superuser do" 的縮寫)是 Linux 和類 Unix 系統中的一個命令,允許用戶以 超級用戶(root)或其他擁有高級權限的用戶身份執行指令。
sudo
系統提供臨時的管理訪問權限,而無需長時間以 root 帳戶運行,這降低了系統因意外或惡意行為而被修改的風險。
簡單來說,sudo 是添加在需要以管理員權限執行的命令前的指令。
sudo 如何運作?
執行命令:
當你輸入帶有 sudo
的指令時,系統會檢查當前用戶是否有權執行具高權限的指令。
例如:
sudo apt update
驗證:
第一次在當前會話使用 sudo
時,系統會要求輸入當前用戶的密碼(非 root)。
成功輸入密碼後,系統會在短時間內(通常 5-15 分鐘)保存驗證狀態,這樣就不需要每次執行指令都再次輸入密碼。
執行指令:
若用戶擁有 sudo
配置中指定的權限,指令便會以超級用戶權限執行。
sudo
的主要功能與命令
以高權限執行指令:
sudo <命令>
例如:
sudo apt install nginx
以其他用戶身份執行指令: 使用選項 -u
:
sudo -u <用戶名> <命令>
例如:
sudo -u user1 ls /home/user1
獲取管理員終端: 啟動帶有 root 權限的 shell:
sudo -i
或者:
sudo su
查看 sudo
的配置:
sudo -l
顯示當前用戶能執行的命令。
編輯 sudo
的配置:
sudo visudo
此命令打開 /etc/sudoers
配置文件以進行安全編輯。
6. 示例
來試著把我們的知識應用到實際操作中。
任務 1: 使用 chmod
管理權限
創建一個文件:
touch myfile.txt
給文件的所有者設置讀取、寫入和執行權限:
chmod u+rwx myfile.txt
為其他用戶只添加讀取權限:
chmod o+r myfile.txt
檢查權限設置:
ls -l myfile.txt
任務 2: 使用 chown
更改所有者
創建一個文件:
touch ownedfile.txt
更改文件所有者為用戶
user1
(需要管理員權限):sudo chown user1 ownedfile.txt
檢查更改結果:
ls -l ownedfile.txt
任務 3: 使用 umask
進行實驗
檢查當前的掩碼:
umask
設置掩碼為
027
:umask 027
創建一個新文件:
touch newfile.txt
檢查新創建文件的權限:
ls -l newfile.txt
7. 常見錯誤和特點
- 忘記在改變擁有者時使用
sudo
: 只有管理員能改變文件的擁有者。如果你收到 "Operation not permitted" 的錯誤信息,試試加上sudo
。 - 在
chmod
命令中順序錯誤: 更改了錯誤的對象。確認你選擇的是正確的文件或目錄。 umask
只影響新的文件: 如果你試圖通過umask
更改已存在文件的權限,那是不會起作用的。請使用chmod
。
你知道嗎?Linux中的訪問權限非常靈活,你甚至可以創建一個"全宇宙只有一個人能看到"的文件!正如所說,擁有巨大的權力也意味著巨大的責任!現在,掌握了 chmod
, chown
和 umask
,你已經準備好讓你的Linux系統不僅方便使用,還更加安全了。
GO TO FULL VERSION