什么是用户?
能够正常登陆系统的账号就是用户,用户最初是操作系统开发者出于安全的考虑,开发的一种操作机制
为什么要有用户?
1、系统的进程需要指定的用户进行运行
2、root管理系统权限太大,需要普通用户进行管理
查看用户的基本信息
#id 查看当前登陆用户的信息
[root@root ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@root ~]# id oldboy
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy)
UID
0------>超级管理员用户 权限最大
1~200 --------> 系统用户,用来运行系统自带进程,默认已创建
201~999------>系统用户,用来运行安装的程序,所以此类用户无需登录系统
1000+ ------->普通用户,是由管理员创建的用于日常工作的用户,权限较小,能执行的任务也有限
需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000
开始的(即使前面有闲置的号码)
#用户的基本信息存放在/etc/passwd文件里如:
[root@root ~]# head -1 /etc/passwd
root: x:0:0:root:/root:/bin/bash
以冒号为分隔符,分为7列,其中:
第一列:root #用户名称
第二列:x #用户密码占位符
第三列:0 #用户的UID信息
第四列:0 #用户的GID信息
第五列:root #用户的注释信息
第六列:/root #用户的家目录
第七列:/bin/bash #用户的命令解释器 能够登陆系统的 /sbin/nologin 禁止登录系统
用户的密码及账号信息在/etc/shadow中
[root@localhost ~]# head -2 /etc/shadow
root:$6$e1SAoEz9bZKJufvJ$ESwFp17Jd/LKq3nDjhs74XUJP50OYj4cz7hkZtuRcgYhQfsNCnK3agQfiWGVQWUstItihYBg2NeoPf8kqI7Dh1::0:99999:7:::
bin:*:17834:0:99999:7:::
#以冒号为分隔符分割了9列
第一列: root #用户的名称
第二列: * 或者 !! #加密后的密码信息, * 和 !! 表示的是没有密码
第三列: 17834 #密码最后一次修改距离1970年1月1日过了多少天
第四列: 0 #密码最短有效期 0没有限制
第五列: 99999 #密码最长有效期 99999 没有限制
第六列: 7 #密码到期前的预警时间
第七列: 10 #密码到期后的宽恕时间
第八列: 20391231 #账号过期时间
第九列: 空 #没有使用 (保留字段,目前为空,以备将来Linux发展之用)
用户管理命令汇总
useradd #添加用户
userdel #删除用户
usermod #修改用户信息
id user/who/w/ #查看用户信息
whoami #查看当前用户名称
创建用户:
useradd user1
使用该命令创建用户账户时,默认的用户家目录会被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。这些默认设置可以根据以下选项的 useradd 命令参数自行修改。
–u:指定用户的UID
–g:指定用户所属的主群
–G:指定用户所属的附加群
–d:指定用户的家目录
–c:指定用户的备注信息
–s:指定用户所用的shell
-e:修改过期时间
-M: 不创建家目录
-r: 创建系统账户,uid处于系统用户范围内,默认就没有家目录
[root@root ~]# useradd user01
[root@root ~]# useradd user02 -u 503 # 创建用户usr02,指定uid
[root@root ~]# useradd user03 -d /aaa # 创建用户user03 指定家目录
[root@root ~]# useradd user04 -M # 创建用户user04,不创建家目录
[root@root ~]# useradd user05 -s /sbin/nologin # 创建用户并指定shell
[root@root ~]# useradd user06 -g hr # 创建用户,指定主组
[root@root ~]# useradd user07 -G sale # 创建用户,指定附加组
[root@root ~]# useradd user08 -e 2014-04-01 # 指定过期时间
[root@root ~]# useradd user10 -u 4000 -s /sbin/nologin
[root@aliyum ~]# useradd xxx -M -s /sbin/nologin # 创建普通用户,但是没有家目录,不能登录系统
[root@aliyum ~]# useradd -r yyy -s /sbin/nologin # yyy属于系统用户,uid处于系统用户uid范围内
删除用户
userdel 用户名 # 删除用户user1,但不删除用户家目录和mail
[root@localhost ~]# userdel user1
userdel -r 用户名 #彻底删除用户
[root@localhost ~]# userdel -r user1
修改用户(usermod)
usermod参数与useradd参数基本一致
-u #指定要修改用户的UID
-g #指定要修改用户基本组
-a #将用户添加到补充组。仅与-G选项一起使用,意为追加,不覆盖原来的组
-G #指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组
-d #指定要修改用户家目录
-c #指定要修改用户注释信息
-s #指定要修改用户的bash shell
其他选项
-m #将用户主目录的内容移动到新位置。如果当前主目录不存在,则不会创建新的主目录
-l #指定要修改用户的登陆名
-L #指定要锁定的用户
-U #指定要解锁的用户
[root@root ~]# usermod -e 2013-02-11 user1000 # 修改过期时间
[root@root ~]# usermod -g group1 jj # 修改主组
[root@root ~]# usermod -a -G group2 jj # 修改附加组,-a添加,不加-a代表覆盖
查看用户
[root@localhost ~]# id #查看当前用户 的信息
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# who #查看所有登录的用户信息
root tty1 2021-03-04 18:57
root pts/0 2021-03-04 18:57 (192.168.1.1)
root pts/1 2021-03-09 16:02 (192.168.1.1)
[root@localhost ~]# whoami 查看当前登陆用户的用户名
root
[root@localhost ~]# w
16:38:31 up 48 min, 3 users, load average: 0.05, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 Thu18 4days 0.01s 0.01s -bash
root pts/0 192.168.1.1 Thu18 4days 0.02s 0.02s -bash
root pts/1 192.168.1.1 16:02 7.00s 0.03s 0.01s w
补充内容:用户创建相关的文件
创建用户时,没有相关的指定消息,系统会根据 /etc/login.defs、/etc/default/useradd两个文件进行创建用户
了解内容
[root@localhost ~]# 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-700=077
USERGROUPS_ENAB yes #创建或删除用户的时候,没有指定组,默认创建或删除跟用户相同名称的组
ENCRYPT_METHOD SHA512 #密码的加密规则
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #当创建用户没有指定组,且USERGROUPS_ENAB为no的时候,这个选项才生效
HOME=/home #创建用户的家目录位置
INACTIVE=-1 #跟shadow文件的第七列,密码到期后的宽恕时间 -1 密码永不失效 不启用
EXPIRE= #跟shadow文件的第八列 账号密码的失效时间 时间戳 空则表示永不失效
SHELL=/bin/bash #默认的命令解释器
SKEL=/etc/skel #默认创建的家目录模板
CREATE_MAIL_SPOOL=yes #创建邮件相关信息
用户命令行故障:(针对不小心删了家目录下的bash文件,了解内容)
[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
设定与修改密码
修改或添加Linux普通用户的密码,直接影响的文件是/etc/shadow(存放密码与账号的对应关系的文件)
passwd # 默认给当前用户设定密码
passwd 用户名 # root用户可以给自己以及所有其他用户设定密码,普通用户只能设定自己的密码
echo “密码” | passwd --stdin 用户名 # 非交互式
#补充:可以利用系统内置变量生成随机字符串来充当密码(了解内容)
[root@aliyum ~]# echo $RANDOM|md5sum|cut -c 1-10
70ba11a74b
#设置成功但不知道密码
[root@aliyum ~]# echo $RANDOM | md5sum | cut -c 1-10 | passwd --stdin test01
Changing password for user test01.
passwd: all authentication tokens updated successfully.
#将密码重定向到pass.txt文件中,并输出一份在屏幕上
[root@localhost ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt
b676039b3f #随机数密码
[root@localhost ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt | passwd --stdin test01
Changing password for user test01.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# cat pass.txt
7d53328b61
用户组文件 :/etc/group
[root@localhost ~]# head -1 /etc/group
root: x:0:
#以冒号分隔,分成四列
第一列:root #用户组的名称
第二列:x #用户组的密码占位符
第三列:0 #用户组的ID/GID
第四列: #显示该用户组作为那个用户的附加组,多个用逗号分隔
用户组密码文件:/etc/gshadow
[root@localhost ~]# head -1 /etc/gshadow
root:::
#以冒号分隔分成四列
第一列:root #用户组的名称
第二列: #用户组的密码,这个段可以是空或!,如果为空或!,表示没有密码
第三列: #用户组管理者,这个字段也可为空,如果有多个用户组管理者用逗号分隔
第四列: #显示该用户组作为那个组的附加组,多个用逗号分隔开
组管理命令汇总
groupadd #增加用户组
groupdel #删除用户组
groupmod #修改用户组
gpasswd #设置用户名密码
newgrp #切换用户组
创建用户组的命令 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:
删除用户组的命令 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
修改用户组的命令 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:
#添加一个组到用户
[root@localhost home]# useradd gtest
[root@localhost home]# vim /etc/group
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2204(group3)
[root@localhost home]# gpasswd -a gtest group2
Adding user gtest to group group2
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2304(group2),2204(group3)
#添加多个组到用户
[root@localhost home]# gpasswd -M gtest,root,dayu group
gpasswd: group ‘group’ does not exist in /etc/group
[root@localhost home]# gpasswd -M gtest,root,dayu group3
[root@localhost home]# id root
uid=0(root) gid=0(root) groups=0(root),2000(abc),2003(group1),2204(group3)
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),0(root),1000(oldboy),2204(group3)
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2304(group2),2204(group3)
#为一个组添加组长(组长有权限向组内添加用户,其他用户[除root外]没有权限添加用户到该组)
[root@localhost ~]# gpasswd -A dayu group3
[root@localhost ~]# cat /etc/gshadow
group3:!:dayu:gtest,dayu,oldboy
#组权限
[root@localhost ~]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),1000(oldboy),2204(group3)
[root@localhost ~]# chown .group3 /tmp/12.txt
[root@localhost ~]# ls -l /tmp/12.txt
-rw-r–r-- 1 root group3 4 Mar 15 11:35 /tmp/12.txt
[root@localhost ~]# chmod g+w /tmp/12.txt
[root@localhost ~]# ls -l /tmp/12.txt
-rw-rw-r-- 1 root group3 4 Mar 15 11:35 /tmp/12.txt
[root@localhost ~]# su - dayu
Last login: Mon Mar 15 11:37:05 CST 2021 on pts/3
[dayu@localhost ~]$ echo “456” > /tmp/12.txt
[dayu@localhost ~]$ cat /tmp/12.txt
456
[dayu@localhost ~]$