當前位置: 妍妍網 > 碼農

細說Linux系統使用者/組管理

2024-06-06碼農

連結:https://www.cnblogs.com/f-ck-need-u/p/7011460.html

1 使用者和組的基本概念

使用者和組是作業系統中一種身份認證資源。

每個使用者都有使用者名稱、使用者的唯一編號uid(user id)、所屬組及其預設的shell,可能還有密碼、家目錄、附屬組、註釋資訊等。

每個組也有自己的名稱、組唯一編號gid(group id)。一般來說,gid和uid是可以不相同的,但絕大多數都會讓它們保持一致,大致屬於約定俗成類的概念吧。

組分為主組(primary group)和輔助組(secondary group)兩種,使用者一定會屬於某個主組,也可以同時加入多個輔助組。

在Linux中,使用者分為3類:

(1). 超級管理員

超級管理員是最高許可權者,它的uid=0,預設超級管理員使用者名稱為root。因為uid預設具有唯一性,所以超級管理員預設只能有一個(如何添加額外的超級管理員,見useradd命令),但這一個超級管理員的名稱並非一定要是root。但是沒人會去改root的名稱,在後續非常非常多的程式中,都認為超級管理員名稱為root,這裏要是一改,牽一發而動全身。

(2). 系統使用者

有時候需要一類具有某些特權但又不需要登入作業系統的使用者,這類使用者稱為系統使用者。它們的uid範圍從201到999(不包括1000),有些老版本範圍是1到499(centos 6),出於安全考慮,它們一般不用來登入,所以它們的shell一般是/sbin/nologin,而且大多數時候它們是沒有家目錄的。

(3). 普通使用者

普通使用者是許可權受到限制的使用者,預設只能執行/bin、/usr/bin、/usr/local/bin和自身家目錄下的命令。它們的uid從500開始。盡管普通使用者許可權收到限制,但是它對自身家目錄下的檔是有所有許可權的。

超級管理員和其他型別的使用者,它們的命令提示字元是不一樣的。uid=0的超級管理員,命令提示字元是"#",其他的為"$"。

預設root使用者的家目錄為/root,其他使用者的家目錄一般在/home下以使用者名稱命名的目錄中,如longshuai這個使用者的家目錄為/home/longshuai。當然,家目錄是可以自訂位置和名稱的。

2.2 使用者和組管理相關的檔

2.2.1 使用者檔/etc/passwd

/etc/passwd檔裏記錄的是 作業系統中使用者 的資訊,這裏面記錄了幾行就表示系統中有幾個系統使用者。它的格式大致如下:

root :x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody :x:99:99:Nobody:/:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

nginx:x:498:499:Nginx web server:/var/lib/nginx:/sbin/nologin

longshuai:x:1000:1000:: /home/longshuai :/bin/bash

每一行表示一個使用者,每一行的格式都是6個冒號共7列內容,其中有很多使用者的某些列內容是留空的。

