Linux-用户管理命令

用户的分类(CentOS7)

用户UID 系统含义
0 超级用户(拥有系统的最高权限)
1-200 系统用户,由系统分配给系统进程使用
201-999 系统用户,运行服务,不需要登录系统的
1000+ 普通用户

注意:在CentOS7之前,创建用户,都是1-499 是系统用户,500+是普通用户,第一个创建的用户,不指定uid,一定是500。

用户信息相关文件

创建一个用户,一般会影响四个文件:
1./etc/passwd # 存放用户信息
2./etc/shadow # 存放用户密码信息
3./etc/group # 存放用户组信息
4./etc/gshadow # 存放用户组密码信息

/etc/passwd 文件

[root@localhost ~]# cat /etc/passwd
wqh: x:777:1001:此列为注释信息: /home/wqh:/bin/bash

/etc/shadow 文件

[root@localhost ~]# cat /etc/shadow
root:$6$iM1LuZaUuwyZrIg.$2X2Upu4KHmQoD1hzKHCzsmJqxPri9PlVDm5MYw/XdQsYgRpJaLIy1xWw0aDXLPePZNAcNRmfrYJrJgb6dmbu/.::0:99999:7:::

列数 名称 详情
1 用户登陆名 用户的账号名称
2 加密后的密码 用户密码,这是加密过的口令,未设密码时为 * 或 !! , * 是1-200的系统进程, !! 是201-999的服务进程
3 最近一次密码更改时间 从1970年到最近一次更改密码时间之间过了多少天
4 密码最少使用几天 密码最少使用几天才可以更改密码(0表示无限制)
5 密码最长使用几天 密码使用多少天需要修改密码(默认99999永不过期)
6 密码到期前警告期限 密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
7 密码到期后保持活动的天数 在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
8 账户到期时间 从1970年起,账户在这个日期前可使用,到期后失效。
9 标志 保留备用

用户创建过程中的配置文件

我们执行二进制文件 useradd 的时候,会调用哪些配置文件?

/etc/login.defs 文件

[root@wqh06 tmp]# ll /sbin/useradd
-rwxr-x---. 1 root root 118232 Oct 31  2018 /sbin/useradd

[root@localhost ~]# cat /etc/login.defs
[root@localhost ~]# grep -i  '^[a-z]' /etc/login.defs
# 指定创建用户后的邮件文件存放位置
MAIL_DIR	/var/spool/mail
#  密码,最长天数
PASS_MAX_DAYS	99999
# 密码最小天数
PASS_MIN_DAYS	0
# 密码最小长度
PASS_MIN_LEN	5
# 密码过期前7天 ,提示,密码要过期了,给老子改
PASS_WARN_AGE	7
# 普通用户的uid 最小值1000
UID_MIN                  1000
# 普通用户的最大uid 60000
UID_MAX                 60000
# -r创建的系统用户,201 - 999
SYS_UID_MIN               201
SYS_UID_MAX               999
# 普通用户组的最小gid
GID_MIN                  1000
# 普通用户组的最大gid
GID_MAX                 60000
# -r创建的系统用户组,201 - 999
SYS_GID_MIN               201
SYS_GID_MAX               999
# 默认创建家目录 
CREATE_HOME	yes
# 家目录umask
UMASK           077

  0777        0777
- 0022        0077
-------      ------
  0755        0700
# 在删除用户的时候,是否捆绑,把用户组也删除
USERGROUPS_ENAB yes
# 用户密码加密算法
ENCRYPT_METHOD SHA512

/etc/default/useradd 文件

[root@localhost ~]# ll /etc/default/useradd
-rw-r--r-- 1 root root 119 11月  5 2016 /etc/default/useradd

[root@localhost ~]# cat /etc/default/useradd
# 依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制
GROUP=100
# 默认普通用户的家目录
HOME=/home
# 是否启用账号过期停权,-1表示不启用
INACTIVE=-1
# 账号终止日期(没有设置)
EXPIRE=
# 创建用户的默认shell
SHELL=/bin/bash
# 当用户,误删除了自己家目录下的环境变量。
SKEL=/etc/skel
-bash-4.2$ cp /etc/skel/.bash* ~/
# 创建用户的同时,是否创建邮件文件
CREATE_MAIL_SPOOL=yes

用户管理命令

增加用户

useradd
adduser # useradd 的软链接

Usage:useradd [选项] [用户名]
默认情况下,在创建用户的时候,会创建一个和用户同名的组,并且把该用户加入该组

[root@localhost ~]# useradd wqh
-u:(uid)指定uid
-g:(gid)指定gid,也可以指定组名,需要存在这个组名
-G:(Group)指定附加组,如果加入多个附加组则用,逗号隔开
	[root@wqh06 ~]# useradd wqh -g root -G bin,dba,sa
