1. 程式人生 > >用戶管理命令(二十)

用戶管理命令(二十)

useadd userdel groupadd

用戶管理命令:useradd,usermod,userdel,chage,groupadd,groupdel,groupmod,newgrp,gpasswd


20.1.useradd

功能:添加新用戶或更新新用戶信息

語法: useradd 選項 用戶名

常用參數:

-u:用戶uid

-g:用戶的主組

-G:附加組

-s:默認shell

-d:家目錄

-D:變更預設值

-c:註釋說明

-e:過期時間

-f: <緩沖天數> 指定在密碼過期後多少天即關閉該賬號。

-m:自動建立用戶的家目錄。

-M: 不要自動建立用戶的家目錄。

-n:取消建立以用戶名為名的用戶組。

-r: 建立系統賬戶。 


在知道怎麽使用這個命令前,先普及一些基礎知識:

用戶標識:UserID,UID,共65535個;

管理員(root):0

系統用戶:

centos5,6:1-499

centos 7:1-999

普通用戶:

centos5,6:500+

centos 7:1000+

用戶管理相關的文件:

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow


說明:

系統默認給一個家 /home/$username 家裏還添置了一些家具

指定默認shell(能不能登錄操作系統)

# cat /etc/shells

/bin/sh 早期unxi

/bin/bash 系統默認的shell(可以登錄操作系統)

/sbin/nologin 非交互式shell(不能登錄操作系統)

/bin/dash

/bin/tcsh

/bin/csh

默認還會指定uid和gid(創建一個主組)


示例:

[[email protected] ~]# useradd -u 4294967295 user2   #不成功,報錯,證明uid數超過最大值
useradd: invalid user ID ‘4294967295‘
[[email protected] ~]# useradd -u 4294967294 user2   #成功,這個數就是就是當前版本支持的最大uid數
[[email protected]
/* */ ~]# [[email protected] ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 useradd: group ‘1001‘ does not exist [[email protected] ~]# id user03 id: user03: No such user [[email protected] ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 useradd: cannot create directory /home/abc/user03 [[email protected] ~]# id user03 id: user03: No such user [[email protected] ~]# mkdir /home/abc [[email protected] ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 [[email protected] ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin) [[email protected] ~]# su - user03 [[email protected] ~]$ pwd /home/abc/user03 [[email protected] ~]# useradd -s /sbin/nologin -d /rhome/abc/ -c ‘zidingyi‘ user04 useradd: warning: the home directory already exists. Not copying any file from skel directory into it. [[email protected] ~]# su - user04 This account is currently not available. [[email protected] ~]# usermod -s /bin/bash user04 [[email protected] ~]# su - user04 -bash-4.1$ pwd /rhome/abc/ -bash-4.1$ logout [[email protected] ~]# cp -a /etc/skel/. /rhome/abc/ [[email protected] ~]# su - user04

幾個小實驗:

(1)去掉/etc/passwd裏root用戶第二列的x,確認登錄系統不需要密碼,加回x,密碼不變

