用户管理

今日思维导图:

小胖学Linux day15:用户管理2_创建用户

课前回顾补充

## 查看用户
id
-u:查看当前登录用户的uid
-g:查看当前登录用户的gid
-n:配合-u或者-g一起使用,配合-u:查看当前登录用户uid对应的名字,配合-g:查看当前登录用户gid对应的名字

[root@17:35:51wudidesangege <sub>]\ w
#当前系统时间 #服务器总共运行时间 #登录用户数 #系统的平均负载
22:58:03 up 6:06, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 16:52 6:05m 0.03s 0.03s -bash
root pts/0 10.0.0.1 16:52 3.00s 0.12s 0.03s w
# 当前系统时间 # 服务器总共运行时间 # 登录用户数 #系统的平均负载



## awk命令基础语法
awk:一般来说,取出想要的字符串(主要过滤列)
默认以空格为分隔符,在awk中双引号,代表不识别变量

$1-$N 是取第几列
$0:取出文件中的所有内容
$NF:文件的最后一列内容
# 选项
-F:指定分隔符
例↓
[root@23:03:16wudidesangege </sub>]\ awk -F ':' '{print $1}' /etc/passwd
root
bin
daemon
adm

# 使用awk来拼命令
例↓
[root@23:11:52wudidesangege <sub>]\ awk -F ':' '{print $1"sbjjsbjj"}' /etc/passwd
rootsbjjsbjj
binsbjjsbjj
daemonsbjjsbjj
admsbjjsbjj

## sed命令取行
sed -n 'Np'
例↓
[root@23:11:21wudidesangege </sub>]\ sed -n '5p' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
N是阿拉伯数字

## seq 序列命令
-w:补全位数,用0来补
例↓
[root@23:16:44wudidesangege <sub>]\ echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@23:18:00wudidesangege </sub>]\ seq -w 10
01
02
03
04
05
06
07
08
09
10

## 用awk创建10个用户 # 用bash将拼接命令转换为输出内容
seq -w 10|awk '{print "useradd xyk1"$1}'|bash

创建用户流程

跟用户创建相关的文件:

/etc/login.defs

## 取出有效内容(不是注释的内容)
#方法一:
[root@23:27:49wudidesangege <sub>]\ grep -Ev '^#|^$' /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

#方法二:
[root@23:28:16wudidesangege </sub>]\ grep -i '^[a-z]' /etc/login.defs
# 指定创建用户时,默认邮件文件位置
MAIL_DIR /var/spool/mail

# 创建用户默认密码最大使用天数
PASS_MAX_DAYS 99999

# 创建用户默认密码最小使用天数(0代表无限)
PASS_MIN_DAYS 0

# 密码最短位数
PASS_MIN_LEN 5

# 密码过期警告
PASS_WARN_AGE 7

# 普通用户,最小UID是1000
UID_MIN 1000

# 普通用户,最大UID是60000
UID_MAX 60000

# 系统用户,最小UID是201
SYS_UID_MIN 201

# 系统用户,最大UID是999
SYS_UID_MAX 999

# 普通用户,最小GID是1000
GID_MIN 1000

# 普通用户,最大GID是60000
GID_MAX 60000

# 系统用户,最小GID是201
SYS_GID_MIN 201

# 系统用户,最大GID是999
SYS_GID_MAX 999

# 默认创建用户的家目录 yes 或者 no
CREATE_HOME yes

# UMASK 077 指定用户创建家目录的默认权限
UMASK 077

# 创建用户时,如果不用-g指定组,那么会默认创建出该用户的同名组
USERGROUPS_ENAB yes

# 用户密码的加密方式 SHA512
ENCRYPT_METHOD SHA512

## 权限了解 权限对于的数字
r:读 4
w:写 2
x:执行 1
-:没有权限 0
例↓
-rw-r--r-- :0544
drwxr-xr-x :0755

目录创建默认权限:0777-umask(减去指定的umask数值)
文件创建默认权限:0666-umask

## if判断示例↓
如果 当前用户UID大于199 并且 用户的用户名和用户的组名相同 那么
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask是002
umask 002
否则
else
umask是022
umask 022
fi

条件成立时权限为↓
0777
0002
----
0775

条件不成立时权限为↓
0777
0022
----
0755

[root@23:41:08wudidesangege ~]\ cat /etc/default/useradd
# 如果login.defs文件中的USERGROUPS_ENAB yes是no,该行配置才会生效
# 如果创建用户不创建同名组,默认会将该用户加入GID为100的系统组中(users)
GROUP=100

# 指定用户默认创建家目录的位置
HOME=/home

# 用户账户停权 -1永远不过期
INACTIVE=-1

# 账号终止时间的设置,不设置不终止
EXPIRE=

# 用户默认创建登录shell
SHELL=/bin/bash

# 该目录下存放的是,用户的环境变量初始配置文件
SKEL=/etc/skel

# 创建用户的同时,创建该用户的邮箱文件
CREATE_MAIL_SPOOL=yes