使用者名稱:x:uid:gid:使用者註釋資訊:家目錄:使用的shell型別

  • 第一列:使用者名稱。註意兩個個特殊的使用者名稱,root、nobody

  • 第二列:x。在以前老版本的系統上,第二列是存放使用者密碼的,但是密碼和使用者資訊放在一起不便於管理(金鑰要保證其特殊內容),所以後來將密碼單獨放在另一個檔/etc/shadow中,這裏就都寫成x了

  • 第三列:uid

  • 第四列:gid

  • 第五列:使用者註釋資訊。

  • 第六列:使用者家目錄。註意root使用者的家目錄為/root

  • 第七列:使用者的預設shell,雖然叫shell,但其實可以是任意一個可執行程式或指令碼。例如上面的/bin/bash、/sbin/nologin、/sbin/shutdown

  • 使用者的預設shell表示的是使用者登入(如果允許登入)時的環境或執行的命令。例如shell為/bin/bash時,表示登入時就執行/bin/bash命令進入bash環境;shell為/sbin/nologin表示該使用者不能登入,之所以不能登入不是因為指定了這個特殊的程式,而是由/sbin/nologin這個程式的功能實作的,假如修改Linux的原始碼,將/sbin/nologin這個程式變成可登入,那麽shell為/sbin/nologin時也是可以登入的。

    2.2.2 密碼檔/etc/shadow

    /etc/shadow檔中存放的是使用者的密碼資訊。該檔具有特殊內容,除了超級管理員,任何人都不能直接讀取和修改該檔,而使用者自身之所以能修改密碼,則是因為passwd程式的suid內容,使得修改密碼時臨時提升為root許可權。

    該檔的格式大致如下:

    root:$ 6 $hS4yqJu7WQfGlk0M$Xj/SCS5z4BWSZKN0raNncu6VMuWdUVbDScMYxOgB7mXUj./dXJN0zADAXQUMg0CuWVRyZUu6npPLWoyv8eXPA.:: 0 : 99999 : 7 ::: ftp :*: 16659 : 0 : 99999 : 7 ::: nobody: *: 16659 : 0 : 99999 : 7 ::: longshuai:$ 6 $8LGe6Eh6$vox9.OF3J9nD0KtOYj2hE9DjfU3iRN.v3up4PbKKGWLOy3k1Up50bbo7Xii/Uti05hlqhktAf/dZFy2RrGp5W/: 17323 : 0 : 99999 : 7 :::

    每一行表示一個使用者密碼的內容,有8個冒號共9列內容。該檔更詳細的資訊看wiki: https://en.wikipedia.org/wiki/Passwd#Shadow_file

  • 第一列:使用者名稱。

  • 第二列:加密後的密碼。但是這一列是有玄機的,有些特殊的字元表示特殊的意義。

  • ①.該列留空,即"::",表示該使用者沒有密碼。

  • ②.該列為"!",即":!:",表示該使用者被鎖,被鎖將無法登陸,但是可能其他的登入方式是不受限制的,如ssh key的方式,su的方式。

  • ③.該列為"*",即":*:",也表示該使用者被鎖,和"!"效果是一樣的。

  • ④.該列以"!"或"!!"開頭,則也表示該使用者被鎖。

  • ⑤.該列為"!!",即":!!:",表示該使用者從來沒設定過密碼。

  • ⑥.如果格式為"$id$salt$hashed",則表示該使用者密碼正常。其中$id$的id表示密碼的加密演算法,$1$表示使用MD5演算法,$2a$表示使用Blowfish演算法,"$2y$"是另一演算法長度的Blowfish,"$5$"表示SHA-256演算法,而"$6$"表示SHA-512演算法,可見上面的結果中都是使用sha-512演算法的。$5$和$6$這兩種演算法的破解難度遠高於MD5。$salt$是加密時使用的salt,$hashed才是真正的密碼部份。

  • 第三列:從1970年1月1日到上次密碼修改經過的時間(天數)。透過計算現在離1970年1月1日的天數減去這個值,結果就是上次修改密碼到現在已經經過了多少天,即現在的密碼已經使用了多少天。

  • 第四列:密碼最少使用期限(天數)。省略或者0表示不設定期限。例如,剛修改完密碼又想修改,可以限制多久才能再次修改

  • 第五列:密碼最大使用期限(天數)。超過了它不一定密碼就失效,可能下一個欄位設定了過期後的寬限天數。設定為空時將永不過期,後面設定的提醒和警告將失效。root等一些使用者的已經預設設定為了99999,表示永不過期。如果值設定小於最短使用期限,使用者將不能修改密碼。

  • 第六列:密碼過期前多少天就開始提醒使用者密碼將要過期。空或0將不提醒。

  • 第七列:密碼過期後寬限的天數,在寬限時間內使用者無法使用原密碼登入,必須改密碼或者聯系管理員。設定為空表示沒有強制的寬限時間,可以過期後的任意時間內修改密碼。

  • 第八列:帳號過期時間。從1970年1月1日開始計算天數。設定為空帳號將永不過期,不能設定為0。不同於密碼過期,密碼過期後帳戶還有效,改密碼後還能登入;帳號過期後帳號失效,修改密碼重設密碼都無法使用該帳號。

  • 第九列:保留欄位。

  • 2.2.3 組檔/etc/group和/etc/gshadow

    大致知道有這麽兩個檔即可,至於檔中的內容無需關註。

    /etc/group包含了組資訊。每行一個組,每一行3個冒號共4列內容。

    root:x: 0 : longshuai:x: 500 : xiaofang:x: 501 :zhangsan,lisi

  • 第一列:組名。

  • 第二列:占位符。

  • 第三列:gid。

  • 第四列:該組下的user列表,這些user成員以該組做為輔助組,多個成員使用逗號隔開。

  • /etc/gshadow包含了組密碼資訊

    2.2.4 骨架目錄/etc/skel

    骨架目錄中的檔是每次新建使用者時,都會復制到新使用者家目錄裏的檔。預設只有3個環境配置檔,可以修改這裏面的內容,或者添加幾個檔在骨架目錄中,以後新建使用者時就會自動獲取到這些環境和檔。

    shell> ls –l -A /etc/skel
    total
    12
    -rw-r--r--. 1 root root 18 Oct 162014 .bash_logout
    -rw-r--r--. 1 root root 176 Oct 162014 .bash_profile
    -rw-r--r--. 1 root root 124 Oct 162014 .bashrc

    刪除家目錄下這些檔,會導致某些設定出現問題。例如刪除".bashrc"這個檔,會導致提示符變異的問題,如下右圖。

    要解決這個問題,只需拷貝一個正常的.bashrc檔到其家目錄中即可。一般還會修改該檔的所有者和許可權。

    2.2.5 /etc/login.defs

    設定使用者帳號限制的檔。該檔裏的配置對root使用者無效。

    如果/etc/shadow檔裏有相同的選項,則以/etc/shadow裏的設定為準,也就是說/etc/shadow的配置優先級高於/etc/login.defs。

    該檔有很多配置項,檔的預設內容只給出了一小部份,若想知道全部的配置項以及配個配置項的詳細說明,可以"man 5 login.defs"檢視。

    [root@xuexi ~]# less /etc/login.defs
    #QMAIL_DIR Maildir # QMAIL_DIR是Qmail信件的目錄,所以可以不設定它
    MAIL_DIR
    /var/spool/mail # 預設信件根目錄,即信箱
    #MAIL_FILE .mail # mail檔的格式是.mail
    # Password aging controls:
    PASS_MAX_DAYS
    99999 # 密碼最大有效期(天)
    PASS_MIN_DAYS
    0 # 兩次密碼修改之間最小時間間隔
    PASS_MIN_LEN
    5 # 密碼最短長度
    PASS_WARN_AGE
    7 # 密碼過期前給警告資訊的時間
    # 控制useradd建立使用者時自動選擇的uid範圍
    # Min
    /max values for automatic uid selection in useradd
    UID_MIN
    1000
    UID_MAX
    60000
    # System accounts
    SYS_UID_MIN
    201
    SYS_UID_MAX
    999
    # 控制groupadd建立組時自動選擇的gid範圍
    # Min
    /max values for automatic gid selection in groupadd
    GID_MIN
    1000
    GID_MAX
    60000
    # System accounts
    SYS_GID_MIN
    201
    SYS_GID_MAX
    999
    # 設定此項後,在刪除使用者時,將自動刪除使用者擁有的at
    /cron/print等job
    #USERDEL_CMD
    /usr/sbin/userdel_local
    # 控制useradd添加使用者時是否預設建立家目錄,useradd
    -m選項會覆蓋此處設定
    CREATE_HOME yes
    # 設定建立家目錄時的umask值,若不指定則預設為022
    UMASK
    077
    # 設定此項表示當組中沒有成員時自動刪除該組
    # 且useradd是否同時建立同使用者名稱的主組。(該檔中並沒有此項說明,來自於man useradd中
    -g選項的說明)
    USERGROUPS_ENAB yes
    # 設定使用者和組密碼的加密演算法
    ENCRYPT_METHOD SHA512

    註意,/etc/login.defs中的設定控制的是shadow-utils包中的元件,也就是說,該元件中的工具執行操作時會讀取該檔中的配置。該元件中包含下面的程式:

    /usr/bin/gpasswd :administer /etc/group and /etc/gshadow
    /usr/bin/newgrp :log in to a new group,可用來修改gid,哪怕是正在登陸的會話也可以修改
    /usr/bin/sg :execute command as different group ID
    /usr/sbin/groupadd :添加組
    /usr/sbin/groupdel :刪除組
    /usr/sbin/groupmems :管理當前使用者的主組中的成員,root使用者則可以指定要管理的組
    /usr/sbin/groupmod :modify a group definition on the system
    /usr/sbin/grpck :verify integrity of group files
    /usr/sbin/grpconv :無視它
    /usr/sbin/grpunconv :無視它
    /usr/sbin/pwconv :無視它
    /usr/sbin/pwunconv :無視它
    /usr/sbin/adduser :是useradd的一個軟連結,添加使用者
    /usr/sbin/chpasswd :update passwords in batch mode
    /usr/sbin/newusers :update and create new users in batch
    /usr/sbin/pwck :verify integrity of passsword files
    /usr/sbin/useradd :添加使用者
    /usr/sbin/userdel :刪除使用者
    /usr/sbin/usermod :重定義使用者資訊
    /usr/sbin/vigr :edit the group and shadow-group file
    /usr/sbin/vipw :edit the password and shadow-password file
    /usr/bin/lastlog :輸出所有使用者或給定使用者最近登入資訊

    2.2.6 /etc/default/useradd

    建立使用者時的預設配置。useradd -D修改的就是此檔。

    [root@xuexi ~]# cat /etc/default/useradd
    # useradd defaults
    file
    GROUP
    =100 # 在useradd使用-N或/etc/login.defs中USERGROUPS_ENAB=no時表示建立使用者時不建立同使用者名稱的主組(primary group),
    # 此時新建的使用者將預設以此組為主組,網上關於該設定的很多說明都是錯的,具體可看man useradd的
    -g選項或useradd -D的-g選項
    HOME
    =/home # 把使用者的家目錄建在/home中
    INACTIVE
    =-1 # 是否啟用帳號過期設定(是帳號過期不是密碼過期),-1表示不啟用
    EXPIRE
    = # 帳號過期時間,不設定表示不啟用
    SHELL
    =/bin/bash # 新建使用者預設的shell型別
    SKEL
    =/etc/skel # 指定骨架目錄,前文的/etc/skel就在這裏
    CREATE_MAIL_SPOOL
    =yes # 是否建立使用者mail緩沖

    man useradd的useradd -D選項介紹部份說明了這些項的意義。

    2.3 使用者和組管理命令

    2.3.1 useradd和adduser

    adduser是useradd的一個軟連結。

    useradd [options] login_name
    選項說明:
    -b:指定家目錄的basedir,預設為/home目錄
    -d:指定使用者家目錄,不寫時預設為/home/user_name
    -m:要建立家目錄時,若家目錄不存在則自動建立,若不指定該項且/etc/login.defs中的CREATE_HOME未啟用時將不會建立家目錄
    -M:顯式指明不要建立家目錄,會覆蓋/etc/login.defs中的CREATE_HOME設定
    -g:指定使用者主組,要求組已存在
    -G:指定使用者的輔助組,多個組以逗號分隔
    -N:明確指明不要建立和使用者名稱同名的組名
    -U:明確指明要建立一個和使用者名稱同名的組,並將使用者加入到此組中
    -o:允許建立一個重復UID的使用者,只有和-u選項同時使用時才生效
    -r:建立一個系統使用者。useradd命令不會為此選項的系統使用者建立家目錄,除非明確使用-m選項
    -s:指定使用者登入的shell,預設留空。此時將選擇/etc/default/useradd中的SHELL變量設定
    -u:指定使用者uid,預設uid必須唯一,除非使用了-o選項
    -c:使用者的註釋資訊
    -k:指定骨架目錄(skeleton)
    -K:修改/etc/login.defs檔中有關於使用者的配置項,不能修改組相關的配置。設定方式為KEY=VALUE,如-K UID_MIN=100
    -D:修改useradd建立使用者時的預設選項,就修改/etc/default/useradd檔
    -e:帳戶過期時間,格式為"YYYY-MM-DD"
    -f:密碼過期後,該帳號還能存活多久才被禁用,設定為0表示密碼過期立即禁用帳戶,設定為-1表示禁用此功能
    -l:不要將使用者的資訊寫入到lastlog和faillog檔中。預設情況下,使用者資訊會寫入到這兩個檔中
    useradd
    -D [options]
    修改
    /etc/default/useradd檔
    選項說明:不加任何選項時會列出預設內容
    -b, --base-dir BASE_DIR
    -e, --expiredate EXPIRE_DATE
    -f, --inactive INACTIVE
    -g, --gid GROUP
    -s, --shell SHELL

    範例:

    [root@xuexi ~]# useradd -D -e "2016-08-20" # 設定使用者2016-08-20過期
    [root@xuexi
    ~]# useradd -D
    GROUP
    =100
    HOME
    =/home
    INACTIVE
    =-1
    EXPIRE
    =2016-08-20
    SHELL
    =/bin/bash
    SKEL
    =/etc/skel
    CREATE_MAIL_SPOOL
    =yes
    [root@xuexi
    ~]# cat /etc/default/useradd
    # useradd defaults
    file
    GROUP
    =100
    HOME
    =/home
    INACTIVE
    =-1
    EXPIRE
    =2016-08-20
    SHELL
    =/bin/bash
    SKEL
    =/etc/skel
    CREATE_MAIL_SPOOL
    =yes

    useradd建立使用者時,預設會自動建立一個和使用者名稱相同的使用者組,這是/etc/login.defs中的USERGROUP_ENAB變量控制的。

    useradd建立普通使用者時,不加任何和家目錄相關的選項時,是否建立家目錄是由/etc/login.defs中的CREATE_HOME變量控制的。

    2.3.2 批次建立使用者newusers

    newusers用於批次建立或修改已有使用者資訊。在建立使用者時,它會讀取/etc/login.defs檔中的配置項。

    newusers [options] [file]

    newusers命令從file中或標準輸入中讀取要建立或修改使用者的資訊,檔中每行格式都一樣,一行代表一個使用者。格式如下:

    pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell

    各列的意義如下:

  • pw_name:使用者名稱,若不存在則新建立,否則修改已存在使用者的資訊

  • pw_passwd:使用者密碼,該項使用明文密碼,在修改或建立使用者時會按照指定的演算法自動對其進行加密轉換

  • pw_uid:指定uid,留空則自動選擇uid。如果該項為已存在的使用者名稱,則使用該使用者的uid,但不建議這麽做,uid應盡量保證唯一性

  • pw_gid:使用者主組的gid或組名。若給定組不存在,則自動建立組。若留空,則建立同使用者名稱的組,gid將自動選擇

  • pw_gecos:使用者註釋資訊

  • pw_dir:指定使用者家目錄,若不存在則自動建立。留空則不建立。

  • :註意,newusers命令不會遞迴建立父目錄,父目錄不存在時將會給出資訊,但newusers命令仍會繼續執行

  • :以完成建立剩下的使用者,所以這些錯誤的使用者家目錄需要手動去建立。

  • pw_shell:指定使用者的預設shell

  • newusers [options] [file]

    選項說明:

    -c:指定加密方法,可選DES,MD5,NONE,SHA256和SHA512

    -r:建立一個系統使用者

    newusers首先嘗試建立或修改所有指定的使用者,然後將資訊寫入到user和group的檔中。如果嘗試建立或修改使用者過程中發生錯誤,則所有動作都將回滾,但如果在寫入過程中發生錯誤,則寫入成功的不會回滾,這將可能導致檔的不一致性。要檢查使用者、組檔的一致性,可以使用showdow-utils包提供的grpck和pwck命令。

    範例:

    shell> cat /tmp/userfile
    zhangsan:
    123456:2000:2000::/home/zhangsan:/bin/bash
    lisi:
    123456:::::/bin/bash
    shell> newusers
    -c SHA512 /tmp/userfile
    shell> tail -2 /etc/passwd
    zhangsan:x:
    2000:2000::/home/zhangsan:/bin/bash
    lisi:x:
    2001:2001:::/bin/bash
    shell> tail -2 /etc/shadow
    zhangsan:$
    6$aI1Mk/krF$xN0TFOIRibrb/mYngJ/sV3M7g4zOxqOh8CWyDlI0uwmr5qNTzsmwauRFvCpfLtvtiJYZ/5bil.XfJMNB.sqDY1:17323:0:99999:7:::
    lisi:$
    6$bngXo/V6wWW$.TlQCJtEm9krBX0Oiep/iahS59a/BwVYcSc8F9lAnMGF55K6W5YoUZ2nK6WkMta3p7sihkxHm/AuNrrJ6hqNn1:17323:0:99999:7:::

    2.3.3 groupadd

    建立一個新組。

    groupadd [options] group
    選項說明:
    -f:如果要建立的組已經存在,預設會錯誤結束,使用該選項則強制建立且以正確狀態結束,只不過gid可能會不受控制。
    -g:指定gid,預設gid必須唯一,除非使用了-o選項。
    -K:修改/etc/login.defs中關於組相關的配置項。配置方式為KEY=VALUE,例如-K GID_MIN=100 -K GID_MAX=499
    -o:允許建立一個非唯一gid的組
    -r:建立系統組

    2.3.4 修改密碼passwd

    修改密碼的工具。預設passwd命令不允許為使用者建立空密碼。

    passwd修改密碼前會透過pam認證使用者,pam配置檔中與此相關的設定項如下:

    passwd password requisite pam_cracklib.so retry=3

    passwd password required pam_unix.so use_authtok

    命令的用法如下:

    passwd options [username]
    選項說明:
    -l:釘選指定使用者的密碼,在/etc/shadow的密碼列加上字首"!""!!"。這種釘選不是完全釘選,使用ssh公鑰還是能登入。要完全釘選,使用chage -E 0來設定帳戶過期。
    -u:解鎖-l釘選的密碼,解鎖的方式是將/etc/shadow的密碼列的字首"!""!!"移除掉。但不能移除只有"!""!!"的項。
    --stdin:從標準輸入中讀取密碼
    -d:刪除使用者密碼,將/etc/shadow的密碼列設定為空
    -f:指定強制操作
    -e:強制密碼過期,下次登入將強制要求修改密碼
    -n:密碼最小使用天數
    -x:最大密碼使用天數
    -w:過期前幾天開始提示使用者密碼將要過期
    -i:設定密碼過期後多少天,使用者才過期。使用者過期將被禁用,修改密碼也無法登陸。

    2.3.5 批次修改密碼chpasswd

    以批次處理模式從標準輸入中獲取提供的使用者和密碼來修改使用者密碼,可以一次修改多個使用者密碼。也就是說不用互動。適用於一次性建立了多個使用者時為他們提供密碼。

    chpasswd [-e -c] "user:passwd"
    -c:指定加密演算法,可選的演算法有DES,MD5,NONE,SHA256和SHA512
    user:passwd為使用者密碼對,其中預設passwd是明文密碼,可以指定多對,每行一個使用者密碼對。前提是使用者是已存在的。
    -e:passwd預設使用的是明文密碼,如果要使用密文,則使用-e選項。參見man chpasswd

    chpasswd會讀取/etc/login.defs中的相關配置,修改成功後會將密碼資訊寫入到密碼檔中。

    該命令的修改密碼的處理方式是先在記憶體中修改,如果所有使用者的密碼都能設定成功,然後才寫入到磁盤密碼檔中。在記憶體中修改過程中出錯,則所有修改都回滾,但若在寫入密碼檔過程中出錯,則成功的不會回滾。

    範例:

    修改單個使用者密碼。

    shell> echo"user1:123456" | chpasswd -c SHA512

    修改多個使用者密碼,則提供的每個使用者對都要分行。

    shell> echo -e 'usertest:123456\nusertest2:123456' | chpasswd

    更方便的是寫入到檔中,每行一個使用者密碼對。

    shell> cat /tmp/passwdfile
    zhangsan:
    123456
    lisi:
    123456
    shell
    > chapasswd -c SHA512 </tmp/passwdfile

    2.3.6 chage

    chage命令主要修改或檢視和密碼時間相關的內容。具體的看man文件,可能用到的兩個選項如下:

    -l:列出指定使用者密碼相關資訊

    -E:指定帳戶(不是密碼)過期時間,所以是強釘選,如果指定為0,則立即過期,即直接釘選該使用者

    [root@server2 ~]# chage -l zhangsan
    Last password change : Jun
    06, 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
    Number of days of warning before password expires :
    7
    [root@server2
    ~]# chage -E 0 zhangsan
    [root@server2
    ~]# chage -l zhangsan
    Last password change : Jun
    06, 2017
    Password expires : never
    Password inactive : never
    Account expires : Jan
    01, 1970
    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

    2.3.7 刪除使用者和組

    userdel命令用於刪除使用者。

    userdel [options] login_name
    -r:遞迴刪除家目錄,預設不刪除家目錄。
    -f:強制刪除使用者,即使這個使用者正處於登入狀態。同時也會強制刪除家目錄。

    一般不直接刪除家目錄,即不用-r,可以vim /etc/passwd,將不需要的使用者直接註釋掉。

    groupdel命令刪除組。如果要刪除的組是某使用者的主組,需要先刪除主組中的使用者。

    2.3.8 usermod

    修改帳戶內容資訊。必須要確保在執行該命令的時候,待修改的使用者沒有在執行行程。

    usermod [options] login
    選項說明:
    -l:修改使用者名稱,僅僅只是改使用者名稱,其他的一切都不會改動(uid、家目錄等)
    -u:新的uid,新的uid必須唯一,除非同時使用了-o選項
    -g:修改使用者主組,可以是以gid或組名。對於那些以舊組為所屬組的檔(除原家目錄),需要重新手動修改其所屬組
    -m:移動家目錄內容到新的位置,該選項只在和-d選項一起使用時才生效
    -d:修改使用者的家目錄位置,若不存在則自動建立。預設舊的家目錄不會刪除
    如果同時指定了
    -m選項,則舊的家目錄中的內容會移到新家目錄
    如果當前使用者家目錄不存在或沒有家目錄,則也不會建立新的家目錄
    -o:允許使用者使用非唯一的UID
    -s:修改用的shell,留空則選擇預設shell
    -c:修改使用者註釋資訊
    -a:將使用者以追加的方式加入到輔助組中,只能和-G選項一起使用
    -G:將使用者加入指定的輔助組中,若此處未列出某組,而此前該使用者又是該組成員,則會刪除該組中此成員
    -L:釘選使用者的密碼,將在/etc/shadow的密碼列加上字首"!""!!"
    -U:解鎖使用者的密碼,解鎖的方式是移除shadow檔密碼列的字首"!""!!"
    -e:帳戶過期時間,時間格式為"YYYY-MM-DD",如果給一個空的參數,則立即禁用該帳戶
    -f:密碼過期後多少天,帳戶才過期被禁用,0表示密碼過期帳戶立即禁用,-1表示禁用該功能

    同樣,還有groupmod修改組資訊,用法非常簡單,幾乎也用不上,不多說了。

    2.3.9 vipw和vigr

    vipw和vigr是編輯使用者和組檔的工具,vipw可以修改/etc/passwd和/etc/shadow,vigr可以修改/etc/group和/etc/gshadow,用這兩個工具比較安全,在修改的時候會檢查檔的一致性。

    刪除使用者出錯時,提示使用者正在被行程占用。可以使用vi編輯/etc/paswd和/etc/shadow檔將該使用者對應的行刪除掉。也可以使用vipw和vipw -s來分別編輯/etc/paswd和/etc/shadow檔。它們的作用是一樣的。

    2.3.10 手動建立使用者

    手動建立使用者的全過程:需要管理員許可權。

  • 在/etc/group中添加使用者所屬組的相關資訊。如果使用者還有輔助組則在對應組中加入該使用者作為成員。

  • 在/etc/passwd和/etc/shadow中添加使用者相關資訊。此時指定的家目錄還不存在,密碼不存在,所以/etc/shadow的密碼位使用"!!"代替。

  • 建立家目錄,並復制骨架目錄中的檔到家目錄中。

  • shell> mkdir /home/user_name
    shell
    > cp -r /etc/skel /home/user_name。

  • 修改家目錄及子目錄的所有者和屬組。

  • shell> chown -R user_name:user_name /home/user_name

  • 修改家目錄及子目錄的許可權。例如設定組和其他使用者無任何許可權但所有者有。

  • shell> chmod -R 700 /home/user_name

    到此為止,使用者已經建立完成了,只是沒有密碼,所以只能su,不能登入。

  • 生成密碼。

  • 使用openssl passwd生成密碼。但openssl passwd生成的密碼只能是MD5演算法的,很容易被破解

  • # 生成使用md5演算法的密碼,然後將其復制到/etc/shadow對應的密碼位
    # 其中-1是指md5,-salt '12345678'是使用8位元字元建立密碼的雜項
    shell> openssl passwd -1 -salt '12345678' '123456'

  • 直接使用passwd命令建立密碼

  • 測試手動建立的使用者是否可以正確登入。

  • 以下是全過程。

    shell> mkdir /tmp/12;cp /etc/group /etc/passwd /etc/shadow /tmp/12/ # 備份這些檔
    shell
    > echo"userX:x:666" >> /etc/group
    shell
    > echo"userX:x:666:666::/home/userX:/bin/bash" >> /etc/passwd
    shell
    > echo'userX:!!:17121:0:99999::::' >> /etc/shadow
    shell
    > cp -r /etc/skel /home/userX
    shell
    > chown -R userX:userX /home/userX
    shell
    > chmod -R go= /home/userX
    shell
    > passwd --stdin userX <<< '123456'

    測試使用userX是否可以登入。

    如果是使用openssl passwd建立的密碼。那麽使用下面的方法將這部份密碼替換到/etc/shadow中。

    shell> field=$(tail -1 /etc/shadow | cut -d":" -f2)
    shell
    > password=$(openssl passwd -1 -salt 'abcdefg'123456)
    shell
    > sed -i '$s%'$field'%'$password'%' /etc/shadow

    2.4 其他使用者相關命令

    2.4.1 finger檢視使用者資訊

    從CentOS 6版本開始就沒有該命令了,要先安裝。

    shell> yum -y install finger
    shell> useradd zhangsan
    shell> finger zhangsan
    Login: zhangsan Name:
    Directory: /home/zhangsan Shell: /bin/bash
    Never logged in.
    No mail.
    No Plan.

    2.4.2 id

    id username
    -u:得到uid
    -n:得到使用者名稱而不是uid
    -z:無任何空白字元輸出模式,不能在預設的格式下使用。

    範例:

    shell> id root
    uid
    =0(root) gid=0(root) groups=0(root)
    shell
    > id wangwu
    uid
    =500(wangwu) gid=500(wangwu) groups=500(wangwu)
    shell
    > id -u wangwu
    500
    shell
    > id -u -z wangwu
    2002[root@server2 ~]#

    2.4.3 users

    檢視當前正在登陸的使用者名稱。

    2.4.4 last

    檢視最近登入的使用者列表,其實last檢視的是/var/log/wtmp檔。

    -n 顯示行數:列出最近幾次登入的使用者

    [root@xuexi ~]# last -4
    root pts
    /0192.168.100.1 Wed Mar 3015:16 still logged in
    root pts
    /1192.168.100.1 Wed Mar 3014:21 - 14:21 (00:00)
    root pts
    /1192.168.100.1 Wed Mar 3014:04 - 14:10 (00:06)
    root pts
    /0192.168.100.1 Wed Mar 3013:12 - 15:16 (02:04)
    wtmp begins Thu Feb
    1820:59:392016

    2.4.5 lastb

    檢視誰嘗試登陸過但沒有登入成功的。即能夠稽核和檢視誰曾經不斷的登入,可能那就是黑客。

    -n:只列出最近的n個嘗試物件。

    2.4.6 who和w

    都是檢視誰登入過,並幹了什麽事

    w檢視的資訊比who多。

    shell> who
    root tty1
    2017-06-0700:49
    root pts
    /02017-06-0702:06 (192.168.100.1)
    shell
    > w
    08:26:38 up 18:48, 2 users, load average: 0.00, 0.01, 0.05
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root tty1
    00:497:36m 0.24s 0.24s -bash
    root pts
    /0192.168.100.102:066.00s 0.97s 0.02s w

    其中 w的第一行,分別表示當前時間,已開機時長,當前線上使用者,過去 1、 5、 15分鐘的平均負載率。這一行和 uptime命令獲取的資訊是完全一致的。

    2.4.7 lastlog

    可以檢視登入的來源IP

    -u 指定檢視使用者

    shell> lastlog|head -n 10
    Username Port From Latest
    root pts
    /0192.168.100.1 Wed Mar 3015:16:25 +08002016
    bin
    **Never logged in**
    daemon
    **Never logged in**
    adm
    **Never logged in**
    lp **Never logged in**
    sync **Never logged in**
    shutdown
    **Never logged in**
    halt
    **Never logged in**
    mail
    **Never logged in**

    <END>

    點這裏👇關註我,記得標星呀~