Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)
1. Linux的安全性
Linux 安全系統的核心是用戶賬戶。每個能進入 Linux 系統的用戶都會被分配唯一的用戶賬戶。用戶對系統中各種對象的訪問權限取決于他們登錄系統時用的賬戶。
用戶權限是通過創建用戶時分配的用戶 ID(User ID,通常縮寫為 UID)來跟蹤的。UID 是數值,每個用戶都有唯一的 UID,但在登錄系統時用的不是 UID,而是登錄名。
1.1 etc/passwd 文件
Linux 系統使用一個專門的文件來將用戶的登錄名匹配到對應的 UID 值。這個文件就是 /etc/passwd文件。
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
....
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
rich:x:500:500:Rich Blum:/home/rich:/bin/bash
mama:x:501:501:Mama:/home/mama:/bin/bash
katie:x:502:502:katie:/home/katie:/bin/bash
jessica:x:503:503:Jessica:/home/jessica:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
$
root 用戶賬戶是 Linux 系統的管理員,固定分配給它的 UID 是 0。就像上例中顯示的,Linux 系統會為各種各樣的功能創建不同的用戶賬戶,而這些賬戶并不是真的用戶。這些賬戶叫作系統賬戶,是系統上運行的各種服務進程訪問資源用的特殊賬戶。所有運行在后臺的服務都需要用一個系統用戶賬戶登錄到 Linux 系統上。
Linux 為系統賬戶預留了 500 以下的 UID 值。
/etc/passwd文件的字段包含了如下信息:
- 登錄用戶名
- 用戶密碼
- 用戶賬戶的UID(數字形式)
- 用戶賬戶的組ID(GID)(數字形式)
- 用戶賬戶的文本描述(稱為備注字段)
- 用戶HOME目錄的位置
- 用戶的默認shell
/etc/passwd 文件中的密碼字段都被設置成了 x,這并不是說所有的用戶賬戶都用相同的密碼。
絕大多數 Linux 系統都將用戶密碼保存在另一個單獨的文件中(叫作 shadow 文件,位置在 /etc/shadow)。只有特定的程序(比如登錄程序)才能訪問這個文件。
1.2 /etc/shadow 文件
/etc/shadow 文件對 Linux 系統密碼管理提供了更多的控制。只有 root 用戶才能訪問 /etc/shadow文件,這讓它比起 /etc/passwd 安全許多。
/etc/shadow 文件為系統上的每個用戶賬戶都保存了一條記錄,如下所示:
rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::
在 /etc/shadow 文件的每條記錄中都有 9 個字段:
-
與 /etc/passwd 文件中的登錄名字段對應的登錄名
-
加密后的密碼
-
自上次修改密碼后過去的天數密碼(自1970年1月1日開始計算)
-
多少天后才能更改密碼
-
多少天后必須更改密碼
-
密碼過期前提前多少天提醒用戶更改密碼
-
密碼過期后多少天禁用用戶賬戶
-
用戶賬戶被禁用的日期(用自1970年1月1日到當天的天數表示)
-
預留字段給將來使用
使用 shadow 密碼系統后,Linux 系統可以更好地控制用戶密碼。它可以控制用戶多久更改一次密碼,以及什么時候禁用該用戶賬戶,
1.3 添加新用戶
useradd 命令使用系統的默認值以及命令行參數來設置用戶賬戶。系統默認值被設置在 /etc/default/useradd 文件中??梢允褂眉尤肓?-D 選項的 useradd 命令查看所用 Linux 系統中的這些默認值。
# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
#
在創建新用戶時,如果你不在命令行中指定具體的值,useradd 命令就會使用 -D 選項所顯示的那些默認值。這個例子列出的默認值如下:
- 新用戶會被添加到 GID 為100的公共組;
- 新用戶的 HOME 目錄將會位于 /home/loginname;
- 新用戶賬戶密碼在過期后不會被禁用;
- 新用戶賬戶未被設置過期日期;
- 新用戶賬戶將 bash shell 作為默認 shell;
- 系統會將 /etc/skel 目錄下的內容復制到用戶的 HOME 目錄下;
- 系統為該用戶賬戶在 mail 目錄下創建一個用于接收郵件的文件;
可以用默認系統參數創建一個新用戶賬戶,然后檢查一下新用戶的 HOME 目錄。
# useradd -m test
# ls -al /home/test
total 24
drwxr-xr-x 2 test test 4096 2010-09-23 19:01 .
drwxr-xr-x 4 root root 4096 2010-09-23 19:01 ..
-rw-r--r-- 1 test test 220 2010-04-18 21:51 .bash_logout
-rw-r--r-- 1 test test 3103 2010-04-18 21:51 .bashrc
-rw-r--r-- 1 test test 179 2010-03-26 08:31 examples.desktop
-rw-r--r-- 1 test test 675 2010-04-18 21:51 .profile
#
默認情況下,useradd 命令不會創建 HOME 目錄,但是 -m 命令行選項會使其創建 HOME 目錄。
要想在創建用戶時改變默認值或默認行為,可以使用命令行參數,下圖列出了這些參數。
在創建新用戶賬戶時使用命令行參數可以更改系統指定的默認值。但如果總需要修改某個值的話,最好還是修改一下系統的默認值。
可以在 -D 選項后跟上一個指定的值來修改系統默認的新用戶設置。參數列表如下圖所示
更改默認值非常簡單:
# useradd -D -s /bin/tsch
# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/tsch
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
# useradd命令會將tsch shell作為所有新建用戶的默認登錄shell。
1.4 刪除用戶
要刪除用戶可以使用 userdel 命令,默認情況下,userdel 命令會只刪除 /etc/passwd 文件中的用戶信息,而不會刪除系統中屬于該賬戶的任何文件。
如果加上 -r 參數,userdel 會刪除用戶的 HOME 目錄以及郵件目錄。然而,系統上仍可能存有已刪除用戶的其他文件。這在有些環境中會造成問題。
# /usr/sbin/userdel -r test
# ls -al /home/test
ls: cannot access /home/test: No such file or directory
#
1.5 修改用戶
Linux提供了一些不同的工具來修改已有用戶賬戶的信息。
-
usermod
usermod命令是用戶賬戶修改工具中最強大的一個。它能用來修改/etc/passwd文件中的大部分字段,只需用與想修改的字段對應的命令行參數就可以了。參數大部分跟useradd命令的參數一樣(比如,-c修改備注字段,-e修改過期日期,-g修改默認的登錄組)。除此之外,還有另外一些可能派上用場的選項。
? -l 修改用戶賬戶的登錄名。
? -L 鎖定賬戶,使用戶無法登錄。
? -p 修改賬戶的密碼。
? -U 解除鎖定,使用戶能夠登錄。 -
passwd 和 chpasswd
改變用戶密碼的一個簡便方法就是用passwd命令:
# passwd test Changing password for user test. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. #如果只用 passwd 命令,它會改你自己的密碼。系統上的任何用戶都能改自己的密碼,但只有root 用戶才有權限改別人的密碼。
-e 選項能強制用戶下次登錄時修改密碼。你可以先給用戶設置一個簡單的密碼,之后再強制在下次登錄時改成他們能記住的更復雜的密碼。
如果需要為系統中的大量用戶修改密碼,chpasswd 命令可以事半功倍。chpasswd 命令能從標準輸入自動讀取登錄名和密碼對(由冒號分割)列表,給密碼加密,然后為用戶賬戶設置。你也可以用重定向命令來將含有 userid:passwd 對的文件重定向給該命令。
# chpasswd < users.txt # -
chsh、chfn 和 chage
chsh 命令用來快速修改默認的用戶登錄 shell。使用時必須用 shell 的全路徑名作為參數,不能只用 shell 名。
# chsh -s /bin/csh test Changing shell for test. Shell changed. #chfn 命令提供了在 /etc/passwd 文件的備注字段中存儲信息的標準方法。chfn 命令會將用于 Unix 的 finger 命令的信息存進備注字段,而不是簡單地存入一些隨機文本(比如名字或昵稱之類的),或是將備注字段留空。finger 命令可以非常方便地查看 Linux 系統上的用戶信息。
# finger rich Login: rich Name: Rich Blum Directory: /home/rich Shell: /bin/bash On since Thu Sep 20 18:03 (EDT) on pts/0 from 192.168.1.2 No mail. No Plan. #如果在使用 chfn 命令時沒有參數,它會向你詢問要將哪些適合的內容加進備注字段。
# chfn test Changing finger information for test. Name []: Ima Test Office []: Director of Technology Office Phone []: (123)555-1234 Home Phone []: (123)555-9876 Finger information changed.# finger test Login: test Name: Ima Test Directory: /home/test Shell: /bin/csh Office: Director of Technology Office Phone: (123)555-1234 Home Phone: (123)555-9876 Never logged in. No mail. No Plan. #查看 /etc/passwd 文件中的記錄,你會看到下面這樣的結果。
# grep test /etc/passwd test:x:504:504:Ima Test,Director of Technology,(123)555- 1234,(123)555-9876:/home/test:/bin/csh #chage 命令用來幫助管理用戶賬戶的有效期。
chage命令的日期值可以用下面兩種方式中的任意一種:- YYYY-MM-DD格式的日期
- 代表從1970年1月1日起到該日期天數的數值
chage 命令中有個好用的功能是設置賬戶的過期日期。有了它,你就能創建在特定日期自動過期的臨時用戶,再也不需要記住刪除用戶了!過期的賬戶跟鎖定的賬戶很相似:賬戶仍然存在,但用戶無法用它登錄。
2. 使用Linux組
組權限允許多個用戶對系統中的對象(比如文件、目錄或設備等)共享一組共用的權限。
每個組都有唯一的 GID——跟 UID 類似,在系統上這是個唯一的數值。除了 GID,每個組還有唯一的組名。
/etc/group文件包含系統上用到的每個組的信息。
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
rich:x:500:
mama:x:501:
katie:x:502:
jessica:x:503:
mysql:x:27:
test:x:504:
和 UID 一樣,GID 在分配時也采用了特定的格式。系統賬戶用的組通常會分配低于 500 的 GID值,而用戶組的 GID 則會從 500 開始分配。/etc/group 文件有 4 個字段:
? * 組名
? * 組密碼
? * GID
? * 屬于該組的用戶列表
組密碼允許非組內成員通過它臨時成為該組成員。這個功能并不很普遍,但確實存在。
說明 用戶賬戶列表某種意義上有些誤導人。你會發現,在列表中,有些組并沒有列出用戶。這并不是說這些組沒有成員。當一個用戶在 /etc/passwd 文件中指定某個組作為默認組時,用戶賬戶不會作為該組成員再出現在 /etc/group 文件中。多年以來,被這個問題難倒的系統管理員可不是一兩個呢。
2.1 創建新組
groupadd 命令可在系統上創建新組。
# /usr/sbin/groupadd shared
# tail /etc/group
haldaemon:x:68:
xfs:x:43:
gdm:x:42:
rich:x:500:
mama:x:501:
katie:x:502:
jessica:x:503:
mysql:x:27:
test:x:504:
shared:x:505:
#
在創建新組時,默認沒有用戶被分配到該組。groupadd 命令沒有提供將用戶添加到組中的選項,但可以用 usermod 命令來彌補這一點。
# /usr/sbin/usermod -G shared rich
# /usr/sbin/usermod -G shared test
# tail /etc/group
haldaemon:x:68:
xfs:x:43:
gdm:x:42:
rich:x:500:
mama:x:501:
katie:x:502:
jessica:x:503:
mysql:x:27:
test:x:504:
shared:x:505:rich, test
#
shared 組現在有兩個成員:test和rich。usermod 命令的 -G 選項會把這個新組添加到該用戶賬戶的組列表里。
說明 如果更改了已登錄系統賬戶所屬的用戶組,該用戶必須登出系統后再登錄,組關系的更改才能生效。
警告 為用戶賬戶分配組時要格外小心。如果加了 -g 選項,指定的組名會替換掉該賬戶的默認組。-G 選項則將該組添加到用戶的屬組的列表里,不會影響默認組。
2.2 修改組
groupmod 命令可以修改已有組的 GID(加-g選項)或組名(加-n選項)。
# /usr/sbin/groupmod -n sharing shared
# tail /etc/group
haldaemon:x:68:
xfs:x:43:
gdm:x:42:
rich:x:500:
mama:x:501:
katie:x:502:
jessica:x:503:
mysql:x:27:
test:x:504:
sharing:x:505:test,rich
#
# 修改組名時,GID和組成員不會變,只有組名改變。
3. 理解文件權限
待續
4. 改變安全性設置
待續
總結
以上是生活随笔為你收集整理的Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux shell 学习笔记(4)—
- 下一篇: Linux shell 学习笔记(6)—