[[email protected] ~]# sed -i ‘1s/x//‘ /etc/passwd
說明:驗證登錄是沒有密碼了
[[email protected] ~]# sed -i ‘1s/root::/root:x:/‘ /etc/passwd  #加回去
[[email protected] ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

(2)普通用戶只能自己改自己的密碼,還需要原密碼才能改,改的密碼還要一定的密碼復雜度(最少8位,字母,數字,符號最好都有就沒問題)

(3)用一個普通用戶來測試/etc/shadow裏的第四列

步驟一:第四列為0,這個普通用戶隨時可以修改自己的密碼

步驟二:把0改為2,這個普通用戶改密碼會報You must wait longer to change your password的錯誤

步驟三:可以使用date -s "20140719"這樣的命令把當前時間改成3天後,再去測試,發現可以改了,驗證成功;時間改回來的例子# date -s "20140716 15:12:10"

以user04為例

[[email protected] ~]# tail -1 /etc/shadow   #第四列為0
user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:0:99999:7:::
[[email protected] ~]# tail -1 /etc/shadow  #第四列改為2
user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:2:99999:7:::
[[email protected] ~]$ passwd   #報錯了
Changing password for user user04.
Changing password for user04.
(current) UNIX password: 
You must wait longer to change your password
passwd: Authentication token manipulation error
[[email protected] ~]# date -s "20170625 11:43:40"  #修改日期
Sun Jun 25 11:43:40 CST 2017
[[email protected] ~]# date
Sun Jun 25 11:43:42 CST 2017
[[email protected] ~]$ passwd
Changing password for user user04.
Changing password for user04.
(current) UNIX password: 
New password: 
Retype new password: 
Sorry, passwords do not match.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[[email protected] ~]# date -s "20170622 11:47:40"  #改回日期
Thu Jun 22 11:47:40 CST 2017
[[email protected] ~]# date
Thu Jun 22 11:47:42 CST 2017

(4)驗證/etc/shadow裏的第8列

步驟一:以測試user1用戶為列,把它在shadow裏的第8列改成16266(這相當於今天來說是昨天就過期了)

步驟二:先用su - test切換另一個普通用戶,再用這個普通用戶來su - user1切換user1,輸入正確密碼,但報下面的錯誤

$ su - user1
Password: 
Your account has expired; please contact your system administrator
su: incorrect password

20.2.userdel

功能說明:刪除用戶賬號。

如果一個用戶的賬號不再使用,可以從系統中刪除。刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。刪除一個已有的用戶賬號使用userdel命令。

語法:userdel 選項 用戶名

參數:

-r 它的作用是把用戶的主目錄一起刪除。

-f 刪除用戶家目錄以及目錄中所有文件。

示例

# userdel -r sam

20.3.usermod

功能說明:修改用戶信息

語法:usermod 選項 用戶名

常用選項:

-u:用戶uid

-g:用戶的主組

-G:附加組

-s:默認shell

-d:家目錄

-c:註釋說明


補充說明:

用戶信息相關的配置文件:

/etc/passwd 存放用戶相關信息

/etc/shadow 存放用戶密碼相關信息

$home 用戶的家目錄


man 5 passwd

/etc/passwd

account:password:UID:GID:GECOS:directory:shell

賬號:密碼:UID:GID:註釋說明:家目錄:默認的登錄shell

--vim /etc/passwd

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

第一列: 用戶名

第二列:密碼 老版本這裏放的就是密碼,為了安全性考慮,密碼放到了/etc/shadow的第二列

x代表/etc/shadow的第二列生效,去掉x就表示此用戶登錄的時候沒有密碼

第三列:uid 用戶識別ID值,系統是通過這個值來確認是哪個用戶

第四列:gid 組識別ID值

第五列:描述項 comment

第六列:家目錄

第七個:bash 當前用戶使用的bash

/bin/bash 表示此用戶使用bash,用戶可以登錄系統,可以收郵件,可以登錄FTP

/sbin/nologin 表示用戶不能登錄系統,可以收郵件,可以登錄FTP

/bin/false 表示用戶不能登錄系統,可以收郵件,不能登錄FTP

/etc/shadow

--vim /etc/shadow

root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::

與/etc/passwd相對應 (但這裏有九列)

第一列:login name 用戶名

第二列:encrypted password 密碼 (這裏以*號開頭或!開頭默認是不能登陸的)!!代表空密碼,未設置密碼

第三列:date of last password change 上一次修改密碼的時間,linux以1970年1月1日到現在的天數來算的,等於0代表下一次登錄操作系統強制修改密碼

# date --date=‘1970-01-01 +16896days‘

Tue Apr 5 00:00:00 CST 2016

第四列:minimum password age 修改密碼後幾天內不允許再修改,如果這裏為5,那改過密碼後5天內不能再修改 0代表不限制(只對普通用戶有效)

第五列:maximum password age 多少天內必須要求你改,30代表每隔30天更新一次密碼; 默認永遠不更新,99999代表不限制

第六列:password warning period 過期前幾天給你一個告警信息,7代表密碼過期前7天發出警告

第七列:password inactivity period,密碼過期後還給的一個寬限天數,3代表密碼過期後3天內依然可以登錄操作系統;過了3天後帳號被封鎖。

第8列: account expiration date 這裏可以寫一個過期天數,這裏也是以1970年1月1日到現在的天數來計算的,多用於收費系統

第九列:reserved field 保留,留著以後功能擴展


20.4.passwd

功能說明:更新用戶的身份驗證令牌

語法:passwd 選項 用戶名

補充說明:passwd指令讓用戶可以更改自己的密碼,而系統管理者則能用它管理系統用戶的密碼。只有管理者可以指定用戶名稱,一般用戶只能變更自己的密碼。

(1)passwd:修改當前用戶密碼;

(2)passwd username:修改其他用戶的密碼,僅root有此權限;

參數:

-l 鎖定口令,即禁用賬號。

-u 口令解鎖。

-d 使賬號無口令。

-f 強迫用戶下次登錄時修改口令,如果默認用戶名,則修改當前用戶的口令。

-k 設置只有在密碼過期失效後,方能更新。

-s 列出密碼的相關信息。

--stdin:從標準輸入接收密碼;

echo "PASSWORD" |passwd --stdin USERNAME

如下圖:


示例:

[[email protected] ~]# passwd -d user03  #刪除用戶密碼
Removing password for user user03.
passwd: Success
# passwd -l sam
[[email protected] ~]# passwd -l user04  #鎖定用戶
Locking password for user user04.
passwd: Success

20.5.chage

功能說明:更改用戶密碼過期信息

# chage --help

Usage: chage [options] [LOGIN]


常用選項:

-d, --lastday LAST_DAY set date of last password change to LAST_DAY 最後一次更改密碼的時間

-E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE 帳號的過期時間

-h, --help display this help message and exit

-I, --inactive INACTIVE set password inactive after expiration

to INACTIVE 寬限期

-l, --list show account aging information 查看用戶密碼信息

-m, --mindays MIN_DAYS set minimum number of days before password

change to MIN_DAYS 密碼的最小生存周期

-M, --maxdays MAX_DAYS set maximim number of days before password 密碼的最大生存周期

change to MAX_DAYS

-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS 密碼過期前幾天發出警告

示例:

[[email protected] ~]# chage -l user03   #列出用戶密碼的信息
Last password change: Jun 22, 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
[email protected] ~]# chage -d 0 user03用戶下一次登錄操作系統強制修改密碼

