当前位置首页 > Linux知识

04.Linux用户管理

阅读次数:686 次  来源:admin  发布时间:

目录04.Linux用户管理1.用户基本概述1.1什么是用户1.2 为什么需要用户1.3 查询用户ID信息1.4 用户相关配置文件1.4.1 passwd文件1.4.2 shadow文件2.用户相关命令2.1 添加用户useradd2.1.1 添加用户示例12.1.2 添加用户示例22.2 修改用户usermod2.2.1 修改用户示例12.2.2 修改用户示例22.3 删除用户userdel2.3.1 删除用户示例12.3.2 删除用户示例22.4 设定密码passwd2.4.1 交互设定密码2.4.2 非交互设定密码2.5 系统创建用户流程2.5.1 /etc/login.defs2.5.2 /etc/default/useradd2.5.3 用户环境变量丢失案例3.用户组基本概述3.1什么是用户组3.2 组有几种类别3.3 组相关配置文件3.3.1 group文件3.3.2 gshadow文件4.用户组相关命令4.1 添加组groupadd4.1.1 添加组示例14.1.2 添加组示例24.2 修改组groupmod4.2.1 修改组示例14.2.2 修改组示例24.3 删除组groupdel4.3.1 删除组示例14.3.2 删除组示例24.4 用户与用户组场景5.普通用户无权限如何提权5.1su命令身份切换5.1.1 Shell登录分类5.1.2 环境变量配置文件5.1.3 su与环境变量的关系5.2 sudo命令提权5.2.1 sudo的由来5.2.2 sudo快速起步5.2.3 sudo权限分配5.2.4 sudo执行流程5.2.5 sudo相关练习

04.Linux用户管理 1.用户基本概述 1.1什么是用户

用户指的是能够正常登录 Linux 或 Windows 系统,比

如:登陆QQ的用户、登陆荣耀的用户、等等

04.Linux用户管理

