命令(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
这样就完成了大量用户的创建了,可以进行验证了