## 用户创建的流程:
1.执行useradd 命令 + 用户名
2.查看执行命令是否有选项
3.读取/etc/login.defs文件
4.读取/etc/default/useradd文件
5.如果没有-M则创建家目录
6.根据配置文件中的 SKEL=/etc/skel 将skel下面的环境变量文件拷贝到家目录下
7.用户信息记录到/etc/passwd文件中
8.用户密码信息记录到/etc/shadow文件中
9.用户组信息记录到/etc/group文件中
10.用户组密码信息记录到/etc/gshadow文件中

用户的密码管理

passwd:给用户设置密码
# 语法:
passwd [用户名]
注意:如果不加用户名,则修改当前登录用户的密码,只有root用户能在passwd命令后加用户名

# 修改其他用户密码
[root@00:07:58wudidesangege <sub>]\ passwd wyk5
## 修改zls用户的密码
Changing password for user wyk5.
## 新密码
New password:
BAD PASSWORD: The password is a palindrome
## 重复新密码
Retype new password:
## 所有认证令牌更新成功
passwd: all authentication tokens updated successfully.

## 免交互方式
stdin:标准输入
stdout:标准输出
stderr:错误输出

[root@00:08:19wudidesangege </sub>]\ echo '123@qqdianCOM'|passwd --stdin wyk5
Changing password for user wyk5.
passwd: all authentication tokens updated successfully.

随机密码生成

tee:管道命令
-a:append 追加 #输入到用户zls 因为passwd
#命令解读: 再现内容 随机数文件生成密码 追加到pass #不是标准输入所以加--stdin
[root@23:41:08wudidesangege ~]\ echo $RANDOM|tee -a /tmp/pass.txt |passwd --stdin zls

练习题

# 需求:
1.批量创建100个用户
useradd zls001

2.然后给这100个用户随机密码
echo $RANDOM|passwd --stdin zls001
mima=$RANDOM

3.将100个用户的密码保存到文件中
echo zls001:$RANDOM >> /tmp/pass.txt

例如:创建100用户 zls001-zls100
用户名:密码
cat /tmp/pass.txt
zls001:71297391
zls002:1892319283
zls003:182372873

## awk取列内容 "和cut差不多"
awk '{print $第几列}'
awk '{print "拼接字符串"$第几列"拼接的字符串"}'
[root@localhost ~]# seq 10|awk '{print $1,$1,$1" "$1}'

## seq 生成序列
-w:位数补全

## useradd

## passwd

## 变量的设置及调用
[root@localhost ~]# name=zls
[root@localhost ~]# echo $name
zls

---- 用不上 ---
## tee

# 1.
[root@localhost ~]# useradd zls001
[root@localhost ~]# echo 123|passwd --stdin zls001
Changing password for user zls001.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo zls001:123 >> /tmp/pass.txt

# 2.
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001 && echo 123|passwd --stdin zls001 && echo zls001:123 >> /tmp/pass.txt

# 3.awk取出数字
[root@localhost ~]# seq -w 5|awk '{print $1}'
1
2
3
4
5

# 4.把命令当成字符串,放入awk中
[root@localhost ~]# seq -w 5|awk '{print "useradd zls001;echo 123|passwd --stdin
zls001;echo zls001:123 >> /tmp/pass.txt"}'
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt

# 5.用$1替换001部分(写死的部分)
[root@localhost ~]# seq -w 5|awk '{print "useradd zls$1;echo 123|passwd --stdin
zls$1;echo zls$1:123 >> /tmp/pass.txt"}'
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt
useradd zls$1;echo 123|passwd --stdin zls$1;echo zls$1:123 >> /tmp/pass.txt

# 6.把$1放在双引号的外面
[root@localhost ~]# seq -w 5|awk '{print "useradd zls"$1";echo 123|passwd --stdin
zls"$1";echo zls"$1":123 >> /tmp/pass.txt"}'
useradd zls1;echo 123|passwd --stdin zls1;echo zls1:123 >> /tmp/pass.txt
useradd zls2;echo 123|passwd --stdin zls2;echo zls2:123 >> /tmp/pass.txt
useradd zls3;echo 123|passwd --stdin zls3;echo zls3:123 >> /tmp/pass.txt
useradd zls4;echo 123|passwd --stdin zls4;echo zls4:123 >> /tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt

mima=`echo $RANDOM`

# 最终命令,塞到awk里
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt

[root@localhost ~]# seq -w 5|awk '{print "mima=`echo $RANDOM`;useradd zls5;echo
$mima|passwd --stdin zls5;echo zls5:$mima >> /tmp/pass.txt"}'
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt
mima=`echo $RANDOM`;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>
/tmp/pass.txt

# 把$1放在双引号的外面
[root@localhost ~]# seq -w 5|awk '{print "mima=`echo $RANDOM`;useradd luowei"$1";echo
$mima|passwd --stdin luowei"$1";echo luowei"$1":$mima >> /tmp/pass.txt"}'

# 拼接出来的命令交给bash处理
[root@localhost ~]# seq -w 5|awk '{print "mima=`echo $RANDOM`;useradd luowei"$1";echo
$mima|passwd --stdin luowei"$1";echo luowei"$1":$mima >> /tmp/pass.txt"}'|bash