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


2.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的超級管理員,命令提示符是"#",其他的為"$"。

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的第一行,分別表示當前時間,已開機時長,當前在線用戶,過去1、5、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM