用户
用户账户用于可以运行命令的不同用户和程序之间提供安全界限。在系统内部通过分配的唯一标识号(用户ID或UID)来区分不同的用户账号。
系统中的每一个进程都作为一个特定的用户运行。每个文件都有一个特定的用户作为其所有者。文件所有权有助于系统对文件用户实施访问控制。与运行的进程相关联的用户可确定该进程可访问的文件和目录。
- Linux中用户类型可分为三种:
-- 超级用户账户用于管理系统。称为root,UID为0.超级用户对系统拥有完全访问权限
-- 系统的系统用户账户提供支持服务进程使用。这些进程通常不需要以超级用户身份进行运行。系统会分配非特权账户,允许他们确保其文件和其它资源不受彼此以及系统上普通用户的影响。用户无法使用系统用户账户以交互方式登录。
--大多数用户都有用于处理日常工作的普通用户账户。与系统用户一样,普通用户对系统具有有限的访问权限。
#可以使用id命令查看用户的信息
[user@serverb 20:07:33 ~]$id #查看当前登录用户的信息
uid=1001(user) gid=1001(user) groups=1001(user) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@serverb ~]# id user01 #查看指定用户信息
uid=1002(user01) gid=1002(user01) groups=1002(user01)
- /etc/passwd文件存储本地用户信息
[root@serverb ~]# cat /etc/passwd
(1)root:(2)x:(3)0:(4)0:(5)root:(6)/root:(7)/bin/bash
分析:
-- (1):用户的用户名(root)
-- (2):用户的密码占位符,曾以密码加密的格式存储在这,后移至/etc/shadow中
-- (3):该用户的UID(root用户为0)
-- (4):该用户的GID(root用户为0)
-- (5):该用户的真实姓名
-- (6):该用户的家目录,用户启动shell时的初始目录
-- (7):该用户默认的shell程序,一般普通用户使用/bin/bash;如果系统用户不允许进行交互式登录,可能会使用/sbin/nologin
用户组
组是需要共享文件和其它系统资源访问权限的用户的集合。组可以用于向一组用户,授予文件访问权限,而非仅仅向一个用户授予访问权限。
- /etc/group文件存储有关本地组的信息
[root@serverb ~]# cat /etc/group
... ...
(1)user01:(2)x:(3)1002:(4)
分析:
-- (1):该组的组名称
-- (2):过时的组密码,该字段始终为x
-- (3):该组GID
-- (4):可有可无,属于作为补充组的该组成员的用户列表
- 补充组和主要组
-- 主要组:/etc/passwd文件中用户信息显示的GID表示主要组的GID;在创建用户时,系统会默认创建一个与用户名同名的组
-- 补充组:对用户额外操作加入指定组中
获取超级用户的访问权限
一般情况下,普通用户就能够完成权限授予的工作。但是很多涉及到系统级别的工作还是需要用root用户完成。此时就要向root用户提权。
- 切换用户su
su命令可以让用户切换至另一个用户,如果从普通用户运行su命令,系统会提示输入要切换的账号的密码。当以root用户身份运行su时,则无需输入用户密码。
[user@serverb 20:57:32 ~]$su - user01
Password:
#如果运行su - 默认时切换到root用户
[user@serverb 20:58:34 ~]$su -
Password:
Last login: Wed Mar 22 20:06:43 CST 2023 from desktop-up0o41n.lan on pts/0
[root@serverb ~]#
[root@serverb ~]# su - user
Last login: Wed Mar 22 20:57:32 CST 2023 on pts/0
[user@serverb 20:58:56 ~]$
- sudo命令运行
有时安全起见,root用户的账号可能根本没有有效的密码。用户无法使用密码登录root账号,也不能用su命令切换root获取shell。这时候可以使用sudo命令。
与su命令不同的是,sudo通常要求用户输入其自身的密码以进行身份验证,而不是输入正尝试访问用户账户的密码。
sudo可以配置为允许特定用户向某一个用户一样运行任何命令,或仅允许该用户执行部分命令,后面会有介绍如何配置sudo
sudo的好处,执行的所有命令都默认为将日志记录到/var/log/secure中
[user@serverb 21:09:27 ~]$sudo -i #使用该命令可切换root用户,并运行root的默认shell
[sudo] password for user:当前用户的密码
- sudo配置
sudo的主配置文件在/etc/sudoers。如果有多个管理员试图同时编辑该文件,为了避免出现问题,只应使用特殊的visudo命令进行编辑
默认情况下/etc/sudoers还包含/etc/sudoers.d目录中所有文件内容,作为配置文件的一部分。这样管理员只需将相应的文件放入该目录即可为用户添加sudo访问权限。
总的来讲:可以直接编辑visudo或是在/etc/sudoers.d目录下放入内容。
[user@serverb 21:24:52 ~]$sudo -i
user is not in the sudoers file. This incident will be reported. #在没有visudo增加用户权限时,是无法提权
#使用直接visudo编辑的方法
[root@serverb ~]# visudo
user(指定的用户) ALL=(ALL)(可能包含此文件的任何主机上) ALL(可以像系统上用户一样运行所有命令,也可以指定某些命令)
%wheel(%表示规则适用的组) ALL=(ALL) ALL
#或是在/etc/sudoer.d目录下放入文件
[root@serverb sudoers.d]# pwd
/etc/sudoers.d
[root@serverb sudoers.d]# vim user
user ALL=(ALL) ALL
#两种效果一样,配置之后
[user@serverb ~]$ sudo -i
[root@serverb ~]# #切换为root用户
管理本地用户
- 使用useradd创建本地用户
常用选项:
-- -c:指定用户的真实姓名(/etc/passwd中每行的第5个字段)
-- -d:指定用户的家目录(/etc/passwd中每行的第6个字段)
-- -s:指定用户的默认shell(/etc/passwd中的第7个字段)
-- -g:指定新建账户主要组的ID,若要指定必须先新建用户组(不加选项默认是同时新建一个与用户名同名的组)
-- -G:指定新建用户的补充组
[root@myhost ~]# useradd user -s /bin/bash -c "new user" -g practice -G wheel
useradd:“practice”组不存在
[root@myhost ~]# groupadd practice
[root@myhost ~]# useradd user -s /bin/bash -c "new user" -g practice -G wheel
[root@myhost ~]# tail -1 /etc/passwd
user:x:1002:1002:new user:/home/user:/bin/bash
[root@myhost ~]# cat /etc/group | grep 'wheel'
wheel:x:10:kaier,user
[root@myhost ~]# cat /etc/group | grep practice
practice:x:1002:
- 使用usermod修改本地用户属性
常用选项:
-- -c:为用户修改真实名字
-- -d:修改用户的新主目录
-- -g:修改用户的新主要组
-- -G:添加新的附加组
-- -a:利用-G增加补充组,而不是替换
-- -L:锁定用户
-- -U:解锁用户
[root@myhost ~]# useradd -s /bin/bash -G wheel user1
[root@myhost ~]# getent passwd user1
user1:x:1003:1003::/home/user1:/bin/bash
[root@myhost ~]# getent group user1
user1:x:1003:
[root@myhost ~]# cat /etc/group | grep 'wheel'
wheel:x:10:kaier,user,user1
#修改
[root@myhost ~]# usermod -c "new user1" -aG practice user1
[root@myhost ~]# getent passwd user1
user1:x:1003:1003:new user1:/home/user1:/bin/bash
[root@myhost ~]# getent group practice
practice:x:1002:user1
- 查看/etc/login.defs文件中用户有效的UID
[root@myhost ~]# cat /etc/login.defs | grep -E -v '^#|^$'
MAIL_DIR /var/spool/mail
... ...
UID_MIN 1000 #普通用户的最小UID
UID_MAX 60000 #普通用户的最大UID
SYS_UID_MIN 201 #系统用户的最小UID
SYS_UID_MAX 999 #系统用户的最大UID
... ...
- 使用userdel删除用户
常用选项:
-- -r:删除用户时,一并删除用户家目录以及数据(不加该选项只是删除用户信息,家目录和邮件还是保留的)
[root@myhost ~]# ls /home/user1
[root@myhost ~]# ls -ld /home/user1
drwx------ 5 user1 user1 107 3月 23 11:20 /home/user1
[root@myhost ~]# userdel -r user1
[root@myhost ~]# ls -ld /home/user1
ls: 无法访问/home/user1: 没有那个文件或目录
- 使用passwd命令设置或修改用户密码
[root@myhost ~]# passwd #后面不跟用户就是修改当前用户密码
更改用户 root 的密码 。
新的 密码:
[root@serverb ~]# passwd user #root用户修改密码时,不需要用户原密码,普通用户需要
Changing password for user user.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
管理本地用户组
- 使用groupadd名创建组
常用选项:
-- -g:指定用户组GID - 使用groupmod更改用户组属性
- 使用groupdel删除用户组
管理用户密码
- 用户密码存放在/etc/shadow文件下
cat /etc/shadow
user(1):$6$2smsbb..$j/BSFn1WNh71gMcoMUbpNm2bbr6aeA5nT9R61SGSPg6QvcvvP3gMKC2mG4FUqsECQ3ah8uYZFmZg.D8gv.O76.(2):19439(3):0(4):99999(5):7(6):(7):(8):(9)
分析:
(1):用户名
(2):用户密码加密后的格式
(3):用户最近一次修改密码的时间,算法是修改当天与1970-01-01之间相差的天数
(4):用户最少还有多少天才能更改密码的天数(默认是0,就是随时可以修改)
(5):用户最多多少天后一定要修改密码的天数,系统会强制用户修改密码(默认99999)
(6):过期前多少天会被告警(-1为永不提示)
(7):过期后多少天账号为inactive状态
(8):多少天后账号过期,无法登录
(9):保留参数
- 密码的加密格式
$6(1)$2smsbb..(2)$j/BSFn1WNh71gMcoMUbpNm2bbr6aeA5nT9R61SGSPg6QvcvvP3gMKC2mG4FUqsECQ3ah8uYZFmZg.D8gv.O76.
分析:
(1):表示密码的加密算法,6表示哈希-526算法
(2):表示密码的加密盐值salt
(3):用户密码的加密哈希值,salt值和未加密的密码组合并加密,生成加密的密码哈希值
-
密码的期限
图片.png
vim /etc/login.defs
... ...
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 3
PASS_MIN_LEN 5
PASS_WARN_AGE 3
... ...
[root@serverb ~]# useradd akang #只有修改配置文件之后新加的用户才会生效
[root@serverb ~]# getent shadow akang
akang:$6$qjvo6jRD$exO81rZgutJvHdkwiltjbaI3Gv0JvT/zrw4KGl0234hfdNESC0FJrowtBZGWl010J/iIL6/PzHPnwvwEvge5u0:19439:3:99999:3:::
[root@serverb ~]# chage -l akang
Last password change : Mar 23, 2023
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 3
Maximum number of days between password change : 99999
Number of days of warning before password expires : 3
- 使用chage命令设置用户信息
[root@serverb ~]# chage -d 0 akang #
[root@serverb ~]# chage -l akang
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : never
Minimum number of days between password change : 3
Maximum number of days between password change : 99999
Number of days of warning before password expires : 3
#修改密码最大修改时间和密码最小修改时间
[root@serverb ~]# chage -m 1 akang
[root@serverb ~]# chage -M 30 akang
#验证
[root@serverb ~]# chage -l akang
Last password change : Mar 23, 2023
Password expires : Apr 22, 2023
Password inactive : never
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 30
Number of days of warning before password expires : 3
[root@serverb ~]# date 04212023
Fri Apr 21 20:23:00 CST 2023
[root@serverb ~]# su - user
Last login: Sun Apr 23 20:23:06 CST 2023 on pts/0
[user@serverb ~]$ su - akang
Password:
Warning: your password will expire in 1 day #告警密码还有1天到期了
Last failed login: Sun Apr 23 20:23:39 CST 2023 on pts/0
There was 1 failed login attempt since the last successful login.