二、用户基本概述
1.用户
能够正常登录Linux或windows系统的角色就是用户
那Linux与windows系统的用户有什么区别?
本质都是登录系统的,只不过Linux支持多用户同时登录,windows默认不支持,但是修改组策略的情况下也是可以多用户登录的
2.用户的作用
1.系统上的每一个进程(运行的程序)都需要特定的用户运行
2.每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
3.进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关
3.如何查看用户
#查看当前用户
[root@db01 ~]# id
uid=0(root) gid=0(root) groups=0(root)
# 查看用户详细信息
yum install -y finger
finger # 查找用户并显示用户信息
[root@mpd ~]# finger test
Login: test Name:
Directory: /home/test Shell: /bin/bash
On since Tue Jul 21 11:18 (CST) on pts/0 from 10.0.0.1
3 hours 45 minutes idle
Last login Tue Jul 21 11:45 (CST) on pts/1
No mail. # 没有邮件
No Plan. # 没有计划
# who 谁
[root@mpd ~]# who
test pts/0 2020-07-21 11:18 (10.0.0.1)
root pts/1 2020-07-21 09:38 (10.0.0.1)
# whoami 我是谁
[root@mpd ~]# whoami
root
# 在线用户msg
[root@mpd ~]# w
15:07:37 up 6:48, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
test pts/0 10.0.0.1 11:18 3:49m 0.00s 0.00s -bash
root pts/1 10.0.0.1 09:38 1.00s 0.10s 0.00s w
# 用户使用情况
[root@mpd ~]# uptime
15:09:08 up 6:49, 2 users, load average: 0.00, 0.01, 0.05
#查看指定用户
[root@db01 ~]# id lhd
uid=1001(lhd) gid=1001(lhd) groups=1001(lhd)
#查看指定用户指定id
[root@db01 ~]# id -u lhd
1001
[root@db01 ~]# id -g lhd
1001
[root@db01 ~]# id -G lhd
1001
4.查看进程的用户
[root@db01 ~]# ps -ef | grep mysql
mysql 27976 1 0 15:34 ? 00:00:03 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
root 28183 8859 0 17:29 pts/1 00:00:00 grep --color=auto mysql
5.查看文件的用户
[root@Centos7 ~]# ll
total 10004
drwxr-xr-x 84 lhd lhd 8192 Jun 24 15:05 etc
-rw-r--r-- 1 root root 10228919 Jun 24 16:55 etc.tar.gz
三、用户
[root@Centos7 ~]# ll /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 1225 Jun 23 17:41 /etc/passwd
---------- 1 root root 723 Jun 23 17:41 /etc/shadow
1.用户文件 /etc/passwd
[root@Centos7 ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1225 Jun 23 17:41 /etc/passwd
[root@Centos7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
lhd:x:1000:1000::/home/lhd:/bin/bash
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
#以 :为分隔符,一共七列
nginx #用户
x #密码占位符
998 #uid
996 #gid
Nginx web server #用户的注释信息
/var/lib/nginx #家目录
/sbin/nologin #登录的shell,如果是/sbin/nologin,说明不能登录
2.用户密码文件 /etc/shadow
[root@Centos7 ~]# ll /etc/shadow
---------- 1 root root 723 Jun 23 17:41 /etc/shadow
[root@Centos7 ~]# cat /etc/shadow
root:$6$3M2hvrzRORqDie.l$dr19n45v.3yBadEcg87YXtzMLLCVrxDLjH8rlW.WEMikbjp7eVGVepBqvwwMdpj8ejLPnG2WhCR48QtYBEwIa1::0:99999:7:::
lhd:!!:18436:0:99999:7:::
nginx:!!:18436::::::
#以 :为分隔符,一共九列
root #用户
!! #如果是一串字符代表是密码,!!代表没有密码
18436 #代表修改密码的时间,按天算,距离1970年的天数
0 #使用天数,0代表无限制
99999 #密码可以使用的天数,99999代表永远不过期
7 #密码快过期了,提前几天提醒
'空' #密码到期后保持活动的天数
'空' #账户到期时间
'空' #注释
1.用户登陆名 //用户的账号名称
2.加密后的密码 //用户密码,这是加密过的口令(未设密码时为!!)
3.最近一次密码更改时间 //从1970年到最近一次更改密码时间之间过了多少天
4.密码最少使用几天 //密码最少使用几天才可以更改密码(0表示无限制)
5.密码最长使用几天 //密码使用多少天需要修改密码(默认99999永不过期)
6.密码到期前警告期限 //密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
7.密码到期后保持活动的天数 //在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
8.账户到期时间 //从1970年起,账户在这个日期前可使用,到期后失效。
9.标志 //保留
3.用户的分类
用户UID |
系统中约定的含义 |
0 |
超级管理员(拥有最高权限) |
1-200 |
系统用户,由系统分配给系统进程使用 |
201-999 |
系统用户,用来运行服务账户,不需要登陆系统(动态分配) |
1000+ |
常规普通用户 |
- 注意: 在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用户
四、用户相关命令
useradd userdel usermod
1.useradd添加用户
#使用useradd和adduser这两个命令,来创建用户
#添加用户前需要确定:
1.确定用户的默认组是否有特殊要求
2.确定用户是否允许登陆
3.确定用户的密码策略
4.确定用户的有效期
5.确定用户的uid是否有特殊要求
1)常用参数
-u #指定用户的UID,不能和现有ID冲突
-g #指定用户用户默认基本组
-G #指定用户附加组,用逗号隔开添加多个附加组
-d #指定用户家目录
-c #指定用户注释信息
-M #不建立家目录
-s #指定用户默认shell
-r #创建系统账户, 没有家目录
-a #附加组,都留下,配合-G,追加
2)添加用户
[root@db01 ~]# useradd user -u 666 -g root -G bin,mail -d /home/userhome -c '测试创建用户' -s /sbin/nologin
[root@db01 ~]# ll /home/
total 0
drwx------ 2 lhd lhd 83 Jun 24 17:17 lhd
drwx------ 2 user root 62 Jun 24 18:21 userhome
[root@db01 ~]# id user
uid=666(user) gid=0(root) groups=0(root),1(bin),12(mail)
#日常正经添加用户
[root@db01 ~]# useradd test -M -s /sbin/nologin
[root@db01 ~]# useradd test1
3)给用户设置密码
#方式一:在root下修改普通用户密码
[root@db01 ~]# passwd test1
Changing password for user test1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
#该方法,设置密码时提示密码过短,一样可以修改成功
#方式二:将密码写入用户
[root@db01 ~]# echo "123456" | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.
#方式三:切换到用户下,自己修改自己的密码
[root@db01 ~]# su test1
[test1@db01 root]$ passwd
Changing password for user test1.
Changing password for test1.
(current) UNIX password:
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
#该方式修改密码不能过于简单,不能跟以前密码相似,也不能很有规律
# 方式四 随机密码非交互式
#如何获得随机数
[root@qls ~]# echo $RANDOM
28241
[root@qls ~]# echo $RANDOM | md5sum
6c8a1df9e12e9c553d0f9a397b860f4e -
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10
64091f6823
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10
df0676f775
#密码设置成功,但是不知道密码
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10 | passwd --stdin qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt
b676039b3f
[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt | passwd --stdin qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt
7d53328b61
tee #重定向的命令 将数据重定向到指定的文件中,并输出在屏幕上面一份
-a #追加
#设置更复杂的密码
[root@qls ~]# yum install -y expect
选项:
-l #指定的密码位数
-d #指定数字位数
-c #小写字母位数
-C #大小字母位数
-s #特殊字符位数
[root@qls ~]# mkpasswd
gC}2atTf9
[root@qls ~]# mkpasswd -l 24 -d 6 -c 6 -C 6 -s 6
sv_^WF85J@DF5Ng5|3{f3/ng
[root@qls ~]# mkpasswd -l 24
9px3Sesrx[ybtbvElubxxltj
[root@qls ~]# mkpasswd -l 24
uimYw\Z4amzffhti0eljucgg
[root@qls ~]# mkpasswd -l 24 -s 24
impossible to generate 24-character password with 2 numbers, 2 lowercase letters, 2 uppercase letters and 24 special characters.
[root@qls ~]# mkpasswd -l 24 -s 24 -d 0 -c 0 -C 0
$.$}+?;-~]|)>(#_),[)!#@$
[root@qls ~]# mkpasswd -l 24 -s 24 -d 0 -c 0 -C 0 | tee pass.txt | passwd --stdin qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt
:{]~"/'%[,+"^*%??%,'?}~$
4) 修改用户配置
-u #修改用户的uid
-g #修改用户的gid
-a #追加 添加附加组 需跟-G配合使用
-G #修改附加组,默认会覆盖原来的所有附加组
-aG #追加附加组
-m #迁移家目录
-d #修改家目录
-c #修改注释信息
-s #修改命令解释器
-l #修改用户的名称
-L #锁定用户
-U #解锁用户
usermod 用户名 要修改的选项 修改后的名称
usermod root -g admin # 把root用户的默认用户组root组修改为admin组
5) 删除用户
选项:
-r #删除用户的时候,删除家目录及邮件相关信息
userdel 要删除的用户名称
userdel test # 删除用户名称为test的用户 默认不删除家目录及邮件信息
6) 远程登录
# ssh协议远程登录
[E:\~]$ ssh test@10.0.0.100
五 用户创建相关的文件
# 创建用户的时候,没有指定相关信息,系统创建用户是根据两个文件进行创建的
[root@qls ~]# ll /etc/login.defs
-rw-r--r--. 1 root root 2028 Oct 30 2018 /etc/login.defs
[root@qls ~]# ll /etc/default/useradd
-rw-r--r--. 1 root root 119 Oct 30 2018 /etc/default/useradd
[root@qls ~]# grep -Ev '^$|^#' /etc/login.defs
MAIL_DIR /var/spool/mail #接收邮件的目录
PASS_MAX_DAYS 99999 #密码最大的有效期天数
PASS_MIN_DAYS 0 #密码最小的有效期
PASS_MIN_LEN 5 #密码最小的长度 不起作用 root用户限制不了 普通用户最少8位
PASS_WARN_AGE 7 #密码到期前的告警时间
UID_MIN 1000 #普通用户最小的UID
UID_MAX 60000 #普通用户最大的UID
SYS_UID_MIN 201 #系统用户的最小UID
SYS_UID_MAX 999 #系统用户的最大UID
GID_MIN 1000 #普通用户的组的最小GID
GID_MAX 60000 #普通用户的组的最大GID
SYS_GID_MIN 201 #系统用户的组的最小GID
SYS_GID_MAX 999 #系统用户的组的最大GID
CREATE_HOME yes #创建用户的时候默认创建家目录
UMASK 077 #默认创建用户的家目录的权限 umask为077 777-077=700
USERGROUPS_ENAB yes #创建或删除用户的时候,没有指定组,默认创建或删除跟用户相同名称的组
ENCRYPT_METHOD SHA512 #密码的加密规则
[root@qls ~]# cat /etc/default/useradd
GROUP=100 #当创建用户没有指定组,并且USERGROUPS_ENAB为no的时候,这个选项生效
HOME=/home #创建用户的家目录的位置
INACTIVE=-1 #跟shadow文件的第七列 密码到期后的宽恕时间 -1 密码永不失效 不启用
EXPIRE= #跟shadow文件第八列 账号密码的失效时间 时间戳 空则表示没有失效时间
SHELL=/bin/bash #默认的命令解释器
SKEL=/etc/skel #默认创建家目录的模板
CREATE_MAIL_SPOOL=yes #创建邮件相关信息
六 用户命令故障
[root@qls ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@qls ~]# rm -f /home/test/.bash*
#家目录里面的环境变量配置文件不存在
-bash-4.2$
-bash-4.2$
# 解决
-bash-4.2$ pwd
/home/test
-bash-4.2$ cp -a /etc/skel/.bash* ./
Permission denied #权限不足
[root@qls ~]# mkdir -m 700 /home/test
[root@qls ~]# ll -d /home/test
drwx------ 2 root root 6 Jul 21 10:53 /home/test
[root@qls ~]# chown -R test.test /home/test
-bash-4.2$ cd /home/test
-bash-4.2$ pwd
/home/test
-bash-4.2$ cp -a /etc/skel/.bash* ./
-bash-4.2$ logout
七 用户组的管理
什么是用户组
组分为两类
基本组 #一个用户只能拥有一个基本组
附加组 #当基本组的权限不够用户使用的,就出现了附加组 一个用户允许拥有多个附加组
跟组相关的文件
[root@qls ~]# ll /etc/group
-rw-r--r-- 1 root root 573 Jul 21 11:04 /etc/group
[root@qls ~]# ll /etc/gshadow
---------- 1 root root 449 Jul 21 11:04 /etc/gshadow
[root@qls ~]#
#以冒号为分隔符 分为4列
[root@qls ~]# cat /etc/group #用户组的基本信息文件
root:x:0:
bin:x:1:
daemon:x:2:
mail:x:12:postfix
第一列: root #组的名称
第二列: x #组的密码占位符
第三列: 0 #组的GID
第四列: #用户名 哪些用户使用此组作为附加组 多个用逗号分割
#用户组的组密码文件
#以冒号为分隔符 分为四列
[root@qls ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
mail:::postfix
第一列: root #组的名称
第二列: !或者空 #用户组的密码信息 空或者!是没有密码
第三列: 空 #用户组的管理者
第四列: 空 #用户名 哪些用户使用此组作为附加组 多个用逗号分割
[root@qls ~]# usermod -aG user05,user03,user01 qls01
[root@qls ~]# grep 'qls01' /etc/group
user01:x:1000:qls01
user03:x:665:qls01
user05:x:1002:qls01
qls01:x:1006:
[root@qls ~]# grep 'qls01' /etc/gshadow
user01:!::qls01
user03:!::qls01
user05:!::qls01
qls01:!::
1)用户组相关命令
1. 创建用户组的命令 groupadd
选项:
-g #指定组的ID GID
-r #创建系统组
[root@qls ~]# groupadd user_group01
[root@qls ~]# tail -1 /etc/group
user_group01:x:1007:
[root@qls ~]# groupadd -g 666 user_group02
[root@qls ~]# tail -1 /etc/group
user_group02:x:666:
[root@qls ~]# groupadd -r user_group03
[root@qls ~]# tail -1 /etc/group
user_group03:x:664:
2. 修改用户组的命令 groupmod
选项:
-g #修改用户组的ID GID
-n #修改组的名称
[root@qls ~]# groupmod -g 6666 user_group01
[root@qls ~]# grep 'user_group01' /etc/group
user_group01:x:6666:
[root@qls ~]# groupmod -n new_group user_group01
[root@qls ~]# grep 'new_group' /etc/group
new_group:x:6666:
3. 删除用户组的命令 groupdel
[root@qls ~]# groupdel new_group
[root@qls ~]# grep 'new_group' /etc/group
#删除作为某个用户的附加组的用户组 删除没有影响
[root@qls ~]# groupdel user01
[root@qls ~]# grep '1002' /etc/group
user05:x:1002:qls01
[root@qls ~]# grep '1002' /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
test:x:1002:1003::/home/test:/bin/bash
[root@qls ~]# id user05
uid=1001(user05) gid=1002(user05) groups=1002(user05)
#删除一个组作为某个用户的基本组 是不能删除的
解决:
给这里面的用户重新找个基本组
把用户也一并删除掉
[root@qls ~]# groupdel user05
groupdel: cannot remove the primary group of user 'user05'
[root@qls ~]# usermod -g 1003 user05
[root@qls ~]# id user05
uid=1001(user05) gid=1003(test) groups=1003(test)
[root@qls ~]# groupdel user05