命令(15个)

useradd,usermod,userdel,groupadd,groupdel,groupmod,newgrp,gpaswd,chage,passwd,id,su,visudo,sudo,mkpasswd


8.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(创建一个主组)


示例:

[root@localhost ~]# useradd -u 4294967295 user2  #不成功,报错,证明uid数超过最大值
useradd: invalid user ID '4294967295'
[root@localhost ~]# useradd -u 4294967294 user2  #成功,这个数就是就是当前版本支持的最大uid数
[root@localhost ~]# 
[root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03  user03
useradd: group '1001' does not exist
[root@localhost ~]# id user03
id: user03: No such user
[root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03  user03
useradd: cannot create directory /home/abc/user03
[root@localhost ~]# id user03
id: user03: No such user
[root@localhost ~]# mkdir /home/abc
[root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03  user03
[root@localhost ~]# id user03
uid=1001(user03) gid=1001(admin) groups=1001(admin)
[root@localhost ~]# su - user03
[user03@localhost ~]$ pwd
/home/abc/user03
[root@localhost ~]# 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.
[root@localhost ~]# su - user04
This account is currently not available.
[root@localhost ~]# usermod -s /bin/bash user04
[root@localhost ~]# su  - user04
-bash-4.1$ pwd
/rhome/abc/
-bash-4.1$ logout
[root@localhost ~]# cp -a /etc/skel/. /rhome/abc/
[root@localhost ~]# su - user04


几个小实验:

(1)去掉/etc/passwd里root用户第二列的x,确认登录系统不需要密码,加回x,密码不变

[root@localhost ~]# sed -i '1s/x//' /etc/passwd
说明:验证登录是没有密码了
[root@localhost ~]# sed -i '1s/root::/root:x:/' /etc/passwd  #加回去
[root@localhost ~]# 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为例
[root@localhost ~]# tail -1 /etc/shadow   #第四列为0
user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:0:99999:7:::
[root@localhost ~]# tail -1 /etc/shadow  #第四列改为2
user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:2:99999:7:::
[user04@localhost ~]$ 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
[root@localhost ~]# date -s "20170625 11:43:40"  #修改日期
Sun Jun 25 11:43:40 CST 2017
[root@localhost ~]# date
Sun Jun 25 11:43:42 CST 2017
[user04@localhost ~]$ 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.
[root@localhost ~]# date -s "20170622 11:47:40"  #改回日期
Thu Jun 22 11:47:40 CST 2017
[root@localhost ~]# 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

8.2.userdel

功能说明:删除用户账号。

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令。

语法:userdel 选项 用户名

参数:

         -r 它的作用是把用户的主目录一起删除。

         -f 删除用户家目录以及目录中所有文件。

示例

# userdel -r sam

8.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 保留,留着以后功能扩展


8.4.passwd

功能说明:更新用户的身份验证令牌

语法:passwd 选项 用户名

补充说明:passwd指令让用户可以更改自己的密码,而系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

(1)passwd:修改当前用户密码;

(2)passwd  username:修改其他用户的密码,仅root有此权限;

参数:

-l 锁定口令,即禁用账号。

-u 口令解锁。

-d 使账号无口令。

-f 强迫用户下次登录时修改口令,如果默认用户名,则修改当前用户的口令。

-k 设置只有在密码过期失效后,方能更新。

-s 列出密码的相关信息。

--stdin:从标准输入接收密码;

echo "PASSWORD" |passwd --stdin  USERNAME

如下图:


示例:

[root@localhost ~]# passwd -d user03  #删除用户密码
Removing password for user user03.
passwd: Success
# passwd -l sam
[root@localhost ~]# passwd -l user04  #锁定用户
Locking password for user user04.
passwd: Success


8.5.chage

功能说明:更改用户密码过期信息

# chage --help

Usage: chage [options] [LOGIN]

常用选项:

-d, --lastday 最后一次更改密码的时间

-E, --expiredate 帐号的过期时间

-h, --help 显示这个帮助消息和退出

-I, --inactive  宽限期 (注意这里是大写i)

-l, --list 查看用户密码信息

-m, --mindays 密码的最小生存周期

-M, --maxdays 密码的最大生存周期

-W, --warndays 密码过期前几天发出警告

示例:

[root@localhost ~]# 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

root@localhost ~]# chage -d 0 user03用户下一次登录操作系统强制修改密码


8.6.groupadd

功能:增加用户组

语法:groupadd 选项 用户组

常用选项:

-g:指定gid

-o:指定相同的gid, 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同

-r:指定组管理员

groupadd --help 查看

/etc/group 组信息

组名:组密码:组id:组成员

示例:

[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd -g 101 group2

8.7.groupdel

功能:删除用户组

语法:groupdel 用户组

示例:

[root@localhost ~]# groupdel group1


8.8.groupmod

功能:修改组属性

语法:groupmod 选项 用户组

常用选项:

-g GID 为用户组指定新的组标识号。

-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。

-n 新用户组 将用户组的名字改为新名字

示例:

[root@localhost ~]# groupmod -g 102 group2
[root@localhost ~]# groupmod -g 10000 -n group3 group2

8.9.newgrp

功能:登陆到一个新组

语法:newgrp [-] [group]

示例:

[root@localhost ~]# usermod  -G root user03
[root@localhost ~]# id user03
uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root)
[user03@localhost ~]$ newgrp  root #一个用户有多个组,就可以用newgrp进行切换当前组


8.10.gpasswd

功能:为组添加密码

组密码文件:/etc/gshadow

gpasswd 【选项】 group

常用参数:

                    -a USERNAME:把用户添加至组中;

                    -d USERNAME:从此组中移除此用户;

                    -r USER_NAMEG : 删除组的密码

# gpasswd --help


示例:

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


8.11.id

功能:打印真实有效的用户和组ID

语法格式:id [OPTION]... [USERNAME]

常用选项:

打印指定USERNAME或者当前的用户和组信息

-a  忽略,为了与其他版本的兼容性

-Z,--context  只打印当前用户的安全上下文

-g,--group  只打印有效的组ID

示例:

[root@localhost ~]# id -g
0
-G,--groups  打印所有的组【附加组】ID
-n,--name  打印名称而不是数字。适用于 -ugG
[root@localhost ~]# id -nug user_00
id: cannot print "only" of more than one choice
[root@localhost ~]# id -ng user_00
user_00
[root@localhost ~]# id -nu user_00
user_00
[root@localhost ~]# id -n user_00
id: cannot print only names or real IDs in default format
  -r,--real  打印真实的ID替代有效的ID。  对-ugG 而言
[root@localhost ~]# id -r
id: cannot print only names or real IDs in default format
[root@localhost ~]# id -ru
0
[root@localhost ~]# id -rg user_00
502
[root@localhost ~]# id -rG
0
[root@localhost ~]# id -ruG
id: cannot print "only" of more than one choice
-u,--user  只打印用户有效的ID
[root@localhost ~]# id -u user_00
502


8.12.su

功能:变更用户身份(super user)

切换用户时:

切换用户时:

(1) 不读取目标用户的配置文件(非登录式切换,半切换);

su  USERNAME

(2) 读取目标用户的配置文件(登录式切换,完全切换);

su  -l  USERNAME

su  -  USERNAME

注意:root切换至任何其它用户无须认证密码;普通用户切换至其它用户,都需要密码;


8.13.visudo

功能:编辑sudoer文件

sudo的工作过程如下:

1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限

2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认

3,若密码输入成功,则开始执行sudo后续的命令

4,root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)

5,若欲切换的身份与执行者的身份相同,也不需要输入密码

sudo的目的:为非根用户授予根用户的权限;

配置文件:/etc/sudoers

visudo命令编辑修改/etc/sudoers配置文件

visudo使用vi打开/etc/sudoers文件,但是在保存退出时,visudo会检查内部语法,避免用户输入错误信息

visudo需要root权限

[hadoop@localhost ~]$ visudo  
visudo:/etc/sudoers:权限不够  
visudo:/etc/sudoers:权限不够
使用visudo命令打开sudo配置文件
 
## Sudoers allows particular users to run various commands as  the root user, without needing the root password.  #允许特定用户像root用户一样使用各种各样的命令,而不需要root密码 
##  
## Examples are provided at the bottom of the file for collections of related commands, which can then be delegated out to particular users or groups. # 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或用户组所使用  
##  
## This file must be edited with the 'visudo' command.  该文件必须使用"visudo"命令编辑  
  
## Host Aliases  
## Groups of machines. You may prefer to use hostnames (perhaps using  
## wildcards for entire domains) or IP addresses instead.  
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)  
## 、或IP地址,这时可以配置主机别名  
# Host_Alias    FILESERVERS = fs1, fs2  
# Host_Alias    MAILSERVERS = smtp, smtp2  
  