1.2 为什么需要用户 1.系统上的每一个进程(运行的程序),都需要一个特定的用户运行 2.通常在公司是使用普通用户管理服务器,因为root权限过大,容易造成故障 用户有哪些分类 用户UID(UserID) 系统中约定的含义 0 超级管理员,最高权限,有着极强的破坏能力 rm -rf /* 1~200 系统用户,用来运行系统自带的进程,默认已创建 201~999 系统用户,用来运行用户安装的程序,所以此类用户无需登录系统 1000+ 普通用户,正常可以登陆系统的用户,权限比较小,能执行的任务有限 1.3 查询用户ID信息 使用id命令查询当前登录用户的信息

[root@web ~]# id  #查看当前所登陆的用户信息
uid=0(root) gid=0(root) groups=0(root)
[root@web ~]# id xu #查看其它用户的信息
uid=1000(xu) gid=1000(xu) groups=1000(xu)

1.4 用户相关配置文件 当我们创建一个新的用户,系统会将用户的信息存放在/etc/passwd中,而密码单独存放在/etc/shadow中.这两个文件非常重要,不要轻易删除与修改 1.4.1 passwd文件

/etc/passwd配置文件解释如下图,或者使用命令man 5 passwd获取帮助

04.Linux用户管理

1.4.2 shadow文件 /etc/shadow配置文件解释如下图,或者使用命令man 5 shadow获取帮助

04.Linux用户管理

2.用户相关命令 2.1 添加用户useradd

若想要添加Linux系统普通用户,可以使用useradd命令,使用root账号登录Linux系统之后就可以添加系统普通用户了

选项 描述 -u 指定要创建用户的UID,不允许冲突 -g 指定要创建用户基本组 -G 指定要创建用户附加组,逗号隔开可添加多个附加组 -d 指定要创建用户家目录 -s 指定要创建用户的bash shell -c 指定要创建用户注释信息 -M 给创建的用户不创建家目录 -r 创建系统账户,默认无家目录 2.1.1 添加用户示例1

创建oldgao用户

用户id为7777 基本组为ops,附加组dev 注释信息new student,登录shell: /bin/bash

[root@web ~]# groupadd ops
[root@web ~]# groupadd dev
[root@web ~]# useradd -u 7777 -g ops -G dev
-c "new student" -s /bin/bash oldgao

2.1.2 添加用户示例2

创建一个mysql系统用户[201~999]

该用户不需要家目录 该用户不需要登录系统

[root@web ~]# useradd -r mysql -M -s
/sbin/nologin

2.2 修改用户usermod

若想修改linux系统普通用户,可以使用usermod命令,使用root账号登录linux系统之后就可以修改系统普通用户了

选项 功能描述 -u 指定修改用户的UID -g 指定要修改用户基本组 -G 指定要修改用户附加组,使用逗号隔开多个附加组,覆盖原有的附加组 -d 指定要修改用户家目录 -s 指定要修改用户的bash shell -c 指定要修改用户的注释信息 -l 指定要修改用户的登录名 -L 指定要锁定的用户(x) -U 指定要解锁的用户(x) 2.2.1 修改用户示例1

修改oldgao用户

uid为5008 基本组为network,附加组为 ops,dev,sa 注释信息为student,登录名为new_oldgao

[root@web ~]# groupadd network
[root@web ~]# usermod oldgao -c "student" -g
network -aG sa -l new_oldgao

2.2.2 修改用户示例2

修改new_oldgao用户

为new_oldgao 配置密码 锁定该用户,然后测试远程连接登录 解锁该用户然后再测试远程连接登录

# 锁定用户
[root@web ~]# echo "123" |passwd --stdin
new_oldxu
[root@web ~]# usermod -L new_oldxu
# 解锁用户
[root@web ~]# usermod -U new_oldxu

2.3 删除用户userdel

若想要删除linux普通用户,可以使用userdel命令,使用root账号登录linux之后就可以删除普通用户了

2.3.1 删除用户示例1

删除 new_oldgao用户

连同家目录一起删除

[root@web ~]# userdel -r new_oldgao

2.3.2 删除用户示例2

批量系统中此前创建过的所有无用的用户

使用awk提取无用的用户名称 使用sed拼接删除用户的命令 调用userdel命令,连同家目录一起全部删除

[root@web ~]# awk -F \':\' \'$3>1000{print
$1}\' /etc/passwd |sed -r \'s#(.*)#userdel -r
\1#g\'|bash

2.4 设定密码passwd 创建用户后,如需要使用该用户进行远程登录系统则需要为用户设定密码,设定密码使用passwd 1.普通用户只允许变更自己的密码.无法修改其他人密码,并且密码长度必须8位字符 2.管理员用户允许修改任何人的密码,无论密码长度多长或多短 推荐密码保存套件工具,支持 windows、MacOS、

Iphone 以及浏览器插件 Lastpass官方网站 2.4.1 交互设定密码 通过交互方式为用户设定密码

[root@web ~]# passwd    #给当前用户修改密
码
[root@web ~]# passwd root  #给root用户修改密
码
[root@web ~]# passwd oldxu #给oldxu用户修改密
码,普通用户只能自己修改自己

2.4.2 非交互设定密码 非交互式设定简单密码

[root@web ~]# echo "123" | passwd --stdin
oldxu

非交互式设定随机密码

[root@web ~]# yum install -y expect
[root@web ~]# echo $(mkpasswd -l 10 -d 2 -c
2 -C 2 -s 4) |tee pass.txt| passwd --stdin
oldgao
[root@node ~]# cat useradd_new.sh
#!/bin/bash
for i in mg bob alice
do
pass=$(mkpasswd -l 10 -d 2 -c 2 -C 2 -s
4)
useradd $i
echo "$pass" | passwd --stdin $i
&>/dev/null
    echo "User: $i Pass: $pass"
    echo "User: $i Pass: $pass" >>
user_pass.txt
done

2.5 系统创建用户流程 系统在创建用户时,会参考如下两个配置文件: /etc/login.defs /etc/dafault/useradd 如果在创建用户时指定了参数则会覆盖系统默认的配置,如果没有指定参数则遵循默认配置建立用户; 2.5.1 /etc/login.defs /etc/login.defs 主要定义了创建用户时UID划分规则,密码加密类型,是否创建家目录等

[root@web ~]# grep -Ev "^#|^$"
/etc/login.defs
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
ENCRYPT_METHOD SHA512

2.5.2 /etc/default/useradd

/etc/default/useradd 主要定义

创建家目录位置 默认用户的Shell类型 默认从哪个位置拷贝环境变量 是否创建用户同名邮箱等

[root@web ~]# cat /etc/default/useradd
GROUP=100
HOME=/home      # 把用户的家目录建在/home中
INACTIVE=-1     # 是否启用账号过期停权,-1表
示不启用
EXPIRE=       # 账号终止日期,不设置表示不
启用
SHELL=/bin/bash   # 新用户默认所有的shell类型
SKEL=/etc/skel    # 配置新用户家目录的默认文件
存放路径
CREATE_MAIL_SPOOL=yes  # 创建mail文件

2.5.3 用户环境变量丢失案例

当我们不小心在当前用户家目录下执行 rm -rf .* 后,

再次登陆系统会发现提示符变成了 -bash-4.1$ ,那是因

为我们删除了当前用户的环境变量造成的现象,通过如

下方式即可恢复;

-bash-4.1$ cp -a /etc/skel/.bash* ./
-bash-4.1$ exit
[root@web ~]#

默认 linux 创建用户,会从 /etc/skel 目录中拷贝对

应的环境变量,由 /etc/defaults/useradd 配置文件

定义,所以只需要从该目录中拷贝相应的环境变量文件

即可恢复故障;

3.用户组基本概述 3.1什么是用户组 组是一种逻辑层面的定义 逻辑上将多个用户归纳至一个组,当我们对组操作,其实就相当于对组中的所有用户进行操作 3.2 组有几种类别 对于用户来说,组分为如下几类 默认组:创建用户时不指定组.则默认创建于用户同名的组 基本组:用户有且只能有一个基本组,创建时可通过-g指定 附加组:用户可以有多个附加组,创建时通过-G指定 3.3 组相关配置文件

组账户信息保存在/etc/group 和/etc/gshadow 两个文件中,重点关注grou

3.3.1 group文件 /etc/group 配置文件解释如下图

04.Linux用户管理

3.3.2 gshadow文件 /etc/gshadow 配置文件解释如下图

04.Linux用户管理

4.用户组相关命令 4.1 添加组groupadd

若想要添加linux用户组,可以使用groupadd命令,使用root账号登录linux系统之后就可以添加用户组了

选项 功能描述 -f 如果组已经存在.会提示成功创建状态. -g 为新组设置GID,若GID已经存在会提示GID已经存在 -r 创建一个系统组 4.1.1 添加组示例1 添加一个salary的组 为组设定gid为10000

[root@web ~]# groupadd salary -g 10000
[root@web ~]# tail -1 /etc/group
salary:x:10000:

4.1.2 添加组示例2 添加一个salary_2 的组 添加为系统组

[root@web ~]# groupadd -r salary_2
[root@web ~]# tail -1 /etc/group
salary_2:x:988:

4.2 修改组groupmod

若想要修改linux用户组,可以使用groupmod命令,使用root账号登录linux系统之后就可以修改用户组了

选项 功能描述 -f 如果存在,会提示成功创建状态 -g 为新组设置GID,若GID已经存在会提示已经存在 -r 创建一个系统组 -n 改名为新的组 4.2.1 修改组示例1 修改salary用户组组名为system

[root@web ~]# groupmod -n system salary
[root@web ~]# tail -1 /etc/group
system:x:10000:

4.2.2 修改组示例2 修改system 用户组GID 为5000

[root@web ~]# groupmod system -g 5000
[root@web ~]# tail -1 /etc/group
system:x:5000:

4.3 删除组groupdel

若想要修改 Linux 用户组,可以使用 groupdel 命令,

使用 root 账号登录 Linux 系统之后就可以修改用户组

4.3.1 删除组示例1 删除salary_2系统用户组

[root@web ~]# groupdel salary_2

4.3.2 删除组示例2 创建tom用户,设置主组为system,然后测试删除system组

[root@web ~]# useradd tom -g system
[root@web ~]# groupdel system
groupdel: cannot remove the primary group
of user \'tom\'
# 如果组中存在用户是无法删除该组,必先删除用户后在删
除组
[root@web ~]# userdel -r tom
[root@web ~]# groupdel system

4.4 用户与用户组场景 1.创建 dev 与 ops 两个组;

2.创建 bob 用户,设定基本为 dev ,密码为 123 ;

3.创建 alice 用户,设定基本为 ops ,密码为 123 ;

4.创建 /opt/reosurce 文件,【然后修改属组为

ops 、权限为 664 】

5.测试发现 alice 用户可以读写,而 bob 用户仅可

以查看;

6.现在希望 bob 也能够对文件进行读写,如何快速实

现(为 bob 添加 ops 附加组);

1.创建组与用户

[root@web ~]# groupadd dev
[root@web ~]# groupadd ops
[root@web ~]# useradd bob -g dev
[root@web ~]# useradd alice -g ops

2.为用户设定登录密码

[root@web ~]# echo "123" | passwd --stdin
bob
[root@web ~]# echo "123" | passwd --stdin
alice

3.建立文件.然后分配好权限

[root@web ~]# echo "data" > /opt/resource
[root@web ~]# chgrp ops /opt/resource
# 忽略
[root@web ~]# chmod 664 /opt/resource
# 忽略

4.使用ops组的alice用户测试读和写权限.没有任何问题

[alice@web~]$ echo "alice-data" >>
/opt/resource
[alice@web ~]$ cat /opt/resource
data
alice-data

5.使用 dev 组的 bob 用户测试读和写权限,发现只有读

权限,没有写权限

[bob@web ~]$ echo "bob-data" >>
/opt/resource
-bash: /opt/resource: 权限不够
[bob@web ~]$ cat /opt/resource
data
alice-data

6.为 bob 用户添加 ops 附加组,这样 bob 用户就能借

助 ops 组权限,实现读写操作

[root@web ~]# usermod bob -G ops
[root@web ~]# id bob
uid=1002(bob) gid=2020(dev)
groups=2020(dev),2021(ops)

7.再次测试,发现 bob 用户能借助 ops 组实现读和写操

[bob@web ~]$ echo "bob-data" >>
/opt/resource
[bob@web ~]$ cat /opt/resource
data
alice-data
bob-data

5.普通用户无权限如何提权

往往公司的服务器对外都是禁止 root 用户直接登录,

所以我们通常使用的都是普通用户,那么问题来了?当

我们使用普通用户执行 /sbin 目录下的命令时,会发现

没有权限,这种情况会造成无法正常管理服务器,那如

何才能不使用 root 用户直接登录系统,同时又保证普

通用户能完成日常工作呢?

我们可以使用如下两种方式:su sudo 1.su switch user 身份切换.使用普通用户登录,然后使用su命令切换到root 优点:简单 缺点:需要知道root密码 2.sudo提权,当需要使用root权限时进行提权而无需切换至root用户 优点:安全,方便 缺点:需要预先定义规则.较为复杂 5.1su命令身份切换 在使用su切换身份前.我们需要shell登录分类.环境变量配置文件加载顺序 5.1.1 Shell登录分类 登录 shell 需要输入用户名和密码才能进入 shell 日常接触的最多 非登录 shell 不需要输入用户名和密码就能进入 shell 比如运行 bash 会开启一个新的会话窗口 5.1.2 环境变量配置文件 profile 类文件:设定环境变量.登录前运行的脚本和命令 bashrc 类文件:设定本地变量,定义命令的别名 用户配置文件: ~/.bash_profile ~/.bashrc 全局环境变量: /etc/profile /etc/profile.d/*.sh /etc/bashrc 登录式 shell 配置文件加载顺序: /etc/profile ->/etc/profile.d/*.sh->/.bash_profile->/.bashrc->/etc/bashrc 非登录式 shell 配置文件加载顺序: /.bashrc->/etc/bashrc->/etc/profile.d/*.sh 5.1.3 su与环境变量的关系 su - username 属于登录式 shell su username 属于非登录式 shell 他们最大的区别就在于加载的环境变量不一样

1.普通用使用 su 切换到 root 用户,需要输入 root 超

级管理员密码

[oldxu@web ~]$ su - root
密码:
[root@node1 ~]# pwd
/root

2.以某个用户的身份执行某个服务,使用命令 su -c

username

[root@web ~]# su - oldxu -c \'ifconfig\'
[root@web ~]# su - oldxu -c \'ls ~\'

5.2 sudo命令提权 5.2.1 sudo的由来

u 命令在用户身份切换时,需要拿到 root 管理员密

码;在多人协作时,如果当中某个用户不小心泄露了

root 密码;那系统会变得非常不安全,为了改进这个问

题,从而就有了 sudo ;

其实 sudo 就是给某个普通用户埋下了 浩克hulk 的种

子,当需要执行一些特权操作时,进行发怒,获取最高

权限,但正常情况下还是普通用户,任然会受到系统的

约束以及限制;

04.Linux用户管理

5.2.2 sudo快速起步 快速配置 sudo 方式 [先睹为快]

1.将用户加入 whell 组.默认whell 组有 sudo 权限

[root@node1 ~]# usermod oldxu -G wheel

2.切换至普通用户身份

[root@web ~]# su - oldxu

3.普通用户正常情况下无法删除 /opt 目录

[oldxu@web ~]$ rm -rf /opt/
rm: cannot remove `/opt: Permission denied

4.使用 sudo 提权,然后输入普通用户密码,会发现能

正常删除无权限的 /opt 目录;

[oldxu@web ~]$ sudo rm -rf /opt

5.后期可以通过审计日志查看普通用户提权都执行了什

么操作;

[root@web ~]# tail -f /var/log/secure

5.2.3 sudo权限分配

通过快速提权的方式,我们会发现通过 sudo 什么操作都可以执行,能否有办法限制仅开启某个命令的使用权限,其他命令不允许

实现架构图如下:

1.创建用户,并为用户设定对应的密码

[root@www ~]# useradd ops1
[root@www ~]# useradd ops2
[root@www ~]# useradd dev1
[root@www ~]# useradd dev2
[root@www ~]# echo "1" | passwd --stdin
ops1
[root@www ~]# echo "1" | passwd --stdin
ops2
[root@www ~]# echo "1" | passwd --stdin
dev1
[root@www ~]# echo "1" | passwd --stdin
dev2

2.在/etc/sudoers 文件中配置规则

[root@web ~]# visudo
# 1.使用sudo定义的逻辑分组,这个系统group没关系;
User_Alias OPS = ops1,ops2
User_Alias DEV = dev1,dev2
# 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
# 3.进行权限划分;为OPS/DEV组分配对应的命令集名
称;
OPS  ALL=(ALL)
NETWORKING,SOFTWARE,SERVICES,STORAGE,DELEGA
TING,PROCESSES
DEV  ALL=(ALL) SOFTWARE,PROCESSES

3.然后登陆对应的用户检查相应的 sudo 权限

# 检查ops用户sudo权限
[ops1@web ~]# sudo -l
[sudo] password for ops1:
User ops1 may run the following commands on
web:
 (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
#检查dev用户sudo权限
[dev1@web ~]# sudo -l
[sudo] password for dev1:
User dev1 may run the following commands on
web:
 (ALL) /bin/rpm, /usr/bin/yum,
/bin/nice, /bin/kill, /usr/bin/kill,
/usr/bin/killall

5.2.4 sudo执行流程

udo 命令执行流程如下

1)普通用户执行sudo命令时,会检查/var/db/sudo 是否存在时间戳缓存 2).如果存在则不需要输入密码,否则需要用户输入密码 3).输入密码会检测是否该用户是否拥有权限 4).如果有则执行,否则报错退出

04.Linux用户管理

5.2.5 sudo相关练习

1.授予 jack 用户能通过 sudo 执行 ls,sed,awk 命令

权限如何书写

jack  ALL=(ALL) 
/bin/ls,/bin/sed,/bin/awk

2.授予 alice 用户, sudo 执行 linux 所有命令并且不

用输入密码如何书写

alice  ALL=(ALL)  NOPASSWD:ALL

3.授权 oldxu 用户, sudo 执行 passwd 命令修改任何

用户的密码,但唯独不能修改 root 用户的密码;

oldxu  ALL=(ALL)  /bin/passwd [a-z]*,
!/bin/passwd root

上一篇:Linux程序编译链接动态库版本号的问题
下一篇:两台Windows的IIS应用站点基于NLB+ARR实现双机热备和负载