一、Linux用户管理
1.1 用户的作用
- 每个运行的程序,都需要一个特定的用户来运行
- 公司通常使用普通用户,root权限过大,容易产生故障
1.2 用户的分类
用户UID | 系统中约定的含义 |
---|---|
0 | 超级管理员用户 |
1~200 | 系统用户,用来运行程序自带的进程,默认已创建 |
201-999 | 系统用户,用来运行用户安装的程序,此类用户无需登录 |
1000+ | 普通用户,正常可以登录系统的用户,权限较小,执行的任务有限 |
- 补充:用户查询方法
[root@web01 linie]#id #查询当前用户
uid=0(root) gid=0(root) groups=0(root)
[root@web01 linie]#id python #查询指定用户
uid=1023(python) gid=1023(python) groups=1023(python)
1.3 用户相关文件
(1)/etc/passwd
- 密码储存文件
[root@bgx ~]#head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
(2)/etc/shadow
- 密码设置相关
[root@bgx ~]#head -1 /etc/shadow
bgx:!!:16312:0:999999:7:2:66275:
1.4 用户相关命令
(1)useradd-添加用户
- 登录root用户,linux就可以添加用户了
参数:
-u 指定创建用户的UID,不允许冲突
-g 指定创建用户基本组
-G 指定用户附加组,逗号隔开可写多个
-d 指定要创建用户家目录
-s 指定要创建用户的bash shell
-c 指定要创建用户注释信息
-M 创建的用户不创建家目录
-r 创建系统账号,默认无家目录
-s /sbin/nologin 创建的用户无法登录
- 示例
#01、创建用户 linie 用户
用户ID:6000
基本组:ops,附加组dev
[root@web01~]#groupadd ops
[root@web01~]#groupadd dev
[root@web01~]#useradd -u6000 -g ops -G dev -c "添加注释" -s /bin/bash linie
[root@web01~]#id linie
uid=6000(linie) gid=1001(ops) groups=1001(ops),1002(dev)
#02、创建一个nice用户,该用户不需要家目录,该用户不需要登录系统
[root@web01~]#useradd -r nice -M -s /sbin/nologin
[root@web01~]#id nice
uid=997(nice) gid=994(nice) groups=994(nice)
(2)usermod-修改用户
命令作用:
可以使用root账号修改普通用户
参数:
-u 指定修改用户UID
-g 指定要修改的基本组
-G 指定附加组,逗号隔开可添加多个,默认覆盖原来的
-d 指定用户家目录
-s 指定bash shell
-c 注释信息
-l 执行要修改的登录名
-L 指定要锁定的用户
-U 指定要解锁的用户
- 示例
#01、修改linie用户
uid为5001
基本组为network,附加组为ops,dev,sa
注释信息为student,登录名为new_linie
[root@web01~]#groupadd network
[root@web01~]#groupadd ops
[root@web01~]#groupadd dev
[root@web01~]#groupadd sa
[root@web01~]#usermod linie -c "student" -g network -aG sa -l new_linie
[root@web01~]#id new_linie
uid=6000(new_linie) gid=1003(network) groups=1003(network),1002(dev),1004(sa)
#02、修改new_linie用户
为new_linie设置密码
锁定用户,解锁用户
[root@web01~]#echo "123" | passwd --stdin new_linie #设置密码
Changing password for user new_linie.
passwd: all authentication tokens updated successfully.
[root@web01~]#usermod -L new_linie #加锁,远程登录不上
[root@web01~]#usermod -U new_linie #解锁
(3)userdel-删除用户
命令用途:
使用root用户删除普通用户
参数:
-r 连同家目录一起删除
- 示例
userdel -r new_linie
- 彻底删除用户的方法
在/home目录下的文件
在/etc/passwd下的用户
在/etc/group下的用户组
在/var/spool/mail下的邮箱文件
(4)passwd-设置密码
- 普通用户只能修改自己的密码,无法修改其他用户密码且密码必须为8位字符
- 管理员用户允许修改任何人密码,密码长短不限
1️⃣交互式修改密码
passwd #给当前用户修改密码
passwd root #给root用户修改密码
passwd linie #给linie用户修改密码,普通用户只能修改自己的密码
2️⃣非交互式修改密码
#01、修改简单密码
[root@web01~]#echo "123"|passwd --stdin linie
Changing password for user linie.
passwd: all authentication tokens updated successfully.
#02、修改复杂密码
[root@web01~]#echo $(mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4)|tee pass.txt|passwd --stdin linie
Changing password for user linie.
passwd: all authentication tokens updated successfully.
[root@web01~]#cat pass.txt
vX+;9vK<'1
二、Linux用户组管理
- 定义:多个用户为一组,对组操作就是对组中所有的用户进行操作
2.1 分类
- 默认组:创建用户时不指定组,默认创建与用户名同名的组
- 基本组:用户有且只能有一个基本组,创建时可通过-g指定
- 附加组:用户可以有多个付家组,-G指定
2.2 相关配置文件
(1)/etc/group
[root@bgx ~]#head -1 /etc/group
root:x:0:
(2)/etc/gshadow
[root@bgx ~]#head -1 /etc/gshadow
root:::
2.3 用户组相关命令
(1)groupadd
定义:
添加用户组
参数:
-f 如果组存在,提示成功创建状态
-g 为新组设置GID,若GID已存在会提示已存在
-r 创建一个系统组
- 创建一个系统组
[root@web01~]#groupadd linie -g 10000
[root@web01~]#cat /etc/group|grep linie
linie:x:10000:
(2)groupmod
定义:修改组
参数:
-f 如果组已经存在,会提示成功创建的状态
-g 为新组设置GID,若GID已经存在会提示GID已存在
-r 创建一个系统组
-n 该名为新的组
- 该名为新的组
[root@web01~]#cat /etc/group|grep linie
linie:x:6003:
[root@web01~]#groupmod -n yangshi linie
[root@web01~]#cat /etc/group|grep yangshi
yangshi:x:6003:
- 修改gid为6000
[root@web01~]#groupmod yangshi -g 6000
[root@web01~]#cat /etc/group|grep yangshi
yangshi:x:6000:
(3)groupdel
定义:删除组
- 删除一个组
[root@web01~]#groupdel linie
- 删除一个有用户的组
[root@web01~]#groupadd linie
[root@web01~]#useradd tom -g linie
[root@web01~]#groupdel linie
groupdel: cannot remove the primary group of user 'tom' #由于有用户在组中无法直接删除组
[root@web01~]#userdel -r tom
[root@web01~]#groupdel linie
2.4 普通用户提权方法
当我们登录的是普通用户怎么使用他来管理我们的服务器呢?我们下面介绍两种方法:
1、使用su命令进行身份切换
2、使用sudo来提高当前用户的权限
(1)su命令进行身份切换
1️⃣shell登录分类
- 登录式shell:需要输入账号密码才能登录(su -)
- 非登录shell:不需要输入账号密码就能进入(su)
2️⃣环境变量配置及启动顺序
我们使用su切换时会使用到su或者su - ,切换到另一个用户会加载环境变量;因此我们先来查看环境变量的相关内容
- profile类文件:设定环境变量,登录前运行的脚本或命令
- bashrc类文件:设定本地环境变量,定义命令别名
- 用户配置文件
- ~/.bash_profile:
- ~/.bashrc
- 全局环境变量
- /etc/profile
- /etc/profile.d/*.sh
- /etc/bashrc
启动顺序:
su(非登录式shell):
/.bashrc–>/etc/bashrc–>/etc/profile.d/*.sh
su - (登录式shell):
/etc/profile–>/etc/profile.d/*.sh–>~/.bash_profile/ -->/.bashrc -->/etc/bashrc
3️⃣su与环境变量的关系
- 普通用户su 切换到root,需要输入root超级管理员密码
- root切换到普通用户不要要输入密码
- 通过su可以指定用户执行命令或脚本
su - hr01 -c 'ip addr' #使用hr01用户执行命令
(2)sudo命令提权
由于root知道的人多了会导致安全性的事故的发生,所以我们一般都使用sudo命令进行提权
1️⃣系统默认具有sudo权限的组wheel,加入wheel组就具有相应的权限
usermod linie -G wheel #将普通用户linie赋予sudo权限
su - linie #切换到普通用户
sudo rm -rf /opt #使用普通用户删除/opt目录
2️⃣自定义sudo权限
第一步:visudo 添加权限设置
#1.使用sudo定义用户组中的用户,这个方法与group没什么关系
User_Alias OPS = oldxu,oldqiang
User_Alias DEV = oldli,oldguo
#2.定义可执行的命令组,便于后续调用
Cmnd_Alias NETWORKING = /sbin/ifconfig,/bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm,/usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service,/usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount,/bin/umount
Cmnd_Alias DELEGATING = /bin/chown,/bin/chmod,/bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice,/bin/kill,/usr/bin/kill,/usr/bin/killall
Cmnd_Alias GRANT = /bin/vim,/bin/su
#3.使用sudo开始分配权限
OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,STORAGE,DELEGATING,PROCESSES
DEV ALL=(ALL) SOFTWARE,PROCESSES,GRANT
第二步:visudo -c 语法检测
[root@doc01 04:50:23~]#visudo -c
/etc/sudoers: parsed OK
第三步:实验环境搭建
#01、添加用户
useradd linie
useradd fengbiao
#02、创建密码
echo "123" | passwd --stdin linie
echo "123" | passwd --stdin fengbiao
第四步:测试
#分别切换到各个用户查看用户自己的sudo权限
#01、检查linie的权限
[root@doc01 04:54:04~]#su - linie
[linie@doc01 04:54:10~]$sudo -l
User linie may run the following commands on doc01:
(ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum, /sbin/service, /usr/bin/systemctl start, /bin/mount,
/bin/umount, /bin/chown, /bin/chmod, /bin/chgrp, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
#02、查看fengbiao的权限
[fengbiao@doc01 04:56:29~]$sudo -l
User fengbiao may run the following commands on doc01:
(ALL) /bin/rpm, /usr/bin/yum, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /bin/vim, /bin/su