## User Aliases  
## These aren't often necessary, as you can use regular groups  
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname  
## rather than USERALIAS  
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名  
# User_Alias ADMINS = jsmith, mikem  
  
## Command Aliases  
## These are groups of related commands...  
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,  
## 可以通过sudo调用所有别名包含的命令,下面是一些示例  
  
## Networking 网络操作相关命令别名  
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient  
, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig  
, /sbin/mii-tool  
  
## Installation and management of software 软件安装管理相关命令别名  
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum  
  
## Services 服务相关命令别名  
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig  
  
## Updating the locate database 本地数据库升级命令别名  
# Cmnd_Alias LOCATE = /usr/bin/updatedb  
  
## Storage 磁盘操作相关命令别名  
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe  
, /bin/mount, /bin/umount  
  
## Delegating permissions 代理权限相关命令别名  
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp  
  
## Processes 进程相关命令别名  
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall  
  
## Drivers 驱动命令别名  
# Cmnd_Alias DRIVERS = /sbin/modprobe  
  
# Defaults specification  
  
#  
# Disable "ssh hostname sudo ", because it will show the password in clear.  
#        You have to run "ssh -t hostname sudo ".  
# 一些环境变量的相关配置,具体情况可见man soduers  
Defaults    requiretty  
  
