第十七章 Linux系统用户管理详解
一、用户介绍
1.什么是用户
能够正常登录系统的就是用户
1.Linux系统支持多用户同时登陆 互相管理不冲突
2.Windows不支持多用户同时登陆
2.为什么要有用户
1.系统的程序进程需要指定的用户进行运行
2.root管理系统权限太大,需要普通用户进行管理
二、用户跟系统的约定(UID)
1.centos7
0 --- 超级管理员用户 权限最大
1-200 --- 系统用户,系统默认创建好的 不能登录系统的用户 用来运行系统中的程序和进程
201-1000 --- 系统用户 用户自定义的 运行一些软件程序
1000+ --- 普通用户 可以正常登录系统 但是权限很低
2.centos6
1-500 系统用户
500+ 普通用户
三、用户相关的文件
1.用户的基本信息
# 用户的基本信息存放在这个文件里面
[root@jindada ~]# ll /etc/passwd
-rw-r--r-- 1 root root 860 Jul 20 19:50 /etc/passwd
# 以冒号为分隔符,分为7列
[root@jindada ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: root #用户的名称
第二列: x #用户的密码占位符
第三列: 0 #用户的UID信息
第四列: 0 #用户的GID信息
第五列: root #用户的注释信息
第六列: /root #用户的家目录
第七列: /bin/bash #用户的命令解释器 能够登录系统的 /sbin/nologin 禁止登录系统
2.用户的密码信息及账号信息
# 用户的密码信息及账号信息
[root@jindada ~]# ll /etc/shadow
---------- 1 root root 584 Jul 20 19:50 /etc/shadow
# 以冒号为分隔符,分为9列
[root@jindada ~]# head -2 /etc/shadow
root:$6$SoTZ3L8.5rI4::0:99999:7:::
bin:*:17834:0:99999:7:::
第一列: root #用户的名称
第二列: * 或者 !! #加密后的密码信息, * 和 !! 表示的是没有密码
第三列: 17834 #密码最后一次修改距离1970年1月1日过了多少天
第四列: 0 #密码最短有效期 0没有限制
第五列: 99999 #密码最长有效期 99999 没有限制
第六列: 7 #密码到期前的预警时间
第七列: 10 #密码到期后的宽恕时间
第八列: 20391231 #账号过期时间
第九列: 空 #没有使用
3.用户创建的相关文件
创建用户的时候,没有指定相关信息,系统创建用户是根据两个文件进行创建的
[root@jindada ~]# ll /etc/login.defs
-rw-r--r--. 1 root root 2028 Oct 30 2018 /etc/login.defs
[root@jindada ~]# ll /etc/default/useradd
-rw-r--r--. 1 root root 119 Oct 30 2018 /etc/default/useradd
[root@jindada ~]# 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@jindada ~]# 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 #创建邮件相关信息
四、用户管理命令-useradd
1.含义
useradd命令来自于英文词组“User add”的全拼,其功能是用于创建并设置用户信息。使用useradd命令可以自动的完成创建用户的信息、基本组、家目录等工作,并在创建的过程中对用户初始信息进行定制。
已创建的用户则需使用chmod命令修改账户信息,passwd命令修改密码信息。
语法格式:useradd [参数] 用户名
2.常用参数:
-D | 改变新建用户的预设值 |
---|---|
-c | 添加备注文字 |
-d | 新用户每次登陆时所使用的家目录 |
-e | 用户终止日期,日期的格式为YYYY-MM-DD |
-f | 用户过期几日后永久停权。当值为0时用户立即被停权,而值为-1时则关闭此功能,预设值为-1 |
-g | 指定用户对应的gid,前提需存在 |
-G | 指定附加组 ,多个用逗号分割 |
-m | 用户目录不存在时则自动创建 |
-M | 不建立用户家目录,优先于/etc/login.defs文件设定 |
-n | 取消建立以用户名称为名的群组 |
-r | 创建系统用户,默认不创建家目录 命令解释器是允许登录的 |
-u | 指定用户uid |
-s | 指定命令解释器 |
3.常用示例
创建指定的用户信息
[root@jindada ~]# useradd user01
[root@jindada ~]# tail -1 /etc/passwd
user01:x:1000:1000::/home/user01:/bin/bash
[root@jindada ~]# tail -1 /etc/shadow
user01:!!:18464:0:99999:7:::
创建指定的用户信息,指定的uid,指定的家目录,添加注释信息
[root@jindada ~]# useradd -u666 -d /opt/user02 -c "test" user02
[root@jindada ~]# tail -1 /etc/passwd
user02:x:666:1001:test:/opt/user02:/bin/bash
[root@jindada ~]# ll /opt/
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
创建指定的系统用户信息
[root@jindada ~]# useradd -r user03
[root@jindada ~]# tail -1 /etc/passwd
user03:x:665:665::/home/user03:/bin/bash
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
创建指定的系统用户信息,指定不允许登录系统
[root@jindada ~]# useradd -r -s /sbin/nologin user04
[root@jindada ~]# tail -1 /etc/passwd
user04:x:664:664::/home/user04:/sbin/nologin
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
创建指定的用户信息,但不创建家目录,亦不让登录系统
[root@jindada ~]# useradd -M -s /sbin/nologin user05
[root@jindada ~]# tail -1 /etc/passwd
user05:x:1001:1002::/home/user05:/sbin/nologin
[root@jindada ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
创建指定的用户信息,并指定过期时间:
[root@jindada ~]# useradd -e "2023/01/01" user06
五、用户管理命令-usermod
1.含义
usermod命令来自于英文词组“user modify”的缩写,其功能是用于修改用户账号中的各项参数。
语法格式:usermod [参数] 用户名
2.常用参数:
-c<备注> | 修改用户账号的备注文字 |
---|---|
-d<登入目录> | 修改用户登入时的家目录 |
-e<有效期限> | 修改账号的有效期限 |
-f<缓冲天数> | 修改在密码过期后多少天即关闭该账号 |
-g<群组> | 修改用户的gid |
-G<群组> | 修改附加组,默认会覆盖原来的所有附加组 -aG 追加 |
-l<账号名称> | 修改用户账号名称 |
-L | 锁定用户密码,使密码无效 |
-s |
修改用户登入后所使用的shell |
-u |
修改用户的uid |
-U | 解除密码锁定 |
-a | 追加 添加附加组 需跟-G配合使用 |
-m | 迁移家目录 |
3.常用示例
修改指定用户的uid,gid,追加附加组,迁移家目录到/opt/user01下,添加备注信息,修改用户名称
[root@jindada ~]# usermod -u6666 -g 1001 -aG 665,664 -md /opt/user01 -c "123" -l user123 user01
[root@jindada ~]# grep 'user01' /etc/passwd
user123:x:6666:1001:123:/opt/user01:/bin/bash
[root@jindada ~]# id user123
uid=6666(user123) gid=1001(user02) groups=1001(user02),665(user03),664(user04)
修改指定用户可以登录系统
[root@jindada ~]# usermod -s /bin/bash user05
[root@jindada ~]# grep 'user05' /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
锁定、解锁指定用户
[root@jindada ~]# usermod -L user02
[root@jindada ~]# usermod -U user02
六、用户管理命令-userdel
1.含义
userdel命令来自于英文词组“user delete”的缩写,其功能是删除用户账户。Linux系统中一切都是文件,用户信息被保存到了/etc/passwd、/etc/shadow以及/etc/group文件中,因此使用userdel命令实际就是帮助我们删除了指定用户在上述三个文件中的对应信息。
语法格式:userdel [参数] 用户名
2.常用参数:
-f | 强制删除用户账号 |
---|---|
-r | 删除用户主目录及其中的任何文件 |
-h | 显示命令的帮助信息 |
3.常用示例
删除指定的用户账户信息
[root@jindada ~]# userdel user01
删除指定的用户账户信息及家目录
[root@jindada ~]# userdel -r user02
七、查看用户用户组信息命令-id
1.含义
id命令的功能是用于显示用户与用户组信息。UID是指用户身份的唯一识别号码,相当于人类社会的身份证号码,而GID则指用户组的唯一识别号码,用户仅有一个基本组,但可以有多个扩展组。
语法格式:id [参数] 用户名
2.常用参数:
-g | 显示用户所属群组的ID |
---|---|
-G | 显示用户扩展群组的ID |
-n | 显示用户所属群组或扩展群组的名称 |
-r | 显示实际ID |
-u | 显示用户ID |
--help | 显示帮助 |
--version | 显示版本信息 |
3.常用示例
默认查看当前登录的用户的信息
[root@jindada ~]# id
uid=0(root) gid=0(root) groups=0(root)
显示当前用户的所属群组GID
[root@jindada ~]# id -g
0
显示当前用户的身份码UID
[root@jindada ~]# id -u
0
查询当前用户的身份信息
[root@jindada ~]# id nginx
uid=998(nginx) gid=996(nginx) groups=996(nginx)
八、查看用户信息命令-finger
1.含义
finger命令会去寻找并显示指定账号的用户相关信息,包括本地与远程主机的用户皆可,账号名称名优大小写的差别。单独执行 finger 命令,它会显示本地主机现在所有用户的登录信息,包括账号名称,真实名称、登录终端,空闲时间、登录时间,以及地址和电话。
语法格式:finger [参数]
2.安装
[root@jindada ~]# yum install -y finger
3.常用参数
-l | 列出该用户的账号名称、真实姓名、用户根目录、登录所用的 shell、登录时间、邮件地址、电子邮件状态等 |
---|---|
-m | 排除查找用户的真实姓名 |
-s | 列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话 |
-p | 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容 |
4.常用示例
列出当前登录用户的相关信息
[root@jindada ~]# finger -l
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Thu Nov 3 14:42 (CST) on pts/0 from 112.123.8.233
1 second idle
No mail.
No Plan.
显示远程用户信息
[root@jindada ~]# finger -m root@10.0.0.1
查询本机管理员的资料
[root@jindada ~]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Tue Jul 21 17:49 (CST) on pts/0 from 10.0.0.1
7 seconds idle
No mail.
No Plan.
九、查看用户信息命令-who
1.含义
who命令的功能是用于显示当前登录用户信息,包含登录的用户名、终端、日期时间、进程等信息,帮助运维人员了解当前系统的登入用户情况。
语法格式: who [参数]
2.常用参数:
-a | 全面信息 |
---|---|
-b | 系统最近启动时间 |
-d | 死掉的进程 |
-l | 系统登录进程 |
-H | 带有列标题打印用户名,终端和时间 |
-t | 系统上次锁定时间 |
-u | 已登录用户列表 |
3.常用示例
查看当前登录用户信息
[root@jindada ~]# who
root pts/0 2022-11-03 14:42 (112.123.8.233)
查看当前登录用户信息,并加上标题
[root@jindada ~]# who -H
NAME LINE TIME COMMENT
root pts/0 2022-11-03 14:42 (112.123.8.233)
查看当前全部的登录全部用户信息
[root@jindada ~]# who -H -a
NAME LINE TIME IDLE PID COMMENT EXIT
system boot 2022-10-15 15:14
run-level 3 2022-10-15 15:14
LOGIN ttyS0 2022-10-15 15:14 1452 id=tyS0
LOGIN tty1 2022-10-15 15:14 1451 id=tty1
root + pts/0 2022-11-03 14:42 . 19023 (112.123.8.233)
pts/1 2022-10-27 19:00 11399 id=ts/1 term=0 exit=0
查看系统的最近启动时间
[root@jindada ~]# who -b
system boot 2022-10-15 15:14
十、查看用户信息命令-whoami
1.含义
whoami命令是打印与当前有效用户ID关联的用户名;这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID)、声明、本地系统上当前用户的权限、登录标识符(登录 ID)。
whoami命令显示自身的用户名称,本指令相当于执行”id -un”指令。
语法格式:whoami [参数]
2.常用参数:
--help | 在线帮助 |
---|---|
--version | 显示版本信息 |
3.常用示例
查询当前登录的用户名:
[root@jindada ~]# whoami
root
十一、查看用户信息命令-w
1.含义
w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
语法格式:w [参数]
2.常用参数:
-h/--no-header | 不打印头信息 |
---|---|
-u/--no-current | 当显示当前进程和cpu时间时忽略用户名 |
-s/--short | 使用短输出格式 |
-f/--from | 显示用户从哪登录 |
-o/--old-style | 老式输出 |
-i/--ip-addr | 显示IP地址而不是主机名(如果可能) |
--help | 显示此帮助并退出 |
-V/--version | 显示版本信息 |
3.常用示例
显示目前登入系统的用户信息
[root@jindada ~]# w
09:59:15 up 22:14, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 17:49 ? 0.02s 0.00s w
不打印头信息
[root@jindada ~]# w
root pts/0 10.0.0.1 17:49 ? 0.02s 0.00s w
显示用户从哪登录
[root@jindada ~]# w -f
15:49:57 up 19 days, 35 min, 1 user, load average: 0.00, 0.01, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 14:42 5.00s 0.08s 0.00s w -f
使用短输出格式
[root@linuxcool ~]# root@jindada ~]# w -s
15:50:18 up 19 days, 35 min, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM IDLE WHAT
root pts/0 10.0.0.1 2.00s w -s
十二、用户命令行故障
[root@jindada ~]# 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@jindada ~]# 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@jindada ~]# mkdir -m 700 /home/test
[root@jindada ~]# ll -d /home/test
drwx------ 2 root root 6 Jul 21 10:53 /home/test
[root@jindada ~]# 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