Linux用户管理 day5

1、用户基本概述

1.1什么是用户

用户是指可以正常登录到Linux或windows系统的,或者游戏,qq,微信等都叫做用户

1.2为什么需要用户

系统的每一个进程运行的程序都需要一个特定的用户运行;
通常在公司我们使用普通的用户管理服务器,因为root用户权限过大,容易造成故障;

用户有哪些分类

系统对用户有一个约定,一般我们遵守这个(也可以不遵守)

用户UID系统中约定的含义
0超级管理员,最高权限
1-200系统用户,用来运行系统自带的进程,默认已创建
201-999系统用户,用来运行用户安装的程序,所以此类用户无序登录系统
1000+普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限

1.3 id 查询用户IDxxi

使用id命令查询当前登录的用户信息

1.4 用户相关的配置文件

当我们创建一个新的用户,系统会将这个用户的信息存放到 /etc/passwd 中,而密码单独存放在/etc/shadow,这两个文件非常重要,不要轻易的删除更改。

1.4.1 passwd文件

/etc/passwd配置文件解释如下图,使用命令man 5 shadow获取帮助
在这里插入图片描述

1.4.2 shadow文件

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

在这里插入图片描述

2.用户相关命令

2.1 添加用户命令useradd

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

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

2.1.1.1 添加用户示例1

。创建shunge用户
。基本组为klc,附加组bbc
。注释信息为 10000 yqyqy,登录shell:/bin/bash``

[root@localhost ~]# groupadd klc
[root@localhost ~]# groupadd bbc
[root@localhost ~]# useradd -g klc -G bbc -c "10000 yqyqy" -s /bin/bash shunge
[root@localhost ~]# id shunge
uid=6971(shunge) gid=6974(klc)=6974(klc),6975(bbc)

2.1.2 添加用户示例2

。创建一个mmm系统用户[201-999]
。该用户不需要家目录
。该用户不需要登录用户

[root@localhost ~]# useradd -r mmm -M -s /sbin/nologin 
[root@localhost ~]# passwd mmm
更改用户 mmm 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# id mmm
uid=997(mmm) gid=995(mmm)=995(mmm)

/bin/bash 可以登录系统
/sbin/nologin 不可以登录系统
然后我们在使用mmm用户登录一下xshell,显示无法登录
在这里插入图片描述

2.2 修改用户usermod

我们也可以登录root用户,使用usermod命令修改Linux系统普通用户

选项功能描述
-u指定修改用户的UID
-g指定要修改用户基本组
-G指定要修改用户附加组,使用逗号隔开多个附加组,覆盖原有的附加组
-a必须与-G一起使用追加到某些组中
-d指定要修改用户家目录
-s指定要修改用户注释信息
-l指定要修改用户的登录名
-L指定要锁定的用户
-U指定要解锁的用户

2.2.1 修改用户示例1

。修改shunge用户
。uid为5008
。基本组为network,附加组为 sa,sb,sc
。注释信息为new,登录名称为new_shunge

[root@localhost ~]# usermod  shunge -u 5008 -g network -aG sa,sb,sc -c "new" -l new_shunge
[root@localhost ~]# id new_shunge
uid=5008(new_shunge) gid=6971(network)=6971(network),6972(sa),6975(bbc),6976(sb),6977(sc)

2.2.2 修改用户示例2

。修改用户new_shunge用户
。为new_shunge配置密码
。解锁该用户然后再次远程登录

# 设置密码,锁定用户
[root@localhost ~]# echo "123" |passwd --stdin new_shunge
更改用户 new_shunge 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# usermod -L new_shunge

# 解锁用户
[root@localhost ~]# usermod -U new_shunge

2.3 删除用户userdel

如果想要删除用户我们也可以登录root用户来删除系统普通用户

2.2.1 删除用户示例

。删除new_shunge
。连同家目录一起删除(-r)

[root@localhost ~]# userdel -r new_shunge

2.2.1 删除用户示例2

。批量系统中此前创建过的使用无用用户
。使用awk提取无用的用户名称
。使用sed拼接删除用户的命令
。调用userdel命令,连同家目录一起删除

#先批量创建一些用户
[root@localhost ~]# cat chuangjian.sh 
#!/bin/bash
for i in {1..100}
do
	useradd shunge-$i
	echo "shunge-$i is create ok"
done

[root@localhost ~]# awk -F ':' '$3>1000{print $1}' /etc/passwd |sed -r 's#(.*)#userdel -r \1#g' |bash
#先使用awk去除第三列uid大于1000的普通用户,将其名字打印出来,然后使用sed 在其前加上删除命令,再交由bash执行

2.4 设定密码passwd

创建用户后,如需登录用户进行远程登录系统则需要为用户设定密码,设定密码使用passwd
。普通用户只能更改自己的密码,无法修改其他人的密码,并且密码长度必须8位字符
。管理员(root)用户允许修改任何人密码,无论密码多长多短

2.4.2 交互式设定密码

。通过交互式为用户设置密码

[root@localhost ~]# passwd           #为当前用户修改密码

[root@localhost ~]# passwd root           #为root用户修改密码
[root@localhost ~]# passwd shunge           #为shunge用户修改密码,普通用户只能给自己修改密码

2.4.2 非交互设定密码

通过非交互设定简单密码

