Day18 課堂筆記
1. 調(diào)試cron定時(shí)任務(wù)的技巧總結(jié)
1)、查看錯(cuò)誤日志
/var/log/cron
學(xué)會(huì)最小化排除:先清空
>/var/log/cron
然后在測(cè)試和觀察。
2)、增加執(zhí)行任務(wù)頻率調(diào)試任務(wù)
把頻率調(diào)快。比如:每天執(zhí)行的任務(wù),可以修改為每分鐘等執(zhí)行。
3)、把定時(shí)任務(wù)執(zhí)行時(shí)間比當(dāng)前時(shí)間拖后幾分鐘
比如需要凌晨三點(diǎn)執(zhí)行定時(shí)任務(wù),而當(dāng)前系統(tǒng)時(shí)間為15:00,咱們就把定時(shí)任務(wù)時(shí)間調(diào)整15:05執(zhí)行 ,有個(gè)5分鐘的提前量。
4)、調(diào)整系統(tǒng)時(shí)間(測(cè)試環(huán)境還湊合,不要用于生產(chǎn)環(huán)境)
比如需要凌晨三點(diǎn)執(zhí)行定時(shí)任務(wù),就把系統(tǒng)時(shí)間調(diào)整到2:55。
5)、通過(guò)腳本日志輸出調(diào)試定時(shí)任務(wù)
定時(shí)任務(wù)輸出
* * * * * /bin/sh /server/scripts/bak.sh &>/tmp/bak.log
腳本輸出:
tar zcvf oldboy.tar.gz ./data &>/tmp/tar.log
注意:
有時(shí)候程序只能執(zhí)行一次。一定要在測(cè)試環(huán)境測(cè)試好,然后直接復(fù)制到正式。
一般企業(yè)代碼發(fā)布流程:
辦公室測(cè)試環(huán)境===>IDC機(jī)房測(cè)試環(huán)境===>IDC機(jī)房正式環(huán)境
這樣可以防止在正式環(huán)境發(fā)生錯(cuò)誤,從而影響用戶體驗(yàn),業(yè)務(wù)穩(wěn)定。
2. crontab生產(chǎn)故障案例分析及解決
2.1 No space left on device常見(jiàn)企業(yè)故障案例
磁盤(pán)滿的報(bào)錯(cuò),原因往往是inode被占滿了。查看用df -i
因?yàn)槎〞r(shí)任務(wù)沒(méi)有加&>/dev/null,定時(shí)任務(wù)執(zhí)行的時(shí)候把輸出給系統(tǒng)root發(fā)郵件。
郵件服務(wù)器postfix服務(wù)默認(rèn)不開(kāi),這些給系統(tǒng)發(fā)的郵件就會(huì)堆在臨時(shí)目錄(大量小文件存在)
CentOS6 /var/spool/clientmqueue/
CentOS7 /var/spool/postfix/maildrop/
預(yù)防方法:
1)、盡量將cron任務(wù)里面的命令或腳本中的結(jié)尾加上&>/dev/null,或在寫(xiě)定時(shí)任務(wù)執(zhí)行腳本時(shí),把輸出定向到文件中(適合所有的情況)
2)、開(kāi)啟郵件服務(wù),不過(guò)最好不做,因?yàn)猷]件服務(wù)會(huì)帶來(lái)額外的安全問(wèn)題
3)、加定時(shí)清理任務(wù),比如,將find /var/spool/postfix/maildrop/ -type f -mtime +30|xargs rm -f放入定時(shí)任務(wù),每周處理一次。
2.2 crond export變量生產(chǎn)故障案例
程序通過(guò)手動(dòng)可以執(zhí)行,放定時(shí)任務(wù)里不執(zhí)行
定時(shí)任務(wù)在執(zhí)行腳本的時(shí)候,多數(shù)情況沒(méi)辦法加載環(huán)境變量,特別是/etc/profile。
登錄后怎么操作都對(duì),但是就是放到定時(shí)任務(wù)不行。那是因?yàn)橐韵略颍?br>
命令行中:bash登錄方式
1.手工登錄后,加載所有環(huán)境變量(~/.bash_profile,~/.bash_rc,/etc/profile,/etc/bashrc)
2.定時(shí)任務(wù)執(zhí)行腳本屬于非登錄狀態(tài),可能加載環(huán)境變量(/etc/bashrc)。
所有運(yùn)維都會(huì)把變量放到此文件/etc/profile,把這個(gè)文件里的變量定義
解決方法:
在執(zhí)行的腳本中 重新定義。
具體為crond執(zhí)行Shell時(shí)只能識(shí)別為數(shù)不多的系統(tǒng)環(huán)境變量,普通環(huán)境變量一般是無(wú)法識(shí)別的,如果在編寫(xiě)的腳本中需要使用變量,最好使用export重新聲明下該變量,以確保腳本正確執(zhí)行。以后要將其作為一個(gè)開(kāi)發(fā)基本規(guī)范寫(xiě)上。