20.6.groupadd

功能:增加用戶組

語法:groupadd 選項 用戶組

常用選項:

-g:指定gid

-o:指定相同的gid, 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同

-r:指定組管理員

groupadd --help 查看

/etc/group 組信息

組名:組密碼:組id:組成員

示例:

[[email protected] ~]# groupadd group1
[[email protected] ~]# groupadd -g 101 group2

20.7.groupdel

功能:刪除用戶組

語法:groupdel 用戶組

示例:

[[email protected] ~]# groupdel group1

20.8.groupmod

功能:修改組屬性

語法:groupmod 選項 用戶組

常用選項:

-g GID 為用戶組指定新的組標識號。

-o 與-g選項同時使用,用戶組的新GID可以與系統已有用戶組的GID相同。

-n 新用戶組 將用戶組的名字改為新名字

示例:

[[email protected] ~]# groupmod -g 102 group2
[[email protected] ~]# groupmod -g 10000 -n group3 group2

20.9.newgrp

功能:登陸到一個新組

語法:newgrp [-] [group]

示例:

[[email protected] ~]# usermod  -G root user03
[[email protected] ~]# id user03
uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root)
[[email protected] ~]$ newgrp  root #一個用戶有多個組,就可以用newgrp進行切換當前組

20.10.gpasswd

功能:為組添加密碼

組密碼文件:/etc/gshadow

gpasswd 【選項】 group

常用參數:

-a USERNAME:把用戶添加至組中;