-d:(directory)指定用户的家目录
	[root@wqh06 ~]# useradd kkkk -d /tmp/kkkk
-s:(shell)指定登录的shell,可登录用户:/bin/bash,不可登录用户:/sbin/nologin
-c:(comment)添加注释

-M:不创建家目录
-r:帮我们创建一个uid范围是201-999的系统用户(默认可以登录),不创建家目录

删除用户

userdel

Usage:userdel [选项] [用户名]
# 注意: 默认情况下,在删除用户的同时会把同名的用户组也删除,但是如果组内有其他用户,则不会删除组,只删除用户
-r:删除用户的同时,删除用户的家目录,和用户的其他 邮件目录... (删干净)

修改用户

usermod
Usage:usermod [选项] [用户名]
-u:修改uid
-g:修改gid
-G:修改附加组(一般配合-a使用)      # 直接用会把从组修改没,添加一个新的组,一般都会加-a,会在后面继续添加从组
-d:指定修改后的家目录(需要加 -m 才可用)
-s:修改登录的shell
-c:修改注释

-l:修改登录的用户名,如:usermod wqh -l wqh01
-L:锁定用户(封号),LOCK
-U:解锁用户(解封),UNLICK
-a:配合-G,在修改附加组的时候,起到追加效果(append)
-m:修改(迁移)家目录,必须配合 -d

查看用户

id # 查看当前登录用户
Usage:id [用户名]
-u:查看UID
-g:查看GID
-G:查看附加组

w   # 查看当前登录终端的设备以及用户
who # 查看当前登录的用户,以及远程连接的IP地址

用户密码管理命令

passwd    # 修改当前登录用户的密码
#使用交互式的方式设置密码
[root@localhost ~]# passwd wqh
# 使用非交互的方式设置密码给指定用户
[root@localhost ~]# echo '123' | passwd --stdin wqh

md5sum    # 加密算法,并且做校验,相同的一串字符每次md5加密结果相同
[root@wqh06 ~]# echo 123 |md5sum
ba1f2511fc30423bdbb183fe33f3dd0f  -

mkpasswd  # 随机生成密码命令,需要安装expect包
[root@wqh06 ~]# yum install -y expect   //需要安装扩展包
[root@wqh06 ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4
|K&13bR)i/

批量创建用户并给予密码(面试题)

面试题:请你创建出来100个用户,并且设置100个随机密码,并且记录密码,每个用户都可以登录,密码记录的格式如username:password
[root@wqh06 ~]# cat /tmp/1.txt
wqh001:123456
wqh002:kzsuhiuh1

awk方法:
# 利用mkpasswd生成密码,把格式固定,输入到文件中,再cut出 ":" 后的密码,交给passwd:
[root@wqh06 ~]# seq -w 100|awk '{print "useradd usr"$1,"&& echo usr"$1":`mkpasswd -l 10` |tee -a /root/wangqihan.pass|awk -F \"[:]\" \"{print $2}\"| passwd --stdin usr"$1 }' |bash
# 利用变量解决:
[root@wqh06 ~]# seq -w 100|awk '{print "useradd cls"$1,"&&","pass=`echo $RANDOM|md5sum|cut -c 1-10`","&&","echo $pass|passwd --stdin cls"$1,"&& echo cls"$1":$pass >> /tmp/2.pass"}'|bash


sed方法:
[root@wqh06 ~]# seq -w 100|sed -nr 's#(.*)#useradd wls\1 \&\& pass=`echo $RANDOM|md5sum|cut -c 1-10` \&\& echo $pass |passwd --stdin wls\1 \&\& echo wls\1:$pass >> /tmp/wls.pass#gp'|bash


for方法:
[root@wqh06 ~]# for n in `seq -w 100`;do useradd lls$n;pass=`echo $RANDOM|md5sum|cut -c 1-10`;echo $pass |passwd --stdin lls$n;echo lls${n}:$pass >> /tmp/lls.pass;done


写一个交互式的脚本文件:
#!/bin/bash

read -p "请输入需要创建的用户名 :" username

read -p "请输入需要创建用户的数量:" usercount

for n in `seq -w $usercount`;do
    useradd $username$n
    pass=`echo $RANDOM|md5sum|cut -c 1-10`
    echo $pass |passwd --stdin $username$n
    # 下一条语句中的${n},加{}的目的是与后面的`:`分隔开,这里也可以不加,只是作区分用,不等同与命令行的$()的调用功能  
    echo $username${n}:$pass >> /tmp/$username.pass  
done

awk方法结果:

脚本:

上图中实际上就是将命令行中的for命令内容,堆起来,每一行用 && 连接,依然可行:

我们也可以搞一个交互式的脚本:

posted @ 2020-03-30 23:51  拨云见日z  阅读(259)  评论(0编辑  收藏  举报