1. 程式人生 > >linux用戶管理初級(上)

linux用戶管理初級(上)

light 有效 eating 自己的 issue adduser 重復 提醒 har

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目錄下的文件,我們可為新創建的用戶提供統一的,標準的,初始化用戶環境。

下面我們就看下/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$

解答:

[root@chensiqi1 ~]$su - chensiqi2
[chensiqi2@chensiqi1 ~]$ rm -rf /*
[chensiqi2@chensiqi1 ~]$ exit
logout
[root@chensiqi1 ~]# su - chensiqi2
-bash-4.1$ 

命令說明:普通用戶強制刪除了家目錄裏的變量文件就會出現這種問題。

恢復:

[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多個參數組合例子,自定義用戶家目錄。

技術分享圖片

示例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
刪除經驗:

  1. vi /etc/passwd,然後註釋掉用戶,觀察1個月,這樣出問題可以還原。相當於操作前備份。
  2. 把登錄shell /bin/bash 改成 /sbin/nologin.
  3. 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

linux用戶管理初級(上)