Defaults    env_reset  
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"  
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"  
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"  
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"  
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"  
  
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin  
  
## Next comes the main part: which users can run what software on  
## which machines (the sudoers file can be shared between multiple  
## systems).  
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)  
## Syntax(语法):  
##  
##  user    MACHINE=COMMANDS 用户 登录的主机=(可以变换的身份) 可以执行的命令  
##  
## The COMMANDS section may have other options added to it.  
## 命令部分可以附带一些其它的选项  
##  
## Allow root to run any commands anywhere  
## 允许root用户执行任意路径下的任意命令  
root    ALL=(ALL)  ALL  
  
## Allows members of the 'sys' group to run networking, software,  
## service management apps and more.  
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令  
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE  
, DRIVERS  
  
## Allows people in group wheel to run all commands  
## 允许wheel用户组中的用户执行所有命令  
%wheel  ALL=(ALL)  ALL  
  
## Same thing without a password  
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令  
# %wheel    ALL=(ALL)  NOPASSWD: ALL  
  
## Allows members of the users group to mount and unmount the  
## cdrom as root  
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令  
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom  
  
## Allows members of the users group to shutdown this system  
## 允许users用户组中的用户关闭localhost这台服务器  
# %users  localhost=/sbin/shutdown -h now  
  
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)  
## 读取放置在/etc/sudoers.d/文件夹中的文件(此处的#不意味着这是一个声明)  
#includedir /etc/sudoers.d  

特别要注意的是别名一定要使用大写

示例:
1)一般用户赋权设置:
[root@localhost ~]# visudo
76 root    ALL=(ALL)      ALL77 test  ALL=(root) /usr/sbin/useradd    #新增加用户行

说明:
第一字段:root为能使用sudo命令的用户;
第二字段:第一个ALL为允许使用sudo的主机,第二个括号里的ALL为使用sudo后以什么身份(目的用户身份)来执行命令;
第三字段:ALL为以sudo命令允许执行的命令;
第四字段:test  ALL=(root) /usr/sbin/useradd,表示允许test用户从任何主机登录,以root的身份执行/usr/sbin/useradd命令。
用户执行命令效果:
[root@server ~]# su - redhat
[redhat@server ~]$ sudo /usr/sbin/useradd test  #命令需要输入完整的路径
口令:                                    #这里输入用户redhat自己的密码
[redhat@server ~]$ cat /etc/passwd |tail -5
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
redhat:x:500:500::/home/redhat:/bin/bash
test:x:501:501::/home/test:/bin/bash            #新增加的用户

2)sudo配置深入
1)多个用户的设置(非同一群组用户):
 对于不同需求的用户:可以按照上面的方法依次增加多行,每行对应一个用户。
 对于相同需求的多个用户
 User_Alias UUU=user1,user2……            定义用户别名;
[root@localhost ~]# visudo
20 # User_Alias ADMINS = jsmith, mikem      #这个就是一个实例行,按照这个写自己的
21 User_Alisa sudouser=user1,user2,user3,user4 #第一一个别名suduouser
76 root    ALL=(ALL)      ALL77 sudouser  ALL=(root)    /usr/sbin/useradd  #命令行书写格式,用户列用别名


对于多个命令的设置:
Cmnd_Alias CCC=command1,command2……          定义命令别名;
[root@localhost ~]# visudo
27 Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dh        client, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial,        /sbin/iwconfig, /sbin/mii-tool                                                    //多个命令定义一个命令别名;
76 root    ALL=(ALL)      ALL77 sudouser  ALL=(root)    NETWORKING  //命令行书写格式,命令列用别名
对于多主机的设置和多登陆角色的设置:
修改 Host_Alias HHH=host1,host2……  定义主机别名;
修改后对应的命令行主机列位置也是用别名
Runas_Alias  RRR=role1,role2……                定义runas别名,指定的是“目的用户”,即sudo 允许转换至的用户;
        建立相关别明后,相关命令行相应的列也是用我们定义的别名。
 2)多个用户的设置(同一群组用户): 
[root@localhost ~]# visudo
82## Allows people in group wheel to run all commands
83# %wheel        ALL=(ALL)      ALL        //用户列%+群组名

8.14.sudo

