目錄
一、認(rèn)識(shí)
/etc/passwd和/etc/shadow
二、用戶與用戶組的管理
三、用戶密碼管理
四、用戶身份切換
一、認(rèn)識(shí) /etc/passwd 和 /etc/shadow
1. /etc/passwd解釋
[root@localhost ~]# cat /etc/passwd
root: x: 0: 0: root:/root:/bin/bash
用戶名:密碼:UID:GID: 描述:家目錄: Shell
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chocolee:x:1000:1000::/home/chocolee:/bin/bash
- 第一列:用戶名,可以是大小寫(xiě)、數(shù)字、減號(hào)、點(diǎn)、下劃線的組合,但減號(hào)、點(diǎn)不建議使用
- 第二列:用戶密碼,老版 UNIX 將密碼存在此處,但考慮到安全因素,后來(lái)將密碼放于
/etc/shadow - 第三列:UID,root 的 UID 為0,普通用戶的 UID 從1000開(kāi)始向后分配
- 第四列:GID
- 第五列:描述信息,如姓名、電話、地址等,可有可無(wú)
- 第六列:用戶家目錄,普通用戶的家目錄默認(rèn)建在
/home/下,但該字段可以自定義,使用戶家目錄不在/home/下 - 第七列:用戶 shell,默認(rèn)為
/bin/bash,也可以設(shè)置為/bin/nologin,這樣設(shè)置即不允許該用戶登錄
2. /etc/shadow解釋
[root@localhost ~]# cat /etc/shadow
root:$6$ng8WooyA$ghFCJVR...........adgV0xw6Ay6ya0ViFKIWI
/x9evitI5GoSTdFvg.:17660:0:99999:7:::
bin:*:16231:0:99999:7:::
daemon:*:16231:0:99999:7:::
sshd:!!:17658::::::
ntp:!!:17664::::::
chocolee:!!: 17665: 0: 99999: 7:::
用戶名: 密碼:上次改密的時(shí)間:下次可改密的時(shí)間:多少天后到期:密碼到期前的警告期限:賬號(hào)失效期限:賬號(hào)作廢期限:保留字段
第一列:用戶名,與/etc/passwd中對(duì)應(yīng)
第二列:密碼的密文(摘要算法為SHA-512)
第三列:上次更改密碼的日期,時(shí)間是從 UNIX 元年(1970-01-01)開(kāi)始的天數(shù)
第四列:過(guò)多少天可以修改密碼,默認(rèn)為0,表示不限制
第五列:密碼多少天后到期,默認(rèn)99999,表示永不過(guò)期
第六列:到期前幾天開(kāi)始警告,比如設(shè)置為 7,則到期前的第七天開(kāi)始告警
第七列:容忍期,比如設(shè)置為 5,則到期后的5天內(nèi)仍可登錄,超過(guò)5天則正式無(wú)法使用
第八列:保留字段
-
ps. 改密后,系統(tǒng)中會(huì)出現(xiàn)
/etc/shadow-,這是系統(tǒng)自動(dòng)形成的備份
二、用戶與用戶組的管理
1. 新建組
命令
groupadd-
選項(xiàng)
-
-g:指定 GID
-
例子
[root@localhost ~]# groupadd school && grep school /etc/group
school:x:1004:
[root@localhost ~]# groupadd -g 1111 hospital && grep hospital /etc/group
hospital:x:1111:
2. 刪除組
-
命令
groupdel注意:如果用戶組中包含用戶,只有從該用戶組中移出所包含的全部用戶才能刪除該用戶組
3. 新建用戶
命令
useradd-
選項(xiàng)
-
-u:指定 UID -
-g:指定 GID 或組名 -
-d:指定家目錄 -
-s:指定 Shell -
-M:不建立家目錄(但不影響 /etc/passwd 中記錄默認(rèn)的家目錄)
-
- 例子
指定較全的選項(xiàng)
[root@localhost ~]# useradd -u 1212 -g school -d /etc -s /bin/bash James && grep James /etc/passwd
James:x:1212:1004::/etc:/bin/bash
不建立家目錄
[root@localhost ~]# useradd -M Kevin.Love && grep Kevin /etc/passwd
Kevin.Love:x:1214:1214::/home/Kevin.Love:/bin/bash
注意:僅僅是不在文件系統(tǒng)中建立家目錄,但 /etc/passwd 中仍然根據(jù)默認(rèn)規(guī)則設(shè)定了家目錄
手動(dòng)建立家目錄
- 無(wú)家的用戶進(jìn)入系統(tǒng)會(huì)發(fā)現(xiàn)很怪
[root@localhost skel]# su - Kevin.Love
-bash-4.2$ # 提示符都不對(duì)
- 為其手動(dòng)建立家目錄
[root@localhost skel]# mkdir /home/Kevin.Love
[root@localhost skel]# ls /home/
alice Bond choco chocolee darlen Kevin.Love
- 拷貝家目錄模板
[root@localhost Kevin.Love]# cp /etc/skel/.bash* . && ls -a
. .. .bash_logout .bash_profile .bashrc
[root@localhost Kevin.Love]# su - Kevin.Love
上一次登錄:一 5月 21 23:07:42 CST 2018pts/0 上
[Kevin.Love@localhost ~]$ # 這下就正常了
4. 刪除用戶
命令
userdel-
選項(xiàng)
-
-r:同時(shí)刪除用戶的數(shù)據(jù),如 家目錄、郵件等
-
例子
僅進(jìn)行用戶刪除
[root@localhost ~]# ll /home/alice -d
drwx------. 2 alice alice 94 5月 16 00:21 /home/alice
[root@localhost ~]# userdel alice && !!
userdel alice && ll /home/alice -d
drwx------. 2 1001 1002 94 5月 16 00:21 /home/alice #家目錄仍然存在
刪除用戶的同時(shí),刪除其數(shù)據(jù)
[root@localhost ~]# ll /home/bob/ -d
drwx------. 2 bob bob 94 5月 15 23:47 /home/bob/
[root@localhost ~]# userdel -r bob && ll -d /home/bob/
ls: 無(wú)法訪問(wèn)/home/bob/: 沒(méi)有那個(gè)文件或目錄
三、用戶密碼管理
1. 修改密碼
命令
passwd例子
修改自己的密碼
[chocolee@localhost ~]$ passwd
更改用戶 chocolee 的密碼 。
為 chocolee 更改 STRESS 密碼。
(當(dāng)前)UNIX 密碼:
新的 密碼:
重新輸入新的 密碼:
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
修改其他用戶的密碼(僅 root 有該權(quán)限)
[root@localhost ~]# passwd chocolee
更改用戶 chocolee 的密碼 。
新的 密碼:
重新輸入新的 密碼:p
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
2. 免交互修改密碼
- 正常修改密碼(需要通過(guò)兩次交互)
[root@localhost ~]# passwd root
更改用戶 root 的密碼 。
新的 密碼:
重新輸入新的 密碼:
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
- 通過(guò)
--stdin(僅需一次,但是是明文)
[root@localhost ~]# clear
[root@localhost ~]# passwd --stdin root
更改用戶 root 的密碼 。
12345678
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
- 僅通過(guò)管道符(相當(dāng)于半自動(dòng)地輸了兩次)
[root@localhost ~]# echo -e "choco12345\nchoco12345" | passwd root
更改用戶 root 的密碼 。
新的 密碼:重新輸入新的 密碼:passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
- 管道符+
--stdin(全自動(dòng))
[root@localhost ~]# echo "choco12345" | passwd --stdin root
更改用戶 root 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
3. 鎖定、解鎖用戶
- 選項(xiàng)
-
-l:鎖定 -
-u:解鎖
-
例子:
鎖定用戶
[root@localhost ~]# passwd -l chocolee && !!
passwd -l chocolee && tail /etc/passwd
鎖定用戶 chocolee 的密碼 。
passwd: 操作成功
[root@localhost ~]# grep chocolee /etc/shadow
chocolee:!!$6$axUVEyOg$W.xHFI0aTcN4bg1RRFfwoNKGuMVRnvQImljFw.tuLJA7E./BNTk7DNkXI3aFFyShNu
nwAnmSTUu6.zJCqULaz.:17671:0:99999:7::: # 用戶密碼的前面出現(xiàn)了兩個(gè)嘆號(hào)
解鎖用戶
[root@localhost ~]# passwd -u chocolee
解鎖用戶 chocolee 的密碼。
passwd: 操作成功
4. 產(chǎn)生隨機(jī)密碼
- 命令
mkpasswd(需要安裝 expect)
- 選項(xiàng)
-
-l:指定密碼長(zhǎng)度 -
-s:指定特殊字符的個(gè)數(shù) -
-d:指定數(shù)字的個(gè)數(shù) -
-c:指定小寫(xiě)字母的個(gè)數(shù) -
-C:指定大寫(xiě)字母的個(gè)數(shù)
-
- 例子
生成一個(gè)長(zhǎng)12位,包含:4個(gè)特殊字符、2個(gè)大寫(xiě)、4個(gè)數(shù)字的密碼
[root@localhost ~]# mkpasswd -l 12 -s 4 -C 2 -d 4
<$7=[O10blU3
四、用戶身份切換
1. su
- 完整切換用戶身份(連同目標(biāo)用戶的環(huán)境變量一起切過(guò)去)
[root@localhost ~]# su - chocolee
上一次登錄:一 5月 21 06:21:28 CST 2018pts/0 上
[chocolee@localhost ~]$ pwd
/home/chocolee
- 非完整切換
[root@localhost ~]# su chocolee
[chocolee@localhost root]$ pwd
/root
- 以用戶身份執(zhí)行某個(gè)命令(需要輸入目標(biāo)用戶的密碼)
[chocolee@localhost root]$ su -c "cat /etc/passwd" root
密碼:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2. sudo
Ubuntu中常見(jiàn),一種比較安全的做法,僅需用戶輸入自己的密碼就能臨時(shí)以 root 的身份執(zhí)行某些命令
- 用法
[chocolee@localhost ~]$ cat /etc/shadow # chocolee 無(wú)權(quán)查看 /etc/shadow
cat: /etc/shadow: 權(quán)限不夠
[chocolee@localhost ~]$ sudo cat /etc/shadow # 用 sudo 就可以
[sudo] password for chocolee:
root:$6$SuR.........spmAn4TrsRXFjnb3JL674lc
ReBdb2CHhxL9siMAS0:17672:0:99999:7:::
bin:*:16231:0:99999:7:::
daemon:*:16231:0:99999:7:::
adm:*:16231:0:99999:7:::
3. /etc/sudoer 與 visudo
誰(shuí)能使用
sudo,在哪使用,允許用sudo哪些命令,都是 root 在/etc/sudoers中配置的。
但該文檔遵循一定格式,所以不要手動(dòng)修改該文件,應(yīng)該用visudo進(jìn)行修改,visudo具有語(yǔ)法校驗(yàn)功能
- 文檔內(nèi)容解釋
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
chocolee ALL=(ALL) ALL
第一列:組、用戶、用戶別名——指定能使用sudo命令的用戶或組
第二列:本機(jī) IP 或主機(jī)名——指定在哪臺(tái)機(jī)子能夠使用sudo(常用于多臺(tái)策略不同的主機(jī),使用同一的 /etc/sudoers進(jìn)行限定時(shí),僅需要一個(gè)相同的 /etc/sudoers 文件,即可對(duì)應(yīng)不同的主機(jī))
第三列:以哪個(gè)用戶的身份執(zhí)行命令
第四列:命令——指定能使用 sudo 執(zhí)行哪些命令。該字段請(qǐng)用絕對(duì)路徑。
- 限定可以使用的命令
/etc/sudoers
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
chocolee ALL=(ALL) /usr/bin/ls,/usr/bin/cat
效果:同樣的文件,能 cat,但不能 vim
[chocolee@localhost ~]$ sudo vim /etc/shadow
對(duì)不起,用戶 chocolee 無(wú)權(quán)以 root 的身份在 localhost.localdomain 上執(zhí)行 /bin/vim /etc/shadow。
[chocolee@localhost ~]$ sudo cat /etc/shadow
root:$6$SuR6vKTm$PFqHZ848a5uQUvq......ReBdb2CHhxL9siMAS0:17672:0:99999:7:::
bin:*:16231:0:99999:7:::
- 不需要密碼即可執(zhí)行
/etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
chocolee ALL=(ALL) NOPASSWD:/usr/bin/ls,/usr/bin/cat
效果:不需要輸入密碼即可使用
[chocolee@localhost ~]$ sudo cat /etc/shadow
root:$6$SuR6vK..........rsRXFjnb3JL674lcReBdb2CHhxL9siMAS0:17672:0:99999:7:::
bin:*:16231:0:99999:7:::
4. 關(guān)于 su 的常用安全做法
首先,禁止 root 遠(yuǎn)程登錄(修改 /etc/ssh/sshd-config)
#LoginGraceTime 2m
PermitRootLogin no # 禁止 root 遠(yuǎn)程登錄
其次,設(shè)置詳細(xì)的 sudo 規(guī)則
(The End)