[root@localhost ~]# echo ""123" |passwd --stdin shunge

非交互式设定随机密码

root@localhost ~]#  echo $(mkpasswd -l 10 -d -2 -c 2 -c 2 -s 4) |tee pass.txt |passwd --stdin new_shunge

#!/bin/bash
for i in s1 s2 s3
do
        pass=$(mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4)
        useradd $i
        echo "$pass" | passwd --stdin $i &> /dev/nell
        echo "user: $i pass: $pass" 
        echo "user: $i pass: $pass" >> user_pass.txt
done
[root@localhost ~]# sh /useradd_new.sh 
user: s1 pass: .kXN#9q'4"
user: s2 pass: LP:a47d!}#
user: s3 pass: =9f-"eW:5Y
#显示随机生成的密码已经用户名

2.5 系统创建用户流程

。系统在创建用户时,会参考如下两个配置文件:
/etc/login.defs
/etc/default/useradd
如果在创建用户时指定了参数会覆盖系统默认的配置,如果没有指定参数则遵循默认配置建立用户;

2.5.1 /etc/login.defs

/etc/login.defs主要定义创建用户UID划分规则,密码加密类型,是否创建家目录等;

[root@localhost ~]# 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@localhost ~]# 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.3 用户环境变量丢失案例

当我们不小心在当前用户家目录下执行rm -rf ,* 后再次登录系统会发现命令提示符变成了 -bash-4.1$ 那是因为我们删除了当前用户的环境变量造成的现象,通过以下凡是即可恢复

-bash-4.2$ cp -a /etc/skel/.bash* ./
-bash-4.2$ exit

默认linux创建用户,会从 /etc/skel 目录中拷贝对应的环境变量,由 /etc/defaults/useradd 配置文件定义,所以只需要从该目录下拷贝相应的环境变量即可恢复故障

3.用户组基本概述

3.1 什么是用户组

。组是一种逻辑层面的定义
。逻辑上就是将多个用户归纳为一个组,当我们对组操作,其实相当于对组内的所以用户操作

3.2 组的类别

组的类别含义
默认组创建组时用户不指定组则默认在 /home/ 下创建一个同名的组
基本组用户有且只能有一个基本组,创建时通过-g指定
附加组用户可以有多个附加组,创建时通过-G指定

3.3 组相关配置文件

组账号信息保存在 /etc/group//etc/gshadow 两个文件中,主要关注 group

[root@localhost ~]# head -5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
[root@localhost ~]# head -5 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::

3.3.1 group文件

/etc/group 配置文件解释如下图
在这里插入图片描述

3.3.2 gshadow文件

/etc/gshadow 配置文件解释如下图
在这里插入图片描述

4.用户组相关命令

4.1 添加组groupadd

选项功能描述
-f如果组已经存在会提示创建成功
-g为新组设置GID,若GID已经存在会提示GID已经存在
-r创建一个系统组

4.1 添加组示例1

。添加一个salary的组
。为组设定gid为10000

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

4.1.1 添加组示例2

。添加一个salary_2的组
。添加为系统组

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


4.2 修改组groupmod

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

4.2.1 修改组示例1

修改salary用户组组名为system

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

4.2.1修改组示例2

修改system用户组的GID为500

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

4.3 删除组groupdel

使用 groupdel 删除组,如果组中存在用户则无法删除组,必须先删除用户后再删除组

5.普通用户无权限如何提权(su sudo)

su 切换普通用户到root
优点:简单
缺点:需要知道root密码
sudo使用root权限进行提权,无需切换至root用户
优点:安全方便
缺点:需要预先定义规则,较为复杂

5.1 su命令身份切换

在使用su命令切换身份前,我们需要shell登录分类、环境变量配置文件加载顺序

5.1.1 su登录分类

登录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

su - username属于登陆式shell
su username 属于非登录式shell
他们最大的差距就是加载的环境变量不同
以某个用户的身份执行某个服务使用su -c username

5.2 sudo命令提权

wheel组默认有sudo权限
后期可以通过审查日志查看普通用户提取都执行了什么操作

5.2.1 sudo权限分配示例

我们可以使用sudo自定义的变量分组,这个跟系统的group没关系

vim /etc/sudoers
User_Alias OPS = aa,ab,ac

将相同的逻辑分类划分一个命令集(命令必须写绝对路径)

Cmnd_Alias APS = /bin/ls,/sbin/ifconfig,/bin/ping

进行权力划分:为OPS组分配我们刚刚创建的命令集ASP(多个命令集使用逗号分隔)

root    ALL=(ALL)       ALL
oldwoman localhost=(ALL) ALL
OPS     ALL=(ALL)       APS

然后登录组里的用户使用sudo -l来检查相应的sudo权限

[aa@localhost ~]$ sudo -l
[sudo] aa 的密码:
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
    HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
    LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 aa 可以在 localhost 上运行以下命令:
    (ALL) /bin/ls, /sbin/ifconfig, /bin/ping, /bin/sudo

5.2.2 sudo执行流程

sudo命令执行流程如下
。1、普通用户执行sudo命令时,会检查/var/db/sudo是否存在时间戳
。2、如果存在则不需要输入密码,否则输入用户与密码
。3输入密码会检查该用户是否具有该权限
。4、如果有则执行,否则报错退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值