功能说明:用来以其他用户来执行命令

常用选项:

-b:在后台执行指令;

-h:显示帮助;

-H:将HOME环境变量设为新身份的HOME环境变量;

-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。

-l:列出目前用户可执行与无法执行的指令;

-p:改变询问密码的提示符号;

-s:执行指定的shell;

-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;

-v:延长密码有效期限5分钟;  因为sudo在第一次执行时或是在N分钟内没有执行(N预设为5)会询问密码。这个参数是重新做一次确认,如果超过N分钟,也会问密码。

-V :显示版本信息。

8.15.mkpasswd

mkpasswd命令生成随机复杂密码,前提安装expect,然后执行mkpasswd命令即可生成随机的密码

安装:

[root@localhost scripts]# yum install -y expect

常用选项

-l #      (密码的长度定义, 默认是 9)

-d #      (数字个数, 默认是 2)

-c #      (小写字符, 默认是 3)

-C #      (大写字符, 默认是 2)

-s #      (特殊字符, 默认是  1)

-v        (详细。。。)

-p prog  (程序设置密码, 默认是 passwd)

示例:

创建了一个长度为20位,包括数字个数,包含小写字母个数,包含大写字母个数,包含特殊符号个数。
#  mkpasswd  -l 20 -d 5 -c 5 -C 5 -s 5 
Z}K7hp0UPJ6v@&,c5{d3

 

练习一:

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/uplooking/redhat/harry

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

或者练习:

1、将/etc/passwd文件拷贝到/tmp目录下面。在/tmp/passwd文件的第15行下添加“hello uplooking”,并复制其下5行,粘贴在文件的最下面,保存。然后全文搜索将“/bin/bash”替换成uplooking,并保存后面20行到/tmp/passwd.bak文件中,退出编辑。

2、找出/etc/下面的所有目录并将其重定向到/tmp/etcdir文件里

3、在/tmp/etcdir文件中追加“好好学习,天天向上”,然后把/etc/passwd文件的内容添加到/tmp/etcdir文件里,并重命名为newetcdir

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

说明:

usermod命令修改家目录,家目录的上一级目录必须存在,家目录本身系统会自动创建;如果不存在需要创建。

3)修改natash,sarsh用户的主组为uplooking,并且可以登录操作系统

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

练习三:

1、新建一个公司uplooking,该公司有3个部门cw、rs、sc;每个部门要求建立2个用户,如cw01,cw02..;boss01管理公司所有部门,所有用户的密码均为123456

groupadd uplooking
groupadd cw
groupadd rs
groupadd sc
useradd cw01 -g cw -G uplooking
useradd boss01 -g uplooking -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

练习四:

批量添加用户

(1)编辑一个文本用户文件test.txt,每一列按照/etc/passwd格式书写,注意用户名、UID、宿主目录都不能相同,其中密码栏可以空白或输入x,内容如下:

[root@localhost scripts]# cat test.txt
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash

(2)以root身份执行命令/usr/sbin/newusers,从刚创建的用户文件user.txt中导入数据,创建用户:

[root@localhost scripts]# newusers < test.txt
[root@localhost scripts]# tail -6 /etc/passwd
user001:x:600:100:user:/home/user001:/bin/bash
user002:x:601:100:user:/home/user002:/bin/bash
user003:x:602:100:user:/home/user003:/bin/bash
user004:x:603:100:user:/home/user004:/bin/bash
user005:x:604:100:user:/home/user005:/bin/bash
user006:x:605:100:user:/home/user006:/bin/bash

(3)执行命令/usr/sbin/pwunconv,将/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中,并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消shadow password功能。

[root@localhost scripts]# pwunconv

(4)编辑密码文件passwd.txt

[root@localhost scripts]# cat > passwd.txt
user001:d69f8c
user002:29fe48  
user003:e9004b
user004:4471ef
user005:7668c0
user006:b04f19

(5)以root身份执行命令/usr/sbin/chpasswd,创建用户密码,chpasswd会将经过/usr/bin/passwd命令编码过的密码写入/etc/passwd的密码栏。

[root@localhost scripts]# chpasswd  < passwd.txt

(6)确定密码经编码写入/etc/passwd的密码栏后,执行命令/usr/sbin/pwconv将密码编码为shadow password,并将结果写入/etc/shadow。

[root@localhost scripts]# pwconv 
[root@localhost scripts]# tail -6 /etc/passwd
user001:x:600:100:user:/home/user001:/bin/bash
user002:x:601:100:user:/home/user002:/bin/bash
user003:x:602:100:user:/home/user003:/bin/bash
user004:x:603:100:user:/home/user004:/bin/bash
user005:x:604:100:user:/home/user005:/bin/bash
user006:x:605:100:user:/home/user006:/bin/bash

这样就完成了大量用户的创建了,可以进行验证了