第十四節 用戶管理初級(上)
標籤(空格分隔): Linux實戰教學筆記-陳思齊css
---更多資料點我查看mysql
1,帳號管理
1.1 管理用戶命令彙總
命令 | 註釋說明(特殊顏色的必須掌握) |
---|---|
useradd增 | 同adduser命令,執行此命令可在系統中添加用戶。(更改4個用戶文件) |
userdel刪 | 執行此命令可刪除用戶及相關用戶的配置或文件(更改4個用戶文件) |
passwd | 執行此命令可爲用戶設置或修改密碼。更改/etc/shadow文件 |
chage | 修改用戶密碼屬性。管理/etc/shadow文件 |
usermod改 | 修改用戶信息的命令,能夠經過usermod來修改登陸名,用戶的家目錄等等 |
id查 | 查看用戶的UID,GID及所歸屬的用戶組 |
su | 用戶角色切換工具。su - |
sudo | sudo是經過另外一個用戶來執行命令,su 是用來切換用戶,而後經過切換到的用戶來完成相應的任務,但sudo能在命令後面直接接命令執行,好比sudo ls /root,不須要root密碼就能夠執行只有root才能執行的相應命令或具有的目錄權限;這個權限須要經過visudo命令或者直接編輯/etc/sudoers來實現 |
visudo | visudo配置sudo權限的編輯命令;也能夠不用這個命令,直接用vi來編輯/etc/sudoers實現。但推薦用visudo來操做(會自動檢查語法) |
pwcov | 同步用戶從/etc/passwd到/etc/shadow |
pwck | pwck是校驗用戶配置文件/etc/passwd和/etc/shadow文件內容是否合法或完整 |
pwunconv | 是pwcov的立逆向操做,是從/etc/shadow和/etc/passwd建立/etc/passwd,而後會刪除/etc/shadow文件 |
finger | 查看用戶信息工具 |
1.2 管理用戶組命令彙總
命令 | 註釋說明(特殊顏色標記須要掌握) |
---|---|
groupadd | 添加用戶組 |
groupdel | 刪除用戶組 |
groupmod | 修改用戶組信息 |
gpasswd | 爲用戶組設置密碼 |
groups | 顯示用戶所屬的用戶組 |
newgrp | 更改用戶所屬的有效用戶組 |
1.3 /etc/skel目錄
/etc/skel目錄是用來存放新用戶環境變量文件的目錄,當咱們添加新用戶時,這個目錄下的全部文件會自動被複制到新添加的用戶的家目錄下:默認狀況下,/etc/skel目錄下的全部文件都是隱藏文件(以.點開頭的文件);經過修改,添加,刪除/etc/skel目錄下的文件,咱們可爲新建立的用戶提供統一的,標準的,初始化用戶環境。linux
下面咱們就看下/etc/skel目錄的內容:面試
[root@chensiqi1 ~]# ls -al /etc/skel/
total 20 drwxr-xr-x. 2 root root 4096 Dec 23 20:25 . drwxr-xr-x. 78 root root 4096 Feb 4 09:13 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc
[root@chensiqi1 ~]# cd /etc/skel/ [root@chensiqi1 skel]# touch readme [root@chensiqi1 skel]# ls -la total 20 drwxr-xr-x. 2 root root 4096 Feb 11 02:21 . drwxr-xr-x. 78 root root 4096 Feb 4 09:13 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc -rw-r--r--. 1 root root 0 Feb 11 02:21 readme [root@chensiqi1 skel]# useradd chensiqi2 [root@chensiqi1 skel]# su - chensiqi2 [chensiqi2@chensiqi1 ~]$ ls -la total 20 drwx------. 2 chensiqi2 chensiqi2 4096 Feb 11 02:22 . drwxr-xr-x. 5 root root 4096 Feb 11 02:22 .. -rw-r--r--. 1 chensiqi2 chensiqi2 18 May 10 2016 .bash_logout -rw-r--r--. 1 chensiqi2 chensiqi2 176 May 10 2016 .bash_profile -rw-r--r--. 1 chensiqi2 chensiqi2 124 May 10 2016 .bashrc -rw-r--r--. 1 chensiqi2 chensiqi2 0 Feb 11 02:21 readme 命令說明: 在/etc/skel/目錄下建立一個文件readme,而後咱們建立一個新用戶,發如今用戶的家目錄裏也默認有一個readme。所以,得出結論,/etc/skel/目錄下的全部文件都會默認出如今新建用戶的家目錄裏。
1.4 企業面試題:請問以下登陸故障的原理及解決辦法?
-bash-4.1$ -bash-4.1$
解答:sql
[root@chensiqi1 ~]$su - chensiqi2
[chensiqi2@chensiqi1 ~]$ rm -rf /*
[chensiqi2@chensiqi1 ~]$ exit
logout
[root@chensiqi1 ~]# su - chensiqi2 -bash-4.1$ 命令說明:普通用戶強制刪除了家目錄裏的變量文件就會出現這種問題。
恢復:shell
[chensiqi2@chensiqi1 ~]$ exit
logout
[root@chensiqi1 ~]# su - chensiqi2 -bash-4.1$ cp /etc/skel/.bash* ~ -bash-4.1$ exit logout [root@chensiqi1 ~]# su -chensiqi2 bash: hensiqi2: command not found [root@chensiqi1 ~]# su - chensiqi2 [chensiqi2@chensiqi1 ~]$ 命令說明: 咱們去把/etc/skel/目錄下的變量文件複製回來就行了
知識擴展*和.*的問題編程
[root@chensiqi1 ~]# cp /etc/skel/* /tmp/ [root@chensiqi1 ~]# ls /tmp/ readme [root@chensiqi1 ~]# ls -la /tmp/ total 12 drwxrwxrwt. 3 root root 4096 Feb 11 02:39 . dr-xr-xr-x. 27 root root 4096 Feb 10 02:32 .. drwxrwxrwt. 2 root root 4096 Jan 11 22:07 .ICE-unix -rw-r--r--. 1 root root 0 Feb 11 02:39 readme [root@chensiqi1 ~]# ls -la /etc/skel/ total 20 drwxr-xr-x. 2 root root 4096 Feb 11 02:21 . drwxr-xr-x. 78 root root 4096 Feb 11 02:22 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc -rw-r--r--. 1 root root 0 Feb 11 02:21 readme [root@chensiqi1 ~]# #cp /etc/skel/.* 命令說明: *不復制隱藏文件,那麼在運行cp /etc/skel/.*以前,咱們先看看.*裏都有什麼東西? [root@chensiqi1 ~]# ls /etc/skel/.* /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc /etc/skel/.: readme /etc/skel/..: ConsoleKit inputrc quotatab DIR_COLORS iproute2 rc DIR_COLORS.256color issue rc.d DIR_COLORS.lightbgcolor issue.bak rc.local NetworkManager issue.net rc.sysinit X11 issue.net.bak rc0.d abrt kdump-adv-conf rc1.d acpi kdump.conf rc2.d adjtime krb5.conf rc3.d aliases latrace.conf rc4.d aliases.db latrace.d rc5.d alsa ld.so.cache rc6.d 東西太多如下省略.... 命令說明: 咱們能夠發現,.*連etc下的東西都複製出來了,這是爲何呢?別忘了,目錄下都還有些什麼東西,還有.和.. [root@chensiqi1 ~]# ls -la /etc/skel total 20 drwxr-xr-x. 2 root root 4096 Feb 11 02:21 . drwxr-xr-x. 78 root root 4096 Feb 11 02:22 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc -rw-r--r--. 1 root root 0 Feb 11 02:21 readme 命令說明: .表明當前目錄,..表明上級目錄。所以.*就把上級目錄的全部文件也複製了。因此咱們在複製隱藏文件的時候不能用.*來表明全部。
2,用戶管理命令詳解
2.1 添加用戶命令useradd
- 添加用戶的命令有useradd和adduser,這兩個命令所能達到的效果是同樣的。固然除了useradd和adduser命令之外,咱們還能經過修改用戶配置文件/etc/passwd和/etc/group及手動建立文件的辦法來直接添加用戶,不過這裏並不推薦,這裏建議你們統一使用useradd命令,本文也僅會針對useradd命令進行舉例講解。
- 當使用useradd命令不加參數選項,後面直接跟所添加用戶名時,系統首先會讀取配置文件/etc/login.defs和/etc/default/useradd中所定義的參數或規則,根據設置的規則添加用戶,同時會向/etc/passwd和/etc/group文件內添加新建用戶和用戶組記錄。
- 固然/etc/passwd和/etc/group的加密資訊文件/etc/shadows和/etc/gshadow也會同步生成記錄,同時系統還會根據/etc/default/useradd文件中所配置的信息創建用戶的家目錄,並複製/etc/skel中的全部文件(包括隱藏的環境配置文件)到新用戶的家目錄中。
useradd語法:數組
[root@chensiqi ~]# man useradd #下面的內容源於此命令幫助的結果,對於部分地方作了修改 名稱: useradd - 帳號創建或更新新用戶資訊的工具 語法: useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,....]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid[-o][-n][-r] login] useradd -D [-g default_group] [-b default_home] [-f default_inactive] [-e default_expire_date] [-s default_shell] 描述: 新帳號創建 當不加-D 參數時,useradd指令使用命令列來指定新帳號的設定值和使用系統上的預設值(指前文提到的/etc/login.defs和/etc/default/useradd等配置文件)。新用戶帳號將產生一些系統檔案,如用戶目錄的創建,拷貝起始檔案等,這些都可以利用命令列選項指定。此版本爲Red Hat Linux 提供,可幫每一個新加入的用戶創建和用戶同名的group,要達到這個目的,不能添加-n選項。
爲了方便查看,咱們用表格的方式把useradd可以使用的參數選項展示給你們以下所示:
|useradd 參數選項|註釋說明(特殊顏色的須要掌握)|
|--|--|
|-c comment|新帳號password檔的說明欄|
|-d home_dir|新帳號每次登入時所使用的home_dir.預設值爲default_home內login名稱,並當成登入時目錄名稱|
|-e expire_date|帳號終止日期。日期的指定格式爲MM/DD/YY或者YYYY-MM-DD
|
|-f inactive_day|帳號過時幾往後永久停權。當值爲0時帳號則馬上被停權。而當值爲-1時則關閉此功能,預設值-1|
|-g initial_group|group 名稱以數字來做爲用戶登入起始用戶組(group)。用戶組名須爲系統現有存在的名稱。用戶組數字也須爲現有存在的用戶組,預設的用戶組數字爲1.
|
|-G group,[...]|定義此用戶爲多個不一樣groups的成員,每一個用戶組使用「,」逗號分隔。用戶組名同-g選項的限制。默認值爲用戶的起始用戶組。|
|-m|用戶目錄如不存在則自動創建。|
|-M|不創建用戶家目錄,優先於/etc/login.defs文件的設定。通常創虛擬用戶時不創建家目錄,部署服務時須要建立虛擬用戶。
|
|-n|默認狀況用戶的用戶組與用戶的名稱會相同。若是命令加了-n參數,就不會生成和用戶同名的用戶組了。|
|-r| 此參數是用來創建系統帳號。|
|-s shell|用戶登入後使用的shell名稱。默認值不填寫,這樣系統會幫你指定預設的登入shell(根據/etc/default/useradd預設的值)。cat /etc/shells系統支持的shell
|
|-u uid|用戶的ID值。這個值必須是惟一的,除非用-o選項。數字不可爲負值
|安全
示例1:useradd -c,-u,-G,-s,-d,-m多個參數組合例子,自定義用戶家目錄。ruby
示例2:新建用戶默認的帳號終止日期
示例3:添加用戶時的默認shell類型/bin/bash改成/bin/sh
[root@chensiqi1 ~]# cat /etc/shells #查看當前系統支持的shell種類 /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh [root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看當前默認的shell配置 SHELL=/bin/bash [root@chensiqi1 ~]# useradd -D -s /bin/sh #修改成/bin/sh [root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看修改結果 SHELL=/bin/sh #修改爲功
特別提示,這裏僅更改了配置文件的默認值,僅對以後創建的新用戶生效,和老用戶無關。
2.2 添加用戶組命令groupadd
前問咱們講解了添加用戶的命令useradd的使用,本節咱們來熟悉下添加用戶組的命令groupadd,groupadd後面可指定用戶組名稱來創建新的用戶組。
提示:
groupadd命令的使用很是簡單,但在生產環境中使用的很少,所以,會簡單應用便可。
與groupadd命令有關的文件有:
/etc/group :用戶組相關文件
/etc/gshadow :用戶組加密相關文件
groupadd命令語法
[root@chensiqi ~]# man groupadd #查看groupadd命令的幫助信息 名稱: groupadd -創建新的用戶組 語法: groupadd 【-g gid [-o][-r][-f]】 groupname 描述: groupadd可指定用戶組名稱來創建新的用戶組帳號。須要時可從系統種取得新用戶組值。
爲了方便閱讀和查看相關參數,我依然用表格的方式把groupadd參數選項展示給你們以下所示:
|groupadd參數選項|註釋說明(帶特殊顏色的表示重要,須要掌握)|
|--|--|
|-g gid|指定用戶組GID值。除非接-o參數(如:groupadd -g 1234 -o chensiqi),不然ID值必須是惟一的數字(不能負數)。若是不指定-g參數,則預設值會從500開始
|
|-r|創建系統用戶組。GID值會比/etc/login.defs中定義的UID_MIN值小。|
|-f|新增一個帳戶,強制覆蓋一個已經存在的用戶組帳號|
2.2.1 groupadd命令實例
在生產環境中,通常增長用戶組的用法都是很是簡單的,好比下面的例子,添加GID爲802的用戶組chensiqi
[root@chensiqi ~]# groupadd -g 802 chensiqi #未必必定要指定GID。通常需求不加也能夠
若是不須要指定用戶組ID值,能夠直接執行
[root@chensiqi ~]# groupadd chensiqi
提示:未提到的groupadd的參數,你們能夠暫時忽略掉,在實際工做中用的比較少。
2.2.2 用戶密碼相關命令passwd
前文咱們已經學會如何添加用戶和用戶組了,本節咱們來學習設置或修改用戶的密碼。passwd命令的用戶不少,但大多數用法在平時工做中都不常用,這裏咱們挑選一些生產環境工做中經常使用的用法加以說明。
passwd命令介紹
普通用戶和超級用戶均可以運行passwd命令,但普通用戶只能更改自身的用戶密碼,超級用戶root則能夠設置或修改全部用戶的密碼。
當直接執行passwd命令後面不接任何參數或用戶名時,則表示修改當前登陸用戶的密碼,請看下面的例子:
[root@chensiqi1 ~]# passwd #root用戶下直接執行passwd,後面不接任何用戶表示修改root用戶的密碼:下面也有提示。 Changing password for user root. New password: #輸入新密碼 Retype new password: #再次輸入新密碼 passwd: all authentication tokens updated successfully. #成功修改root密碼
提示:
普通用戶只能修改自身的密碼。若是想更改自身的密碼,一樣是直接運行passwd命令;好比當前操做系統用戶是chensiqi:
[chensiqi@chensiqi1 ~]$ passwd #普通用戶也輸入passwd修改密碼 Changing password for user chensiqi. Changing password for chensiqi. (current) UNIX password: #普通用戶必須先輸入舊密碼才能更改 New password: Password unchanged #新密碼不能和舊密碼相同。 New password: Password unchanged New password:
passwd 命令參數選項
[chensiqi@chensiqi1 ~]$ passwd --help
Usage: passwd [OPTION...] <accountName>
-k, --keep-tokens keep non-expired authentication tokens
#保留即將過時的用戶在期滿後仍能使用 -d, --delete delete the password for the named account (root only) #刪除用戶密碼,僅能以root權限操做 -l, --lock lock the password for the named account (root only) #鎖住用戶無權更改密碼,僅能經過root權限操做。 -u, --unlock unlock the password for the named account (root only) #解除鎖定; -f, --force force operation #強制操做:僅root權限才能操做 -x, --maximum=DAYS maximum password lifetime (root only) #兩次密碼修正的最大天數,後面接數字:僅root權限操做 -n, --minimum=DAYS minimum password lifetime (root only) #兩次密碼修改的最小天數,後面接數字,僅能root權限操做 -w, --warning=DAYS number of days warning users receives before password expiration (root only) #在距多少天提醒用戶修改密碼:僅能root權限操做 -i, --inactive=DAYS number of days after password expiration when an account becomes disabled(root only) #在距多少天提醒用戶修改密碼:僅能root全縣操做 -S, --status report password status on the named account (root only) #查詢用戶的密碼狀態,僅能root用戶操做。
爲了方便查看,咱們用表格方式把passwd命令的經常使用參數選項列表顯示,以下表所示:
passwd參數 | 註釋說明(帶特殊顏色的表示重要,須要掌握) |
---|---|
-k --keep-tokens | 保留即將過時的用戶在期滿後仍能使用 |
-d --delete | 刪除用戶密碼,僅能以root權限操做 |
-l, --lock | 鎖住用戶無權更改密碼,僅能經過root全縣操做 |
-u, --unlock | 解除鎖定 |
-f, --force | 強制操做:僅root權限才能操做 |
-x,--maximum=DAYS | 兩次密碼修改的最大天數,後面接數字:僅能root權限操做 |
-n --minimum=DAYS | 兩次密碼修改的最小天數,後面接數字,僅能root權限操做 |
-w --warning=DAYS | 在距多少天提醒用戶修改密碼:僅能root權限操做 |
-l --inactive=DAYS | 在密碼過時後多少天,用戶被禁掉,僅能以root操做 |
-S --status | 查詢用戶的密碼狀態,僅能root用戶操做 |
--stdin | 從stdin讀入密碼 |
2.2.3 passwd命令實例
- 示例1:咱們用-l參數來鎖定chensiqi用戶,使之不能修改密碼,而後再用-u參數來解除鎖定。
[root@chensiqi1 ~]# passwd -S chensiqi #鎖定前chensiqi用戶的狀態信息 chensiqi PS 2017-02-11 0 99999 7 -1 (Password set, SHA512 crypt.) [root@chensiqi1 ~]# grep chensiqi /etc/shadow #查看密碼加密文件chensiqi用戶信息的變化 chensiqi:$6$pvpd8XR8$20OnOjqQNLhQMEURXxCmF9VzGMv4tA8hXo5WTQzko7DiwFVrv8wNIXY3gId0b..OrbYf/lOgBCgkxtStY4b3M.:17209:0:99999:7::: [root@chensiqi1 ~]# passwd -l chensiqi #鎖定用戶chensiqi, 使之不能更改密碼。 Locking password for user chensiqi. passwd: Success #鎖定成功 [root@chensiqi1 ~]# grep chensiqi /etc/shadow chensiqi:!!$6$pvpd8XR8$20OnOjqQNLhQMEURXxCmF9VzGMv4tA8hXo5WTQzko7DiwFVrv8wNIXY3gId0b..OrbYf/lOgBCgkxtStY4b3M.:17209:0:99999:7::: #密碼信息前邊多了兩個歎號! [root@chensiqi1 ~]# passwd -S chensiqi #查看用戶狀態 chensiqi LK 2017-02-11 0 99999 7 -1 (Password locked.) [root@chensiqi1 ~]# su - chensiqi #切到chensiqi下更改密碼測試 [chensiqi@chensiqi1 ~]$ passwd Changing password for user chensiqi. Changing password for chensiqi. (current) UNIX password: #輸入舊密碼 passwd: Authentication token manipulation error #失敗不讓修改 [chensiqi@chensiqi1 ~]$ exit logout [root@chensiqi1 ~]# passwd -u chensiqi #經過-u參數,解除對用戶chensiqi的鎖定。 Unlocking password for user chensiqi. passwd: Success #接觸成功 [root@chensiqi1 ~]# passwd -S chensiqi chensiqi PS 2017-02-11 0 99999 7 -1 (Password set, SHA512 crypt.) [root@chensiqi1 ~]# grep chensiqi /etc/shadow #查看密碼文件chensiqi用戶信息 chensiqi:$6$pvpd8XR8$20OnOjqQNLhQMEURXxCmF9VzGMv4tA8hXo5WTQzko7DiwFVrv8wNIXY3gId0b..OrbYf/lOgBCgkxtStY4b3M.:17209:0:99999:7::: #歎號消失
- 示例2:舉一個組合參數-x-n-w-i控制密碼時效的例子
[root@chensiqi1 ~]# date +%F #顯示當前系統時間 2017-02-16 [root@chensiqi1 ~]# chage -l chensiqi #查看當前帳戶狀態 Last password change : Feb 12, 2017 Password expires : Apr 13, 2017 Password inactive : May 13, 2017 Account expires : never #從不 Minimum number of days between password change : 7 #7天后才能修改密碼 Maximum number of days between password change : 60 #60天后必須再次修改密碼 Number of days of warning before password expires : 10 #快過時提早10天通知用戶
- 示例3:下面要求chensiqi用戶7天內不能更改密碼,60天之後必須修改密碼,過時前10天通知用戶,過時後30天禁止用戶登陸
[root@chensiqi1 ~]# passwd -n 7 -x 60 -i 30 -w 10 chensiqi Adjusting aging data for user chensiqi. passwd: Success #chage -m 7 -M 60 -W 10 -I 30 chensiqi 命令也能夠實現一樣功能,只是參數的寫法不一樣。 [root@chensiqi1 ~]# chage -l chensiqi #查看修改後的結果 Last password change : Feb 12, 2017 #最後一次修改密碼 Password expires : Apr 13, 2017 #密碼過時時間 Password inactive : May 13, 2017 #密碼被禁用 Account expires : never Minimum number of days between password change : 7 #7天內禁止修改密碼 Maximum number of days between password change : 60 #60天之後必須修改新密碼 Number of days of warning before password expires : 10 #密碼過時前10天開始提醒
- 示例4:【必會】咱們用--stdin參數實現非交互式的批量設置或修改密碼
[root@chensiqi1 ~]# useradd chensiqi2 #建立用戶 Creating mailbox file: File exists [root@chensiqi1 ~]# echo "123123" | passwd --stdin chensiqi2 Changing password for user chensiqi2. #免交互輸出設置chensiqi2密碼 passwd: all authentication tokens updated successfully. [root@chensiqi1 ~]# history -c #將上面歷史命令清空,上面設置密碼雖然不須要交互了,可是密碼會以明文的方式保存在歷史記錄裏,這點須要你們注意一下。通常批量設置密碼分發給管理員後,有強制你們更改密碼。
實現批量建立用戶,且批量建立用戶隨機密碼的例子。
#!/bin/env bash # -*- conding:utf-8 -*- # author:chensiqi # qq:215379068 Userchars="chensiqi" #用戶字符串,就是用戶名的前面部分。 for num in `seq 3` #seq 3 表示1-3即,用戶名後綴爲1,2,3來區分不一樣用戶 do useradd $Userchars$num #建立用戶的命令 passwd=`echo $RANDOM|md5sum|cut -c3-20` #按照隨機數(RANDOM)的md5加密取3-20之間的字符作爲用戶密碼。此處要注意,密碼部分應該事先定義好變量,不然取值變化,致使密碼生成錯誤。 echo "$passwd"|passwd --stdin $Userchars$num #這行就是利用--stdin無交互設置密碼的參數 echo -e "user:$userchars$num\tpasswd:$passwd">>/tmp/user.log #輸出建立的用戶和密碼到user.log文件 done ---------------------------分界線 [root@chensiqi1 ~]# cat /tmp/user.log #查看用戶的帳號和密碼 user:chensiqi1 passwd:0e07e85b8ff84f04d9 user:chensiqi2 passwd:2362c5ade9629b2782 user:chensiqi3 passwd:7f17100a32ddf668f3 #提示:有關shell編程,後面的章節會詳細講解,這裏不太理解也不要緊
2.2.4 passwd特殊權限說明
[root@chensiqi1 ~]# which passwd #查看passwd完成路徑 /usr/bin/passwd [root@chensiqi1 ~]ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 Nov 23 2015 /usr/bin/passwd #發現屬主權限位帶了個s(setuid位) [root@chensiqi1 ~]# ls -l /etc/passwd -rw-r--r--. 1 root root 1301 Feb 17 21:41 /etc/passwd #/etc/passwd從權限上看僅容許root用戶更改。 爲何其餘用戶能夠更改/etc/passwd本身的密碼呢?
咱們看到/usr/bin/passwd文件的屬主權限裏呆了s權限,這是setuid權限位,這表示容許普通用戶以/usr/bin/passwd屬主root的權限來執行普通用戶原本沒法執行的功能。好比:普通用戶是沒有權限修改/etc/passwd的(從上文能夠看到)。由於/usr/bin/passwd命令文件已經設置了setuid權限位(也就是-rwsr-xr-x中的s),因此普通用戶在執行/usr/bin/passwd命令時可以使用root用戶的權限,間接的修改/etc/passwd文件,以達到修改本身口令的目的。
總結:
- 有關passwd命令的用法暫時就介紹這些,在實際工做中,最經常使用的用法就是直接使用passwd加用戶名設置和修改密碼,其次是加--stdin參數批量無交互設置密碼,其餘的參數用的不多(包括-l-u-S等),你們若是想了解更多參數,可參考man passwd或passwd --help
- 最後提醒下同窗們,在生產環境中,咱們設置密碼時應儘量的複雜且無規律,但又利用用戶本身記憶。比較好的密碼是數字字母(包括大小寫)及特殊符號的組合,而且8位以上。
2.2.5 修改用戶密碼有效期限相關命令chage
前文咱們在管理用戶和用戶組時,曾使用過chage命令,chage命令是用來修改用戶密碼有效期限的。(chage - change user password expiry information),本節咱們來學習這個命令。
1)chage說明
chage命令的用法不少,和passwd等命令功能也有很多是重複的,這裏咱們仍是挑選一些工做中經常使用的用法加以說明;若是想了解更多,請執行man chage 或chage --help
2)chage語法
[root@chensiqi ~]# chage --help 用法:chage [選項] 用戶名
爲了方便同窗們查看,咱們用表格的方式把chage命令的經常使用參數列表顯示,以下表所示:
|chage 參數選項|註釋說明(帶特殊顏色的表示重要,須要掌握)|
|--|--|
|-d,--lastday 最近日期|將最近一次密碼設置時間設爲「最近日期」|
|-E,--expiredate過時日期|將帳戶過時時間設爲「過時日期」
|
|-h,--help|顯示此幫助信息並退出|
|-l,--inactive失效密碼|在密碼過時後多少天,用戶被禁掉,僅能以root操做|
|-l,--list|顯示帳戶年齡信息
|
|-m,--mindays最小天數|將兩次改變密碼之間間距的最小天數設爲「最小天數」|
|-M,--maxdays最大天數|將兩次改變密碼之間間距的最大天數設爲「最大天數」|
|-W,-warndays警告天數|將過時警告天數設爲「警告天數」|
3)chage 實例
示例1:chage -l 查看帳戶信息
[root@chensiqi1 ~]# chage -l chensiqi Last password change : Feb 12, 2017 #對應參數-d Password expires : Apr 13, 2017 Password inactive : May 13, 2017 #對應參數-I Account expires : never #對應-E參數 Minimum number of days between password change : 7 #對應m參數 Maximum number of days between password change : 60 #對應M參數 Number of days of warning before password expires : 10 #對應W參數
示例2:舉一個組合參數-m,-M,-W,-I控制密碼時效的例子(同passwd命令示例)
[root@chensiqi1 ~]# chage -l chensiqi Last password change : Feb 12, 2017 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 #99999天后必須修改密碼 Number of days of warning before password expires : 7 #過時前提早7天提醒chensiqi用戶
示例3:下面求chensiqi用戶7天內不能更改密碼,60天后必須修改密碼,過時前提早10天通知chensiqi用戶,過時後30天后禁止用戶登陸。
[root@chensiqi1 ~]# chage -m 7 -M 60 -W 10 -I 30 chensiqi [root@chensiqi1 ~]# chage -l chensiqi #查看修改後的結果 Last password change : Feb 12, 2017 Password expires : Apr 13, 2017 Password inactive : May 13, 2017 Account expires : never Minimum number of days between password change : 7 #7天內禁止修改密碼 Maximum number of days between password change : 60 #60天內必須修改新密碼 Number of days of warning before password expires : 10 #密碼過時前10天開始提醒 提示:通過對比,咱們發現修改後和前面講解的passwd -n 7 -x 60 -W 10 -i 30 chensiqi命令修改結果一摸同樣
總結:
在平時生產場景工做中,偶爾會用到chage的-l和-E參數,其餘的參數,使用就不多了,這裏很少介紹(知識是無限的,對於初學者,學會科學的取捨知識很重要)。固然,若是想了解更多,請參考man chage和chage --help。另外,有關帳戶實際過時的實際結論,在前文講解useradd命令時就詳細講解過了,這裏就不介紹了。
4)有關用戶密碼時效
- 根據前文的講解,咱們知道passwd和chage等都可以設置或更改指定帳戶密碼的安全信息(有效期等),咱們也能夠經過/etc/login.defs配置文件或/etc/default/useradd針對全部帳戶全局修改。
- 設置用戶密碼的時效有利有弊:優勢是能夠防止運維人員離職一段時間後發現用戶還能夠登陸(也可能不是本身的用戶),若是設置了帳戶有效期,即便用戶未被清理,那麼,一段時間內也會由於過時而沒法登錄了,另外,在服務器數量不少的狀況,更改密碼是很大的工做量。因此,對於用戶密碼的時效功能,咱們根據實際的工做需求,綜合運用。在大規模的運維環境中,使用LDAP服務(微軟活動目錄)對linux帳戶統一認證,批量管理,也是不錯的方法。
2.2.6 刪除用戶相關命令userdel
從userdel命令名稱就能夠知道,它的功能就是刪除用戶及用戶相關的信息,與這個命令有關的文件有:
- /etc/passwd :用戶帳號資料文件
- /etc/shadow :用戶帳號資訊加密文件
- /etc/group : 用戶組資訊文件
- /etc/gshadow :用戶組密碼資訊文件
1)userdel 語法
[root@chensiqi ~]# man userdel 名稱: userdel -刪除系統用戶帳號及相關目錄及文件 語法: userdel [-r] 用戶名 userdel 用戶名,用戶名必須是系統已存在的 -r 用戶目錄下的檔案一併移除。在其餘位置上的相關文件也將一一找出並刪除。 相關文件 /etc/passwd : 用戶帳號資料文件 /etc/shadow : 用戶帳號諮詢加密文件 /etc/group : 用戶組資訊文件 提示:使用userdel命令的結果實際上就是在更改維護以上的文件。
2.2.7 企業場景刪除用戶處理方法:
通常不能確認用戶相關目錄有沒有重要數據就不能用-r
刪除經驗:
- vi /etc/passwd,而後註釋掉用戶,觀察1個月,這樣出問題能夠還原。至關於操做前備份。
- 把登陸shell /bin/bash 改爲 /sbin/nologin.
- openldap(相似活動目錄)帳號統一管理的,ldap庫裏幹掉用戶。全部服務器所有都沒了。
提示:只要修改和刪除都要當心謹慎!
2)userdel實例
示例1:刪除指定帳戶ett
[root@chensiqi1 ~]# grep chensiqi2 /etc/passwd chensiqi:x:808:808:num3 chensiqi:/chensiqi2017-02-11:/bin/bash chensiqi2:x:810:810::/home/chensiqi2:/bin/bash [root@chensiqi1 ~]# userdel chensiqi2 #刪除帳戶,但不刪除家目錄 [root@chensiqi1 ~]# ls /home #家目錄仍舊存在 chensiqi chensiqi1 chensiqi2 chensiqi3 mysql [root@chensiqi1 ~]# grep chensiqi2 /etc/passwd #帳戶已經沒了 chensiqi:x:808:808:num3 chensiqi:/chensiqi2017-02-11:/bin/bash
總結:
- 使用「userdel 用戶名」,這樣的方法刪除用戶時,僅會刪除用戶自己,其家目錄及相關文件並不會被刪除。通常生產場景種,當沒法肯定被刪除用戶家目錄是否有用或者有不規範用戶已在家目錄下跑了腳本或程序的時候,就不要使用「userdel -r 用戶名」這樣的危險命令,而直接使用」userdel 用戶名「命令刪除便可。
- 固然,咱們還能夠直接使用vi編輯/etc/passwd,找到要處理的用戶,先註釋一段時間,確認真的沒問題了,而後在清理其家目錄,註釋的做用和userdel命令刪除的效果同樣,就是實現了被註釋的用戶沒法登陸了(註釋掉用戶當前行便可),註釋有相似回收站的做用,一旦發現問題,咱們能夠進行恢復工做。固然對於對門戶上千臺服務器大規模運維的狀況,咱們可使用ldap等服務實現帳戶統一認證,批量的添加刪除管理。
示例2:userdel -r 用戶名 方式刪除
若是在userdel命令後加參數-r,表示在刪除該用戶的同時,一併把用戶的家目錄及本地郵件存儲的目錄和文件也一同刪除。所以,要謹慎使用。
[root@chensiqi1 ~]# grep chensiqi3 /etc/passwd chensiqi3:x:811:811::/home/chensiqi3:/bin/bash [root@chensiqi1 ~]# ll /home/chensiqi3 total 0 -rw-r--r--. 1 chensiqi3 chensiqi3 0 Feb 11 02:21 readme [root@chensiqi1 ~]# userdel -r chensiqi3 #刪除用戶包含它的家目錄 userdel: /var/spool/mail/chensiqi3 not owned by chensiqi3, not removing [root@chensiqi1 ~]# ll /home/chensiqi3 #用戶家目錄已經被刪除 ls: cannot access /home/chensiqi3: No such file or directory
總結:
- 直接在/etc/passwd中註釋或刪除想要刪除用戶的記錄的方法也是生產環境中經常使用的方法,可是在操做時必定要當心,/etc/passwd是很是重要的系統文件,若是不當心操做失誤,就會引發不少麻煩,選擇先註釋而不刪除用戶記錄在工做場景也是個明智選擇,註釋有相似回收站的做用,這樣不但達到了目的,並且在出問題時能夠進行恢復(這種操做方法並不規範,通常適合中小型公司使用)。固然,操做前備份也是必要的。操做前備份在任何場合都是一個運維人員優秀的習慣。
- 固然對於門戶網上上千臺服務器以上的大規模運維中,咱們可使用ldap等服務實現帳戶統一認證,批量的添加刪除管理用戶。
- 以上3個實例的用法,在生產環境中都有使用,請你們在使用前,多思考,操做前備份文件及數據,畢竟有關帳戶的操做都是很關鍵重要的。
2.2.8 刪除用戶組相關命令groupdel
groupdel是用來刪除用戶組的,要求用戶組必須是已存在的。用groupdel刪除用戶組實際就是修改/etc/group(用戶組文件)和/etc/gshadow(用戶組加密文件)文件。
語法格式:groupdel 用戶組
[root@chensiqi1 ~]# groupadd zhangsan #建立用戶組 [root@chensiqi1 ~]# grep zhangsan /etc/group #查看文件有記錄 zhangsan:x:810: [root@chensiqi1 ~]# grep zhangsan /etc/gshadow #查看文件有記錄 zhangsan:!:: [root@chensiqi1 ~]# groupdel zhangsan #刪除用戶組 [root@chensiqi1 ~]# grep zhangsan /etc/group #無記錄 [root@chensiqi1 ~]# grep zhangsan /etc/gshadow #無記錄
總結:
groupdel 比較簡單,工做中是啊用的頻率1很是少,你們會以上簡單應用就能夠了。
2.2.9 用戶信息修改相關命令usermod
usermod命令功能十分強大,在生產場景中使用頻率雖然不是不少,但仍是比較重要的。它不只能更改用戶的shell類型,所歸屬用戶組,還能改用戶密碼的有效期,登陸名等不少用戶的信息。
與usermod命令有關的文件有:
- /etc/passwd :用戶帳號資料文件
- /etc/shadow :用戶帳號資訊加密文件
- /etc/group :用戶組資訊文件
- /etc/gshadow :組密碼文件
1)usermod語法
|usermod參數選項|註釋說明(帶特殊顏色的表示重要,須要掌握)|
|--|--|
|-c comment|增長用戶帳號/etc/passwd中的註解說明欄(第5欄)。這個-c參數功能也可使用chfn命令來修改,固然也能夠手工修改/etc/passwd文件來實現|
|-d home_dir|更新用戶新的家目錄。若是給定-m選項,用戶舊的家目錄會搬到新的家目錄去,如舊的家目錄不存在則建個新的。|
|-e expire_date|加上用戶帳號中止日期。日期格式爲:MM/DD/YY
|
|-f inactive_days|帳號過時幾往後永久停權。當值爲0時帳號則馬上被停權。而當值爲-1時則關閉此功能。預設值-1|
|-g initial_group|更新用戶新的起始登入用戶組。用戶組名需已存在。用戶組ID必須參照既有的用戶組。用戶組ID預設值爲1
|
|-G group【...】|定義用戶爲一堆groups的成員。每一個用戶組使用「,」逗號隔開。用戶組名同-g選項的限制|
|-l login_name|變動用戶login時的名稱爲login_name.其他信息不變|
|-s shell|指定新登入shell。如此欄留白,系統將選用系統預設shell。這個-s參數功能也可使用chsh命令來修改。固然也能夠手工修改/etc/passwd文件來實現
|
|-u uid|指定用戶UID值。除非接-o參數,不然ID值必須是惟一的數字(不能是負數)
|
|-L|凍結用戶的密碼,使之沒法登陸,實際就是間接修改/etc/shadow的密碼欄。在密碼欄的開頭加上「!」號,即表示凍結。這個凍結密碼的功能和usermod -e,useradd -e,chage -E或passwd -l等命令參數都有相似的功效,那就是讓用戶沒法正常登錄。|
|-U|取消凍結用戶的密碼,使之恢復登陸,實際一樣是修改/etc/shadow的密碼欄。在密碼欄的開頭取消「!」號,即表示恢復。|
2)usermod實例
實例1:使用不一樣的方法修改/etc/passwd中用戶的說明欄
[root@chensiqi1 ~]# tail -1 /etc/passwd #修改前查看一下 chensiqi1:x:809:809::/home/chensiqi1:/bin/bash [root@chensiqi1 ~]# usermod -c 00chensiqi1 chensiqi1 #修改帳戶的註釋說明信息 [root@chensiqi1 ~]# tail -1 /etc/passwd #查看修改結果 chensiqi1:x:809:809:00chensiqi1:/home/chensiqi1:/bin/bash [root@chensiqi1 ~]# chfn -f information chensiqi1 #chfn也能夠修改 Changing finger information for chensiqi1. Finger information changed. [root@chensiqi1 ~]# tail -1 /etc/passwd chensiqi1:x:809:809:information:/home/chensiqi1:/bin/bash
提示:實例1的用法,僅在這裏說明用,真正工做中使用的很少,屬於瞭解內容。
因爲有前面useradd命令的講解基礎了,這裏就不過多演示了。
2.3 用戶管理命令小結
1,和用戶相關的配置文件知識點:
/etc/passwd 帳號文件及不一樣列內容
/etc/shadow 帳號密碼文件及不一樣列內容
/etc/group 組的文件及不一樣列內容
/etc/gshadow 組密碼文件及不一樣列內容
2,用戶管理命令
useradd -u -g -G -s -M -e -c -d
初始化用戶對應的幾個文件/etc/skel,/etc/default/useradd,/etc/login.defs
userdel -r
usermod -L -U
chage -l(小寫) -E
passwd --stdin
3,組管理命令
groupadd -g