180天Linux小白到大神-Linux用户管理

04.Linux用户管理

04.Linux用户管理

1.用户基本概述

1.1 什么是用户

1.2 为什么需要用户

1.3 用户有哪些分类

1.3 查询用户ID信息

1.4 用户相关配置文件

1.4.1 passwd文件

1.4.2 shadow文件

2.用户相关命令

2.1 添加用户useradd

2.1.1 添加用户示例1

2.1.2 添加用户示例2

2.2 修改用户usermod

2.2.1 修改用户示例1

2.2.1 修改用户示例2

2.3 删除用户userdel

2.2.1 删除用户示例1

2.2.1 删除用户示例2

2.4 设定密码passwd

2.4.1 交互设定密码

2.4.2 非交互设定密码

2.5 系统创建用户流程

2.5.1 /etc/login.defs

2.5.2 /etc/default/useradd

2.5.3 用户环境变量丢失案例

3.用户组基本概述

3.1 什么是用户组

3.2 组有几种类别

3.3 组相关配置文件

3.3.1 group文件

3.3.2 gshadow文件

4.用户组相关命令

4.1 添加组groupadd

4.1.1 添加组示例1

4.1.1 添加组示例2

4.2 修改组groupmod

4.2.1 修改组示例1

4.2.1 修改组示例2

4.3 删除组groupadd

4.3.1 删除组示例1

4.3.1 删除组示例2

4.4 用户与用户组场景

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

5.1 su命令身份切换

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相关练习

课程大体内容

1.什么是用户?

2.为什么需要用户?

3.如何查看当前用户的详请?

4.创建用户会在系统的哪个配置中保存信息

5.如何创建用户、删除用户、修改用户?

6.如何为用户设定密码,又如何修改密码?

7.用户的创建流程?

8.用户组如何管理?

9.普通用户无权限怎么办? 切换身份 or 提权?

1.用户基本概述

1.1 什么是用户

用户指的是能够正常登录 Linux 或 Windows 系统,比如:登陆QQ的用户、登陆荣耀的用户、等等

1.2 为什么需要用户

1.系统上的每一个进程(运行的程序),都需要一个特定

的用户运行;

2.通常在公司是使用普通用户管理服务器,因为root权限过大,容易造成故障;

1.3 用户有哪些分类

系统对用户有一个约定?(约定娶你,就真的会娶嘛?

tz)

用户

UID(User 系统中约定的含义ID)

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 获取帮助

1.4.2 shadow文件

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

PS: 使用change修改密码过期时间示例

2.用户相关命令

2.1 添加用户useradd

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

选 功能描述

-u 指定要创建用户的UID,不允许冲突

-g 指定要创建用户基本组

-G 指定要创建用户附加组,逗号隔开可添加多个附
加组

-d 指定要创建用户家目录

-s 指定要创建用户的bash shell

-c 指定要创建用户注释信息

-M 给创建的用户不创建家目录

-r 创建系统账户,默认无家目录

2.1.1 添加用户示例1

创建 oldxu 用户

用户ID为 6969

基本组为 ops ,附加组 dev

注释信息 2000 new student ,登陆 shell:/bin/bash

[root@web ~]# groupadd ops [root@web ~]# groupadd dev

[root@web ~]# useradd -u 5001 -g ops -G dev -c “2000 student” -s /bin/bash oldxu

2.1.2 添加用户示例2

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

该用户不需要家目录

该用户不需要登陆系统

[root@web ~]# useradd -r dba -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

修改 oldxu 用户

uid 为5008 ,

基本组为 network ,附加组为 ops,dev,sa 注释信息为 student ,登陆名称为 new_oldxu

[root@web ~]# groupadd network

[root@web ~]# usermod oldxu -c “student” -g network -aG sa -l new_oldxu

2.2.1 修改用户示例2

修改 new_oldxu 用户

为 new_oldxu 配置密码

锁定该用户,然后测试远程连接登陆 解锁该用户然后再次测试远程连接登陆

锁定用户

[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.2.1 删除用户示例1

删除 new_oldxu 用户

连同家目录一起删除

[root@web ~]# userdel -r new_oldxu

2.2.1 删除用户示例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 oldxu

[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

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/default/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 INACTIVE=-1

把用户的家目录建在/home中 # 是否启用账号过期停权,-1表

示不启用

EXPIRE=

账号终止日期,不设置表示不

启用

SHELL=/bin/bash SKEL=/etc/skel

新用户默认所有的shell类型 # 配置新用户家目录的默认文件

存放路径

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 两个文件中,重点关注 group

3.3.1 group文件

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

3.3.2 gshadow文件

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

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❌10000:

4.1.1 添加组示例2

添加一个 salary_2 的组

添加为系统组

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

4.2 修改组groupmod

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

选 功能描述

-f 如果组已经存在,会提示成功创建的状态

-g 为新组设置 GID,若 GID 已经存在会提示 GID
已经存在

-r 创建一个系统组

-n 改名为新的组

4.2.1 修改组示例1

修改 salary 用户组组名为 system

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

4.2.1 修改组示例2

修改 system 用户组 GID 为 5000

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

4.3 删除组groupadd

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

4.3.1 删除组示例1

删除 salary_2 系统用户组

[root@web ~]# groupdel salary_2

4.3.1 删除组示例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 密码

  1. sudo 提权,当需要使用 root 权限时进行提权,而无需切换至 root 用户

优点:安全、方便、

缺点:需要预先定义规则、较为复杂

5.1 su命令身份切换

在使用 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的由来

su 命令在用户身份切换时,需要拿到 root 管理员密码;在多人协作时,如果当中某个用户不小心泄露了 root 密码;那系统会变得非常不安全,为了改进这个问题,从而就有了 sudo ;

其实 sudo 就是给某个普通用户埋下了 浩克hulk 的种子,当需要执行一些特权操作时,进行发怒,获取最高权限,但正常情况下还是普通用户,任然会受到系统的约束以及限制;

5.2.2 sudo快速起步

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

1.将用户加入 wheel 组,默认 wheel 组有 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执行流程

sudo 命令执行流程如下

  1. 普通用户执行 sudo 命令时, 会检查

/var/db/sudo 是否存在时间戳缓存;

  1. 如果存在则不需要输入密码,否则需要输入用户

与密码;

  1. 输入密码会检测是否该用户是否拥有该权限;

  2. 如果有则执行,否则报错退出;

sudo不支持系统内置命令

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值