用户管理 Linux中用户的概述 用户指的是能够正常登录Linux或windows系统
与windows用户的区别:
支持同一个用户多个设备同时登录
支持不同的用户多个设备同时登录
用户的作用
1)系统上的每一个进程(运行的程序)都需要特定的用户运行
2)每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
3)进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关
查看系统中用户的命令
选项
说明
-u
查看当前登录用户的uid
-g
查看当前登录用户的gid
-n
配合-u或者-g一起使用 配合-u:查看当前登录用户uid对应的名字 配合-g:查看当前登录用户gid对应的名字
1 2 3 4 5 6 7 8 9 10 11 12 13 id:默认情况不加用户名则查看当前登录用户的信息 id [用户名] [root@localhost ~] uid=1000(python) gid=1000(python) groups=1000(python) uid=1000(roger) gid=1000(roger) groups=1000(roger) ps:id不加任何参数查看的是当前登录用户
后台进程查看
1 2 3 4 5 6 [root@localhost ~] UID PID PPID C STIME TTY TIME CMD root 1 0 0 Apr01 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 Apr01 ? 00:00:00 [kthreadd] root 3 2 0 Apr01 ? 00:00:00 [ksoftirqd/0] root 5 2 0 Apr01 ? 00:00:00 [kworker/0:0H]
系统用户相关的配置文件 1 2 3 4 /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd
1 2 3 4 5 6 7 [root@localhost ~] root:x:0:0:root:/root:/bin/bash dbus:x:81:81:System message bus:/:/sbin/nologin /bin/bash:交由bash执行 /sbin/nologin:不允许用户登录
第一列
第二列
第三列
第四列
第五列
第六列
第七列
内容
dbus
x
81
81
System message bus
/
/sbin/nologin
作用
用户名
密码占位符
UID
GID
用户描述信息
用户家目录
用户登录的shell
/etc/shadow
1 2 3 4 5 6 7 8 [root@localhost ~] root:$6 $YOE1El8va0a /N13b$E5HM /7RVJu4rY.Kbfp9iC2msOras3rWKzOzWZqmjnVBsFswaZXhz.TCrlbffyavK8nG61.19xOLJBoVrnb7Zb0::0:99999:7::: bin:*:17834:0:99999:7::: daemon:*:17834:0:99999:7::: adm:*:17834:0:99999:7::: *、!!:表示没有密码
第一列
第二列
第三列
第四列
第五列
第六列
第七列
第八列
第九列
内容
bin
*
17834
0
99999
7
2
6627567
空
作用
用户名
密码(加密)
上一次修改密码从1970年到现在过了多少天
密码最少使用多少天,0代表没有限制
密码最多使用多少天
密码快过期前7天,提示修改密码
密码过期后2两天强制修改密码
账户失效时间
保留
用户分类(约定、规范CentOS7)
用户UID
系统中含义
0
超级管理员用户
1-200
系统用户(系统自己创建的)
201-999
系统用户(可以手动创建)
1000+
普通用户
chage命令修改用户信息(了解) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 -d -m -M -W -I -E -l [root@roger ~] Sun Aug 31 00:00:00 CST 2014 [root@roger ~] Sun Aug 31 00:00:01 CST 2014 [root@roger ~] [root@roger ~] [root@roger ~] roger1:!!:16312:0:99999:7::: [root@roger ~] [root@roger ~] roger1:!!:16314:0:99999:7::: [root@roger ~] [root@roger ~] roger1:!!:16314:2:99999:7::: [root@roger ~] [root@roger ~] roger1:!!:16314:2:15:7::: [root@roger ~] [root@roger ~] roger1:!!:16314:2:15:6::: [root@roger ~] [root@roger ~] [root@roger ~] [root@roger ~] roger1:!!:16314:2:15:6:5:: [root@roger ~] [root@roger ~] roger1:!!:16314:2:15:6:5:6627567: [root@roger ~] Last password change : Sep 01, 2014 Password expires : Sep 16, 2014 Password inactive : Sep 21, 2014 Account expires : Aug 31, 2015 Minimum number of days between password change : 2 Maximum number of days between password change : 15 Number of days of warning before password expires : 7 1.验证普通用户是否能修改密码, 不需要调整时间。 2.普通用户登陆系统后, 会提示警告密码还剩多少天过期 [root@roger ~] 3.普通用户登陆系统后, 强制要求修改密码 [root@roger ~] 4.普通用户登陆系统后, 提示账户已过期 [root@roger ~]
用户操作命令 用户创建
选项
说明
-u
创建用户时指定用户的uid
-g
创建用户时指定用户的gid 指定用户组名(该组必须存在)
-G
创建用户时指定用户的附加组(该组必须存在)
-c
创建用户时指定用户的描述信息
-d
创建用户时指定用户的家目录(该目录可以不存在,会自动创建)
-M
创建用户时不创建用户的家目录
-s
创建用户时指定用户登录的shell(默认是/bin/bash)
-r
创建用户时指定用户为系统用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 useradd 注意:创建用户在默认不指定组的情况下,会同时出跟该用户名相同的组,跟uid相同的gid,除非-g指定组,则 不会创建同名组 useradd [options] 用户名 [root@root ~] [root@root ~] [root@root ~] [root@root ~] [root@root ~] [root@root ~] [root@root ~] [root@root ~] [root@root ~] [root@root ~] -M 启动程序不需要家目录,容易被黑客攻击 [root@localhost ~] useradd: group '666' does not exist 原因:666这个组不存在,前提,-g必须加入到一个已存在的组 [root@localhost ~] [root@localhost ~] useradd: warning: the home directory already exists. Not copying any file from skel directory into it. 原因:使用-d指定用户的家目录时,家目录不能提前创建
修改用户
选项
说明
-u
修改用户时指定用户的uid
-g
修改用户时指定用户的gid 指定用户组名(该组必须存在)
-G
修改用户时指定用户的附加组,会覆盖原来的附加组(该组必须存在)
-a
修改用户附加组的时候,配合-a追加使用
-c
修改用户时指定用户的描述信息
-d
修改用户时指定用户的家目录(该目录可以不存在,会自动创建)
-m
修改用户时迁移用户的家目录,必须配合-d使用
-s
修改用户时指定用户登录的shell(默认是/bin/bash)
-l
更改用户登录名
-L
锁定用户
-U
解锁用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 usermod usermod [options] 用户名 [root@root ~] [root@root ~] [root@root ~] usermod: user hl3 is currently used by process 70107 原因:hl3用户当前正在被PID为70107进程占用,所以无法修改
删除用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 userdel 注意:删除用户,默认情况下,只删除用户本身,其他相关目录文件不会删除 userdel [options] 用户名 [root@root ~] [root@localhost ~] useradd: warning: the home directory already exists. Not copying any file from skel directory into it. Creating mailbox file: File exists 原因:创建用户时,该用户以前创建过,但是在删除时没有加-r选项,没有删干净(用户同样可以创建出来)
查看用户其他命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@localhost ~] 当前登录用户 终端 登录时间 从哪个IP登录 root pts/0 2022-04-01 11:00 (10.0.0.1) [root@localhost ~] 当前系统时间 服务器总共运行时间 登录用户数 系统的平均负载 08:52:18 up 15 days, 2:03, 4 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.1 Fri11 2.00s 1.59s 0.00s w root pts/1 10.0.0.1 23Mar22 3days 0.54s 0.54s -bash root pts/2 10.0.0.1 21Mar22 12days 0.04s 0.04s -bash root pts/3 10.0.0.1 23Mar22 12days 0.06s 0.06s -bash [root@localhost ~] root
创建用户流程 /etc/login.defs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 [root@localhost ~] [root@localhost ~] 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 SHA512 ENCRYPT_METHOD SHA512
权限了解
1 2 3 4 5 6 7 8 9 10 11 12 13 r:读权限 4 w:写权限 2 x:执行权限 1 -:没有权限 0 目录创建默认权限:0777 - umask 文件创建默认权限:0666 - umask if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then umask 002 else umask 022 fi
/etc/default/useradd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@localhost ~] GROUP=100 ps:如果login.defs文件中的USERGROUPS_ENAB yes是no,该行配置才会生效 HOME=/home INACTIVE=-1 EXPIRE= 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
文件中
用户的密码管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 passwd:给用户设置密码 passwd [用户名] ps:如果不加用户名,则修改当前登录用户的密码,只有root用户能在passwd命令后加用户名 [root@localhost ~] Changing password for user python. New password: BAD PASSWORD: The password is a palindrome Retype new password: passwd: all authentication tokens updated successfully.
免交互方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 stdin:标准输入 stdout:标准输出 stderr:错误输出 [root@localhost ~] Changing password for user python. passwd: all authentication tokens updated successfully. vim creat_user #!/bin/bash for i in `seq -w 10`;do useradd roger$i echo '123' | passwd --stdin roger$i done
随机密码生成
1 2 3 4 tee:管道命令 -a:append 追加 [root@localhost ~]
用户组管理 随机密码生成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] test.txt: OK ps:只要文件篡改就检验失败 date:查看当前系统时间 date +%F-%T:2022-04-09-14:25:13 date +%F" " %T:2022-04-09 14:25:30 date +%F-%T | md5sum date -s "2022/4/9 14:34:00" date +%Y-%m-%d %Y:年 %m:月 %d:日 %H:时 %M:分 %S:秒 %F:年月日 %T:时分秒 -l:长度 -d:数字 -c:小写字母 -C:大写字母 -s:特殊符号 [root@test ~] uzC4nJ$UWh2 {k
用户组管理 /etc/group
1 2 3 4 5 6 7 [root@localhost ~] root:x:0: 1.组名字 2.组密码占位符 3.GID 4.显示该组的附加成员
/etc/gshadow
1 2 3 4 5 6 7 [root@localhost ~] root:::roger01 1.组名字 2.组密码(空和!是没有密码) 3.组管理员 4.显示该组的附加成员
创建组groupadd
选项
说明
-g
指定组的gid
-r
指定gid范围201-999之间的系统组
1 2 3 4 5 6 7 8 9 10 11 12 13 groupadd groupadd [options] 组名 [root@localhost ~] [root@localhost ~] [root@localhost ~] workpress02:x:10000: [root@localhost ~] [root@localhost ~] workpress03:x:996:
删除组groupdel
1 2 3 4 5 6 7 groupdel groupdel 组名 [root@localhost ~]
修改组groupmod
选项
说明
-g
修改组的gid
-n
修改组名字
1 2 3 4 5 6 7 8 9 10 11 12 groupmod groupmod [options] 组名 [root@localhost ~] [root@localhost ~] workpress02:x:10002: [root@localhost ~] [root@localhost ~] workpress03:x:10002:
修改组密码(了解)
1 2 3 4 5 [root@zls ~] [root@zls ~] Changing the password for group devops New Password: Re-enter new password:
切换基本组身份(了解)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@docker ~] [root@docker ~] uid=1069(zls) gid=5005(zls) groups=5005(zls) [root@docker ~] [zls@docker ~]$ touch file_roots [zls@docker ~]$ ll -rw-rw-r-- 1 zls zls 0 Jun 13 10:06 file_roots [zls@docker ~]$ newgrp devops Password: [zls@docker ~]$ touch file_test [zls@docker ~]$ ll total 0 -rw-rw-r-- 1 zls zls 0 Jun 13 10:06 file_roots -rw-r--r-- 1 zls devops 0 Jun 13 10:08 file_test
用户身份切换 Linux系统中,有时候普通用户有些事情是没办法操作,除非是root管理员用户才能做到。这时就需要临时切换到root管理员身份来做事了。那么在学习如何切换用户之前,我们先来了解下用户工作环境
如何在普通用户的情况下,完成日常工作?
su 切换用户,使用普通用户登录,然后使用su命令切换到root
sudo 提权,当需要使用root权限时,进行提权,而无需切换至root用户
切换用户su
1 2 3 4 5 6 7 8 9 10 su su - 用户名 [root@localhost ~] [root@localhost ~] [root@localhost ~]
shell的种类
交互式shell
等待用户输入执行的命令(终端操作,需要不断提示):passwd
非交互式shell
执行shell脚本, 脚本执行结束后shell自动退出:su - 用户
登录式shell
非登录式shell
不需要输入用户名和密码,就可以登录
只加载~/.bashrc、/etc/bashrc 、/etc/profile.d/*.sh
系统环境变量文件
1 2 3 4 5 6 7 8 ~/.bashrc ~/.bash_profile /etc/profile:不能轻易修改 /etc/profile.d/*.sh:推荐在这里增加配置文件,更安全 /etc/bashrc:
环境变量加载顺序
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
sudo提权
什么是sudo
?
sudo
就是普通用户可以提权,执行root用户可以执行的命令
为什么要用到sudo
?
如果在公司中,入职后,领导给运维的用户是普通用户,但是有些命令只能root执行
sudo
如何使用
配置文件/etc/sudoers
1 2 3 4 5 6 7 99 100 root ALL=(ALL) ALL 1.用户名 2.主机名 3.角色名 4.命令名
编辑权限visudo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 python ALL=(ALL) ALL [root@localhost ~] [sudo] password for python: python ALL=(ALL) NOPASSWD:ALL Host_Alias FILESERVERS = fs1, fs2 python FILESERVERS=(ALL) NOPASSWD:ALL Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum python FILESERVERS=(ALL) NOPASSWD:Cmnd_Alias SOFTWARE Cmnd_Alias SOFTWARE = !/bin/rpm, !/usr/bin/up2date python FILESERVERS=(ALL) NOPASSWD:Cmnd_Alias SOFTWARE %wheel ALL=(ALL) ALL %wheel ALL=(ALL) NOPASSWD:ALL usermod 用户名 -G 提权组 [root@localhost ~] sudo: ll: command not found 原因:ll是别名,不是系统命令,sudo不走别名,只认识系统命令
/var/db/sudo
1 2 3 4 /var/db/sudo/lectured 通过Atime检验是否过期
sudo
执行流程
总结
1 2 3 4 5 6 7 1.会修改visudo,添加用户提权 2.给用户免密执行sudo的权限 3.自定义用户的可执行命令,和不可执行命令 4.给组分配提权的权限 5.提权不用修改visudo,只需要加入wheel组,即可 注意:除非企业中有要求,哪些命令需要用,哪些不能使用