-d USERNAME:從此組中移除此用戶;

-r USER_NAMEG : 刪除組的密碼

# gpasswd --help

示例:

[[email protected] ~]# groupadd -g 10015 group1
[[email protected] ~]# gpasswd -a user03 group1
Adding user user03 to group group1
[[email protected] ~]# id user03
uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root),10015(group1)
[[email protected] ~]# gpasswd -d user03 group1
Removing user user03 from group group1
[[email protected] ~]# gpasswd -M user03,user04 group1
[[email protected] ~]# id user03
uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root),10015(group1)
[[email protected] ~]# id user04
uid=1002(user04) gid=1002(user04) groups=1002(user04),10015(group1)


練習一:

1、建立一個組,名字為admin,組id為900

groupadd admin
groupmod -g 900 admin
或者
groupadd -g 900 admin

2、建立一個用戶tom,並且將admin組作為tom用戶的附加組(建立用戶的時候完成),密碼是123

useradd -G 900(或者admin)tom
echo 123 |passwd --stdin tom

3、建立一個用戶為jack,要求在建立用戶後將jack加入到admin組裏,密碼為123

useradd jack
gpasswd -a jack admin
echo 123 |passwd --stdin jack

4、給admin組設置一個密碼,為123

gpasswd admin
測試:
newgrp admin

5、把tom用戶設定為admin組的管理員

gpasswd -A tom admin
測試:
su - tom
gpasswd -d user1 admin

練習二:

1、添加3個用戶,harry,natash,sarsh。要求harry,natash用戶的附加組為admin組,sarsh用戶的默認shell為非交互式,密碼均為123.

方法一:

useradd -G admin harry
useradd -G admin natash
useradd -s /sbin/nologin sarsh
echo 123 |passwd --stdin harry
方法二:
useradd harry
usermod -G admin harry
。。。

2、修改haryy用戶的家目錄為/home/world/redhat/harry

mkdir /home/world/redhat -p
usermod -m -d /home/world/redhat/harry harry

或者練習:

1、將/etc/passwd文件拷貝到/tmp目錄下面。在/tmp/passwd文件的第15行下添加“hello world”,並復制其下5行,粘貼在文件的最下面,保存。然後全文搜索將“/bin/bash”替換成world,並保存後面20行到/tmp/passwd.bak文件中,退出編輯。

2、找出/etc/下面的所有目錄並將其重定向到/tmp/etcdir文件裏

3、在/tmp/etcdir文件中追加“好好學習,天天向上”,然後把/etc/passwd文件的內容添加到/tmp/etcdir文件裏,並重命名為newetcdir

mkdir /home/world/redhat/harry
usermod -d /home/world/redhat/harry harry
cp -a /etc/skel/. /home/world/redhat/harry

說明:

usermod命令修改家目錄,家目錄的上一級目錄必須存在,家目錄本身系統會自動創建;如果不存在需要創建。


3、修改natash,sarsh用戶的主組為world,並且可以登錄操作系統

groupadd world
usermod -g world natash
usermod -g world -s /bin/bash sarsh

練習三:

1、新建一個公司world,該公司有3個部門cw、rs、sc;每個部門要求建立2個用戶,如cw01,cw02..;boss01管理公司所有部門,所有用戶的密碼均為123456

groupadd world
groupadd cw
groupadd rs
groupadd sc
useradd cw01 -g cw -G world
useradd boss01 -g world -G cw,rs,sc
echo 123456|passwd --stdin cw01

2、所有用戶帳號的有效期為3個月(90天),第一次登錄操作系統強制修改密碼,每隔15天更新一次密碼

chage -l cw01
chage -E "$(date +%Y%m%d --date=‘90 days‘)" -d 0 -M 15 cw01
或者
date +%F --date=‘90 days‘
2016-07-04
# chage -E ‘2016-07-04‘ -d 0 -m 3 cw01

本文出自 “爛筆頭” 博客,請務必保留此出處http://lanbitou.blog.51cto.com/9921494/1941301

用戶管理命令(二十)