第2章 細說Linux系統用戶/組管理(1)

2.1 用戶和組的基本概念

用戶和組是操做系統中一種身份認證資源。 html

每一個用戶都有用戶名、用戶的惟一編號uid(user id)、所屬組及其默認的shell,可能還有密碼、家目錄、附屬組、註釋信息等。 mysql

每一個組也有本身的名稱、組惟一編號gid(group id)。通常來講,gid和uid是能夠不相同的,但絕大多數都會讓它們保持一致,大體屬於約定俗成類的概念吧。 nginx

組分爲主組(primary group)和輔助組(secondary group)兩種,用戶必定會屬於某個主組,也能夠同時加入多個輔助組。 web

在Linux中,用戶分爲3類: 算法

(1). 超級管理員 sql

超級管理員是最高權限者,它的uid=0,默認超級管理員用戶名爲root。由於uid默認具備惟一性,因此超級管理員默認只能有一個(如何添加額外的超級管理員,見useradd命令),但這一個超級管理員的名稱並不是必定要是root。可是沒人會去改root的名稱,在後續很是很是多的程序中,都認爲超級管理員名稱爲root,這裏要是一改,牽一髮而動全身。 shell

(2). 系統用戶 vim

有時候須要一類具備某些特權但又不須要登陸操做系統的用戶,這類用戶稱爲系統用戶。它們的uid範圍從201到999(不包括1000),有些老版本範圍是1到499(centos 6),出於安全考慮,它們通常不用來登陸,因此它們的shell通常是/sbin/nologin,並且大多數時候它們是沒有家目錄的。 centos

(3). 普通用戶 安全

普通用戶是權限受到限制的用戶,默認只能執行/bin、/usr/bin、/usr/local/bin和自身家目錄下的命令。它們的uid從500開始。儘管普通用戶權限收到限制,可是它對自身家目錄下的文件是有全部權限的。

超級管理員和其餘類型的用戶,它們的命令提示符是不同的。uid=0的超級管理員,命令提示符是"#",其餘的爲"$"。

image

默認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 16 2014 .bash_logout
-rw-r--r--. 1 root root 176 Oct 16 2014 .bash_profile
-rw-r--r--. 1 root root 124 Oct 16 2014 .bashrc

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

  imageimage

要解決這個問題,只需拷貝一個正常的.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/0        192.168.100.1    Wed Mar 30 15:16   still logged in  
root     pts/1        192.168.100.1    Wed Mar 30 14:21 - 14:21  (00:00)   
root     pts/1        192.168.100.1    Wed Mar 30 14:04 - 14:10  (00:06)   
root     pts/0        192.168.100.1    Wed Mar 30 13:12 - 15:16  (02:04)   
 
wtmp begins Thu Feb 18 20:59:39 2016

2.4.5 lastb

查看誰嘗試登錄過但沒有登陸成功的。即可以審覈和查看誰曾經不斷的登陸,可能那就是黑客。

-n:只列出最近的n個嘗試對象。

2.4.6 who和w

都是查看誰登陸過,並幹了什麼事

w查看的信息比who多。

shell> who
root     tty1         2017-06-07 00:49
root     pts/0        2017-06-07 02: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:49    7:36m  0.24s  0.24s -bash
root     pts/0    192.168.100.1    02:06    6.00s  0.97s  0.02s w

其中w的第一行,分別表示當前時間,已開機時長,當前在線用戶,過去一、五、15分鐘的平均負載率。這一行和uptime命令獲取的信息是徹底一致的。

2.4.7 lastlog

能夠查看登陸的來源IP

-u 指定查看用戶

shell> lastlog|head -n 10
Username         Port     From             Latest
root             pts/0    192.168.100.1    Wed Mar 30 15:16:25 +0800 2016
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**

2.5 su和sudo

http://www.cnblogs.com/f-ck-need-u/p/7011669.html

相關文章
相關標籤/搜索