3 用戶管理知識(shí)與應(yīng)用實(shí)踐
3.1 信息文件相關(guān)
3.1.1 存儲(chǔ)用戶信息文件/etc/passwd
作用:存儲(chǔ)系統(tǒng)用戶的信息,/etc/passwd文件實(shí)際內(nèi)容如下(前五行):
[root@oldboyedu ~]# head -5 /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
下面以root一行為例介紹各個(gè)字段的作用:
| root | :x | :0 | :0 | :root | :/root | :/bin/bash |
|---|---|---|---|---|---|---|
| 用戶名稱 | :用戶密碼 | :用戶UID | :用戶GID | :用戶說(shuō)明 | :用戶家目錄 | :shell解釋器 |
3.1.2 存儲(chǔ)用戶密碼信息文件/etc/shadow
/etc/shadow文件的權(quán)限:
[root@oldboyedu ~]# ll /etc/shadow
---------- 1 root root 750 Mar 28 21:00 /etc/shadow
其文件內(nèi)容為(前5行):
[root@oldboyedu ~]# head -5 /etc/shadow
root:$6$ti9fY3/V$dyKX77ydwxj1FgU1IdITVrn/F//SrQPWtKLX04.qQp2ce20BvGuvs.gC0YyMZepScy9ittLiOU12X7rhM5DRf0:17972:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
下面以bin為例對(duì)各個(gè)字段的詳細(xì)說(shuō)明:
| 字段名稱 | 注釋說(shuō)明 |
|---|---|
| bin | 用戶名稱 |
| :* | 用戶密碼(如果有密碼,是加密過(guò)的字符串) |
| :17834 | 最近更改密碼的時(shí)間 |
| :0 | 禁止修改密碼的天數(shù) |
| :99999 | 用戶必須更改口令的天數(shù) |
| :7 | 警告更改密碼的期限 |
| : | 不活動(dòng)時(shí)間 |
| : | 失效時(shí)間 |
| : | 標(biāo)志,保留 |
提示:
- 使用useradd命令添加用戶會(huì)更改/etc/passwd、/etc/shadow、/etc/group、//etc/gshadow文件。
- 使用passwd為用戶設(shè)置密碼會(huì)更改/etc/shadow文件。
3.1.3 用戶組信息文件/etc/group
/etc/group文件時(shí)存儲(chǔ)用戶組相關(guān)信息的文件,實(shí)際內(nèi)容格式為下:
[root@oldboyedu ~]# head -5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
下面以root一行為例介紹各個(gè)字段的作用:
| 字段名稱 | 注釋說(shuō)明 |
|---|---|
| root | 用戶組的名稱 |
| :x | 用戶組密碼,通常不設(shè)置密碼 |
| :0 | 用戶組ID |
| : | 用戶組成員 |
提示:
- 使用groupadd添加用戶組會(huì)更改/etc/group、/etc/gshadow文件。
3.1.4 用戶組密碼文件/etc/gshadow
/etc/gshadow是存儲(chǔ)用戶組密碼信息的文件,在實(shí)際運(yùn)維工作中,一般不用這個(gè)功能,因此了解即可,在此略過(guò)。
md5sum 給文件設(shè)置指紋(計(jì)算和檢查MD5數(shù)字信息)
[root@oldboyedu ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
2fe9f002726ed0a138d67cd44722f1a6 /etc/passwd
c2ca41415dca17f1a3dc3c286a9b9bff /etc/shadow
c475144a13d87a400b5e16fe6bd70baf /etc/group
659ef4f533df0fa7e457f87755fb1c27 /etc/gshadow
文件發(fā)生變化:
[root@oldboyedu ~]# useradd bingbing
[root@oldboyedu ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
39d60eff90ecd0326fe59e6464b464ad /etc/passwd
0aa8d3b157f042876ec0190a2808a377 /etc/shadow
cee8bc6e85f9dfb9dc0a04e452e834f4 /etc/group
cdfd26351f409ee32fca53a22ad15912 /etc/gshadow
3.2 常見(jiàn)命令匯總
3.2.1 有關(guān)用戶管理的常見(jiàn)命令匯總
1)和用戶直接相關(guān)的命令
- useradd 添加用戶
- usermod 修改用戶信息
- userdel 刪除用戶及和用戶相關(guān)聯(lián)的配置或文件
2)和用戶密碼直接相關(guān)的命令
passwd 為用戶設(shè)置密碼
chage 修改用戶密碼屬性信息
3)其他用戶相關(guān)命令
id 查看用戶的UID、GID及所歸屬的用戶信息
su 切換用戶角色工具
sudo 以一個(gè)其它用戶身份(主要是root用戶)執(zhí)行命令的工具,普通用戶用來(lái)提權(quán)的工具
visudo 用來(lái)編輯suders配置文件(sudo授權(quán)文件)的工具
3.2.2 有關(guān)用戶組管理的常見(jiàn)命令匯總
| 命令 | 注釋說(shuō)明 |
|---|---|
| groupadd | 添加用戶組 |
| groupdel | 刪除用戶組 |
| groupmod | 修改用戶組信息 |
| gpasswd | 為用戶組設(shè)置密碼 |
| groups | 顯示用戶組所屬的用戶組 |
| newgrp | 更改用戶所屬的有效用戶組 |
3.3 添加用戶命令useradd
1. useradd命令的工作原理介紹
不帶參數(shù)添加用戶時(shí),首先會(huì)讀取/etc/login.defs和/etc/default/useradd配置文件中的預(yù)定義規(guī)則,并根據(jù)設(shè)置的規(guī)則添加用戶,同時(shí)會(huì)向/etc/passwd和/etc/group文件添加新建的用戶和用戶組記錄。當(dāng)然,/etc/shadow和/etc/gshadow也會(huì)同步生成記錄,同時(shí)系統(tǒng)還會(huì)根據(jù)/etc/login.defs和/etc/default/useradd配置文件中的信息建立用戶的家目錄,并復(fù)制/etc/skel中的所有隱藏的環(huán)境配置文件到新用戶的家目錄中,以完成對(duì)用戶環(huán)境的初始化設(shè)置。
1.1)和創(chuàng)建用戶組相關(guān)的文件/etc/login.defs
下面是CentOS 7.6版本的/etc/login.defs文件內(nèi)容及注釋說(shuō)明
[root@oldboyedu ~]# cat /etc/login.defs|grep -v "^$"
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail <-->設(shè)定用戶對(duì)應(yīng)的mail文件所在路徑
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999 <-->密碼最長(zhǎng)可以使用的天數(shù)
PASS_MIN_DAYS 0 <-->更換密碼的最小天數(shù)
PASS_MIN_LEN 5 <-->密碼的最小長(zhǎng)度
PASS_WARN_AGE 7 <-->密碼失效前提前多少天開(kāi)始警告
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000 <-->普通用戶默認(rèn)最小UID為1000
UID_MAX 60000 <-->普通用戶默認(rèn)最大UID為60000
# System accounts
SYS_UID_MIN 201 <-->系統(tǒng)用戶默認(rèn)最小UID為201
SYS_UID_MAX 999 <-->系統(tǒng)用戶默認(rèn)最大UID為999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000 <-->普通用戶組默認(rèn)最小GID為1000
GID_MAX 60000 <-->普通用戶組默認(rèn)最大GID為60000
# System accounts
SYS_GID_MIN 201 <-->系統(tǒng)用戶組默認(rèn)最小GID為201
SYS_GID_MAX 999 <-->系統(tǒng)用戶組默認(rèn)最大GID為999
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes <-->是否創(chuàng)建用戶家目錄
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077 <-->家目錄對(duì)應(yīng)的umask默認(rèn)值
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes <-->刪除用戶同時(shí)刪除用戶組(該組沒(méi)有其他成員)
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512 <-->密碼加密算法SHA512
1.2)和創(chuàng)建用戶相關(guān)的文件/etc/default/useradd
內(nèi)容如下:
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 <-->依賴于/etc/login.defs的USERGROUPS_ENAB參數(shù),如果為no,則此處控制
HOME=/home <-->把用戶的家目錄建在/home目錄下
INACTIVE=-1 <-->是否啟用用戶過(guò)期停權(quán),-1表示不啟用
EXPIRE= <-->用戶終止日期,不設(shè)置表示不啟用
SHELL=/bin/bash <-->新用戶默認(rèn)所用的shell解釋器類型
SKEL=/etc/skel <-->配置新用戶家目錄的默認(rèn)環(huán)境變量存放路徑
CREATE_MAIL_SPOOL=yes <-->創(chuàng)建mail文件
1.3)和創(chuàng)建用戶相關(guān)的目錄/etc/skel
內(nèi)容如下:
[root@oldboyedu ~]# ls -lA /etc/skel/
total 12
-rw-r--r--. 1 root root 18 Oct 31 01:07 .bash_logout <-->用戶環(huán)境變量,退出時(shí)加載
-rw-r--r--. 1 root root 193 Oct 31 01:07 .bash_profile <-->用戶環(huán)境變量,登錄時(shí)加載
-rw-r--r--. 1 root root 231 Oct 31 01:07 .bashrc <-->用戶環(huán)境變量,登錄時(shí)加載
企業(yè)面試案例:
使用oldboy用戶登錄到Linux系統(tǒng)后,發(fā)現(xiàn)提示符為如下所示異常情況,請(qǐng)問(wèn)該如何恢復(fù)到正常的Linux命令行提示符情況?
-bash-4.2$
-bash-4.2$
解答:
首先模擬故障重現(xiàn),如下步驟:
[root@oldboyedu ~]# su - oldboy <--> 切換oldboy用戶下
Last login: Sat Mar 30 09:42:31 CST 2019 from 10.0.0.1 on pts/0
[oldboy@oldboyedu ~]$ rm -f .bash* <-->故障原因就是用戶家目錄下的環(huán)境變量不存在了
[oldboy@oldboyedu ~]$ logout <-->快捷鍵(Ctrl+d)退出當(dāng)前環(huán)境
[root@oldboyedu ~]# su - oldboy <-->重新切到oldboy用戶下
Last login: Sat Mar 30 12:19:06 CST 2019 on pts/0
-bash-4.2$ <-->故障重現(xiàn)
下面是故障恢復(fù)方案及步驟:
方法1:永久生效(正確方法)
-bash-4.2$ cp /etc/skel/.bash* ~/ <-->從/etc/skel中將所有環(huán)境變量文件復(fù)制回來(lái),注意用戶
-bash-4.2$ logout <-->快捷鍵(Ctrl+d)退出當(dāng)前環(huán)境
[root@oldboyedu ~]# su - oldboy <-->重新切到oldboy用戶下
Last login: Sat Mar 30 12:19:55 CST 2019 on pts/0
[oldboy@oldboyedu ~]$ <-->故障排除
-bash-4.2$ source ./.bash_profile ./.bashrc <-->若還未生效,則執(zhí)行此命令。
[oldboy@oldboyedu ~]$ <-->故障排除
-bash-4.2$ cp /etc/skel/.bash* . <-->沒(méi)權(quán)限拷貝怎么辦
cp: cannot create regular file ‘./.bash_logout’: Permission denied
cp: cannot create regular file ‘./.bash_profile’: Permission denied
cp: cannot create regular file ‘./.bashrc’: Permission denied
-bash-4.2$ logout <-->重新切到oldboy用戶下
[root@oldboyedu ~]# cd /home/oldboy
[root@oldboyedu /home/oldboy# cp /etc/skel/.bash* .
[root@oldboyedu /home/oldboy]# su - oldboy
Last login: Sat Mar 30 17:00:52 CST 2019 on pts/0
[oldboy@oldboyedu ~]$
方法2:臨時(shí)生效(不推薦)
執(zhí)行以下命令:
export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\] \w\[\e[0m\]]\$'
useradd命令的常用參數(shù)介紹
如表所示:
| 參數(shù)選項(xiàng) | 注釋說(shuō)明 |
|---|---|
| -c | 設(shè)置新用戶在passwd文件中的說(shuō)明字段的信息 |
| -d | 新用戶每次登入時(shí)使用的家目錄 |
| -e | 用戶終止日期。日期指定格式為MM/DD/YY |
| -f | 用戶過(guò)期幾日后永久停權(quán) |
| -g | 指定新用戶所屬的用戶組(須系統(tǒng)存在) |
| -G | 指定新用戶所屬的多個(gè)不同的用戶組,用“,”隔開(kāi) |
| -m | 創(chuàng)建并指定用戶家目錄 |
| -M | 不建立用戶的家目錄 |
| -s | 指定解釋器 |
| -u | 指定用戶ID |
范例1: 不加任何參數(shù),添加用戶alex
[root@oldboyedu ~]# useradd alex
[root@oldboyedu ~]# ls -ld /home/alex/
drwx------ 2 alex alex 62 Mar 30 14:56 /home/alex/
[root@oldboyedu ~]# ls -la /home/alex/
total 12
drwx------ 2 alex alex 62 Mar 30 14:56 .
drwxr-xr-x. 4 root root 32 Mar 30 14:56 ..
-rw-r--r-- 1 alex alex 18 Oct 31 01:07 .bash_logout
-rw-r--r-- 1 alex alex 193 Oct 31 01:07 .bash_profile
-rw-r--r-- 1 alex alex 231 Oct 31 01:07 .bashrc
[root@oldboyedu ~]# grep -w 'alex' /etc/passwd
alex:x:1001:1001::/home/alex:/bin/bash
[root@oldboyedu ~]# tail -1 /etc/group
alex:x:1001:
[root@oldboyedu ~]# tail -1 /etc/shadow
alex:!!:17985:0:99999:7:::
[root@oldboyedu ~]# tail -1 /etc/gshadow
alex:!::
范例2: useradd的-g、-u參數(shù)的使用示例
[root@oldboyedu ~]# useradd zuma -u 1111 -g root
[root@oldboyedu ~]# id zuma
uid=1111(zuma) gid=0(root) groups=0(root)
范例3: useradd的-M、-s參數(shù)的使用示例
[root@oldboyedu ~]# useradd mysql -s /sbin/nologin -M
[root@oldboyedu ~]# tail -1 /etc/passwd
mysql:x:1112:1112::/home/mysql:/sbin/nologin
范例4: useradd的-e參數(shù)的使用示例
[root@oldboyedu ~]# date +%F
2019-03-30
[root@oldboyedu ~]# useradd pig -e "2019/04/30"
[root@oldboyedu ~]# chage -l pig
Last password change : Mar 30, 2019
Password expires : never
Password inactive : never
Account expires : Apr 30, 2019 <-->修改成功
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
范例5: useradd的-c、-u、-G、-s、-d、-m參數(shù)的使用示例
[root@oldboyedu ~]# useradd -c "good training" -u 2222 -G root,oldboy,sa -s /bin/sh -d /home/luffy oldboyedu
[root@oldboyedu ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:2222:2222:good training:/home/luffy:/bin/sh
[root@oldboyedu ~]# id oldboyedu
uid=2222(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),0(root),1000(oldboy),1114(sa)
[root@oldboyedu ~]# ls -ld /home/luffy/
drwx------ 2 oldboyedu oldboyedu 62 Mar 30 15:09 /home/luffy/
useradd命令的-D參數(shù)介紹
useradd -D的作用是改變配置文件/etc/default/useradd文件的默認(rèn)設(shè)置值,也可直接編輯。
范例1:設(shè)置添加用戶時(shí)的默認(rèn)解釋器類型為/sbin/nologin
[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@oldboyedu ~]# grep -w "SHELL" /etc/default/useradd
SHELL=/bin/bash
[root@oldboyedu ~]# useradd -D -s /sbin/nologin
[root@oldboyedu ~]# grep -w "SHELL" /etc/default/useradd
SHELL=/sbin/nologin
[root@oldboyedu ~]# useradd newuser
[root@oldboyedu ~]# grep 'newuser' /etc/passwd
newuser:x:2223:2223::/home/newuser:/sbin/nologin
[root@oldboyedu ~]# useradd -D -s /bin/bash
[root@oldboyedu ~]# grep -w "SHELL" /etc/default/useradd
SHELL=/bin/bash
2.usermod:用戶信息修改相關(guān)命令
usermod命令的功能很強(qiáng)大,但在生產(chǎn)場(chǎng)景中使用的頻率并不是很高,參數(shù)和useradd參數(shù)大多數(shù)相同。
范例1: usermod的-c、-u、-G、-s、-d、參數(shù)的使用示例
[root@oldboyedu ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:2222:2222:good training:/home/luffy:/bin/sh
[root@oldboyedu ~]# id oldboyedu
uid=2222(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),0(root),1000(oldboy),1114(sa)
[root@oldboyedu ~]# ls -ld /home/luffy/
drwx------ 2 oldboyedu oldboyedu 62 Mar 30 15:09 /home/luffy/
[root@oldboyedu ~]# usermod -c "good" -u 3333 -G sa -s /sbin/nologin -d /home/oldboyedu oldboyedu
[root@oldboyedu ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:3333:2222:good:/home/oldboyedu:/sbin/nologin
[root@oldboyedu ~]# id oldboyedu
uid=3333(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),1114(sa)
[root@oldboyedu ~]# ls -l /home/
total 0
drwx------ 2 alex alex 62 Mar 30 14:56 alex
drwx------ 2 2222 oldboyedu 62 Mar 30 15:09 luffy
drwx------ 2 newuser newuser 62 Mar 30 15:23 newuser
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
drwx------ 2 pig pig 62 Mar 30 15:04 pig
drwx------ 2 zuma root 62 Mar 30 15:00 zuma
[root@oldboyedu ~]#
從上面可以發(fā)現(xiàn)-d參數(shù)并未創(chuàng)建新的家目錄,下圖為演示效果:

可以理解為:-m -d 參數(shù)將原家目錄改個(gè)名字而已
[root@oldboyedu ~]# ll /home/
total 0
drwxr-xr-x 2 root root 80 Mar 30 17:02 abc
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu ~]# ll /home/abc/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
[root@oldboyedu ~]# usermod -md /home/123 oldboyedu
[root@oldboyedu ~]# ll /home/
total 0
drwxr-xr-x 2 root root 80 Mar 30 17:02 123
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu ~]# ll /home/123/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
[root@oldboyedu ~]# usermod -md /home/456 oldboyedu
[root@oldboyedu ~]# ll /home
total 0
drwxr-xr-x 2 root root 80 Mar 30 17:02 456
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu ~]# ll /home/456/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
3.userdel:刪除用戶相關(guān)命令
參數(shù):
- -f 強(qiáng)制刪除用戶,即使用戶當(dāng)前已登錄
- -r刪除用戶的同時(shí),刪除與用戶相關(guān)的所有文件
提示:在生產(chǎn)環(huán)境中,最好不要直接刪除用戶,而是修改/etc/passwd配置文件,將要?jiǎng)h除的用戶用#號(hào)注釋掉即可,從而防止出現(xiàn)無(wú)法彌補(bǔ)的錯(cuò)誤。
4.groupadd:添加用戶組命令
參數(shù):
- -g gid 指定用戶組的gid
- -f 新增一個(gè)賬戶,強(qiáng)制覆蓋一個(gè)已存在的用戶組
5.groupdel:刪除用戶組命令
略
6.passwd:修改用戶密碼命令
參數(shù):
- -stdin 從標(biāo)準(zhǔn)輸入讀取密碼字符串
使用范例:
范例1:修改用戶密碼示例:
(1)修改自身用戶:
root用戶修改自身,不需要提供原始密碼
[root@oldboyedu ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
非root用戶修改自身,需要提供原始密碼
[oldgirl@oldboyedu ~]$ whoami
oldgirl
[oldgirl@oldboyedu ~]$ passwd
Changing password for user oldgirl.
Changing password for oldgirl.
(current) UNIX password: <-->提供原始密碼
New password:
BAD PASSWORD: The password is too similar to the old one <-->密碼太簡(jiǎn)單
New password:
BAD PASSWORD: The password is shorter than 8 characters <-->密碼短
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
(2)修改普通用戶:
[root@oldboyedu ~]# useradd oldgirl
[root@oldboyedu ~]# passwd oldgirl
Changing password for user oldgirl.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
范例2:顯示賬號(hào)密碼信息示例:
[oldgirl@oldboyedu ~]$ passwd -S oldgirl
Only root can do that. <-->只有root用戶才能執(zhí)行
[oldgirl@oldboyedu ~]$ logout
[root@oldboyedu ~]# passwd -S oldgirl
oldgirl PS 2019-03-30 0 99999 7 -1 (Password set, SHA512 crypt.)
范例3:一條命令非人工交互式設(shè)置密碼(生產(chǎn)使用技巧)
[root@oldboyedu ~]# echo "12345678" |passwd --stdin oldgirl
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully.
范例4:多個(gè)參數(shù)的示例
[root@oldboyedu ~]# chage -l oldgirl
Last password change : Mar 30, 2019
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@oldboyedu ~]# passwd -n 7 -x 60 -w 10 -i 30 oldgirl
Adjusting aging data for user oldgirl.
passwd: Success
[root@oldboyedu ~]# chage -l oldgirl
Last password change : Mar 30, 2019
Password expires : May 29, 2019
Password inactive : Jun 28, 2019
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 60
Number of days of warning before password expires : 10
企業(yè)場(chǎng)景下用戶及密碼管理思路
- 用戶密碼要足夠復(fù)雜,多種字符組合
- 統(tǒng)一管理(采用微軟活動(dòng)目錄或openLDAP開(kāi)源工具)
- 動(dòng)態(tài)密碼:動(dòng)態(tài)口令等
7.chpasswd:批量更新用戶的密碼命令
范例1:批量修改密碼的實(shí)踐
系統(tǒng)存在的用戶:oldboy1和oldboy2(沒(méi)有需創(chuàng)建)
[root@oldboyedu ~]# useradd oldboy1
[root@oldboyedu ~]# useradd oldboy2
[root@oldboyedu ~]# id oldboy1
uid=3335(oldboy1) gid=3335(oldboy1) groups=3335(oldboy1)
[root@oldboyedu ~]# id oldboy2
uid=3336(oldboy2) gid=3336(oldboy2) groups=3336(oldboy2)
方法1:命令行直接輸入并執(zhí)行
[root@oldboyedu ~]# chpasswd
oldboy1:123456 <-->一行一行輸入
oldboy2:123456 <-->一行一行輸入
<-->空行處,按Ctrl+d結(jié)束輸入
[root@oldboyedu ~]#
方法2:把用戶和密碼寫(xiě)入文件里執(zhí)行
[root@oldboyedu ~]# cat >user.txt <<EOF
> oldboy1:12345678
> oldboy2:12345678 <-->格式:用戶名:密碼,一行一個(gè)用戶
> EOF
[root@oldboyedu ~]# cat user.txt
oldboy1:12345678
oldboy2:12345678
[root@oldboyedu ~]# chpasswd <user.txt
范例2:批量創(chuàng)建用戶、批量修改密碼、批量刪除用戶(不需腳本實(shí)現(xiàn))。
批量創(chuàng)建用戶:
[root@oldboyedu ~]# ls /home/
oldboy
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#useradd oldboy\1#gp'|bash
[root@oldboyedu ~]# ls /home/|xargs -n7
oldboy oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06
oldboy07 oldboy08 oldboy09 oldboy10 oldboy11 oldboy12 oldboy13
oldboy14 oldboy15 oldboy16 oldboy17 oldboy18 oldboy19 oldboy20
[root@oldboyedu ~]# tail -2 /etc/passwd
oldboy19:x:3355:3355::/home/oldboy19:/bin/bash
oldboy20:x:3356:3356::/home/oldboy20:/bin/bash
批量修改密碼:
[root@oldboyedu ~]# tail -2 /etc/shadow
oldboy19:!!:17985:0:99999:7:::
oldboy20:!!:17985:0:99999:7:::
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#oldboy\1:123456#gp'|chpasswd
[root@oldboyedu ~]# tail -2 /etc/shadow
oldboy19:$6$jFht4/j7xhsJBX5$HVD1fg2y5rxwlNmZIAvZehgp.klwt5WEE7Mh6x67ASgpsK3o12sOfdplfqbmlA6Rpzq7JOGHysdqI7rvryb1L/:17985:0:99999:7:::
oldboy20:$6$WYEUw/WyJ$vrGmOtFniEnHSgcWVGZZfcmci/KJ9.MWzO3OkjI74aRiU/UUzbZ0W2h/n1LanHxFGURRfC.538n2DJ04zQR0D.:17985:0:99999:7:::
or
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#echo "123456"|passwd --stdin oldboy\1#gp'|bash &>1.txt
[root@oldboyedu ~]# tail -6 1.txt
Changing password for user oldboy18.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy19.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy20.
passwd: all authentication tokens updated successfully.
批量刪除用戶:
[root@oldboyedu ~]# ls /home/|xargs -n7
oldboy oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06
oldboy07 oldboy08 oldboy09 oldboy10 oldboy11 oldboy12 oldboy13
oldboy14 oldboy15 oldboy16 oldboy17 oldboy18 oldboy19 oldboy20
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#userdel -r oldboy\1#gp'|bash
[root@oldboyedu ~]# ls /home/|xargs -n7
oldboy
[root@oldboyedu ~]# tail /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
alex:x:1001:1001::/home/alex:/bin/bash
zuma:x:1111:0::/home/zuma:/bin/bash
mysql:x:1112:1112::/home/mysql:/sbin/nologin
pig:x:1113:1113::/home/pig:/bin/bash
oldboyedu:x:3333:2222:good:/home/456:/bin/bash
newuser:x:2223:2223::/home/newuser:/sbin/nologin
oldgirl:x:3334:3334::/home/oldgirl:/bin/bash
oldboy1:x:3335:3335::/home/oldboy1:/bin/bash
oldboy2:x:3336:3336::/home/oldboy2:/bin/bash
8.chage:修改用戶密碼有效期命令
參數(shù):
- -l 顯示用戶有效期信息
范例1:多個(gè)參數(shù)示例
[root@oldboyedu ~]# useradd range
[root@oldboyedu ~]# chage -m7 -M60 -w10 -I30 range
[root@oldboyedu ~]# chage -l range
Last password change : Mar 30, 2019
Password expires : May 29, 2019
Password inactive : Jun 28, 2019
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 60
Number of days of warning before password expires : 10
9 用戶查詢相關(guān)命令


