Linux是一个多用户多任务的系统,如何管理用户呢?

  1. 能登录系统的都我们都称为用户既然有用户登录,
  2. linux不同于windows,多用户可同通时登录是linux的的一个显著优点,
  3. 所以我们就要学习和了解用linux系统中对用户的管理
  4. linux系统中,用户被分为,超级管理员用户和普通用户。
    系统上每一个程序,都需要特定的用户运行
    并且在生产环境中,由于Root超级管理员用户权限太大,也是需要创建普通用户管理服务器的
   多个普通用户可以组成一组,单个用户也可以隶属于多个组
    我们通过Id,grep命令过滤 /etc/passwd 命令查看系统中的用信息
      了解项:who、whoami、w检查用户登陆情
    创建的用户默认都是创建在 /etc/passwd 

    密码创建默认保存在  /etc/cshadow

10 . linux------用户管理 - 图1
10 . linux------用户管理 - 图2
10 . linux------用户管理 - 图3
经过简单的了解,我们进入正题:
如何创建用户、删除用户、修改用户
useradd usermod userdel

1.使用useradd命令新增用户

注意: adduser命令软链接指向useradd命令

选项
-u 指定要创建用户的UID,不允许冲突
-g 指定要创建用户默认组 ( 老婆 ) <—如果没有指定 国家派送一个与你同名的组
-G 指定要创建用户附加组, 逗号隔开可添加多个附加组 ( 妾 N多个)
-c 指定要创建用户注释信息
-s 指定要创建用户的bash shell /bin/bash /sbin/nologin
-e 指定过期时间 usradd canglaoshi -e "2020/9/20"

-d 指定要创建用户家目录 (默认都在/home下)
-M 给创建的用户不创建家目录
-r 创建系统账户,默认无家目录 uid 201~999范围的

1.创建bgx用户,UID5001,基本组students,附加组sa 注释信息:2019 new student,登陆shell:/bin/bash

  1. 创建组
    [root@oldboy ~]# groupadd students
    [root@oldboy ~]# groupadd sa
  2. 创建用户(指定属性)
    [root@oldboy ~]# useradd bgx -u 5001 -g students -G sa -c “2020 new student” -s /bin/bash

检查bgx用户
[root@oldboy ~]# id bgx
uid=5001(bgx) gid=1110(students) groups=1110(students),1111(sa)

过滤配置文件,检查用户详情(在这里面不显示附加组信息,只显示基本组)
[root@oldboy ~]# grep “bgx” /etc/passwd
bgx: x:5001:1110:2020 new student:/home/bgx:/bin/bash
-#2.创建mysql系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统

1.-r创建一个系统用户,系统用户默认就没有家目录,-s 在指定不运行登陆系统
[root@oldboy ~]# useradd mysql -r -s /sbin/nologin

2.-M不给用户创建家目录,并指定登陆的bash是/sbin/nologin
[root@oldboy ~]# useradd mysql2 -M -s /sbin/nologin

2.使用usermod命令修改用户信息

== 选项==
-u 指定要修改用户的UID
-g 指定要修改用户基本组
-G 指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组

-G > 会覆盖掉原来的组 -aG >> 会追加附加组

-d 指定要修改用户家目录
-s 指定要修改用户的bash shell /sbin/nologin 非登陆式shell /bin/bash可以登录
-c 指定要修改用户注释信息# -l 指定要修改用户的登陆名
-L 指定要锁定的用户
-U 指定要解锁的用户

.修改bgx用户uid6001、group:devops, groups:network,sa

[root@oldboy ~]# groupadd devops
[root@oldboy ~]# groupadd network
[root@oldboy ~]# usermod bgx -u6001 -g devops -G network,sa
                        -G   >    network,sa
                        -aG >>    network

检查的操作

[root@oldboy ~]# grep "bgx" /etc/passwd
bgx:x:6001:5003:2020 new student:/home/bgx:/bin/bash
[root@oldboy ~]# id bgx
uid=6001(bgx) gid=5003(devops) groups=5003(devops),1111(sa),5004(network)

.修改bgx用户的注释信息 用户家目录 /opt/bgx 登录shell /bin/sh 登录名 bgx_new

4.锁定用户[扩展]
[root@bgx ~]# echo “123” |passwd —stdin username
[root@bgx ~]# usermod -L username #锁定后会无法登陆系统

5.解锁用户[扩展]
[root@bgx ~]# usermod -U username

3.使用userdel命令删除账户

选项
-r 删除用户的家目录,以及用户的邮件

    测试环境:随便删
   生产环境:尽量不要使用-r操作,
                    因为对方的家目录下可能有一些比较重要的配置、或者其他...

1.删除user1用户,但不删除用户家目录和 mail spool
[root@bgx ~]# userdel user1

2.-r参数可以连同用户家目录一起删除(慎用)
[root@bgx ~]# userdel -r user1

4.mkpasswd生成随机字符串
选项:
-l 设定密码长度,
-d 数子,
-c 小写字母,
-C 大写字母,
-s 特殊字符
#通过passwd —stdin读取输出的结果,将结果赋值给对应的用户
#echo “123” | passwd —stdin xuliangwei #非交互式修改密码

4. 如何设定密码

创建用户后,如需要使用该用户登陆系统则需要为用户设定密码,
设定密码使用passwd命令。建议密码复杂度高一些、长度大于10、出现各种特殊字符、无任何规律. (不要出现名字,电话,生日等)

4.1 使用passwd命令修改用户密码

passwd #给当前用户修改密码

passwd root #给root用户修改密码(只能是root才有此权限,其他任何用户都没有该权限) passwd oldboy #给oldboy用户修改密码(root可以,或者oldboy用户自己给自己修改密码)

通过passwd —stdin读取输出的结果,将结果赋值给对应的用户

echo “123” | passwd —stdin xuliangwei #非交互式修改密码

批量更新用户的密码命令chpasswd

对于已有的用户。vim也可以,要求,用户:密码 格式 cat >>user.list<<EOF oldboy:222222 oldgirl:666666 test:333333 EOF

下面方法二选一 chpasswd <user.list cat user.list | chpasswd

测试密码:

1.先登录别的用户,在su - 要测试的用户 输入要测试的用户密码 2.新建窗口登录测试。

PS: 注意事项 1.普通用户只允许变更自己的密码,无法修改其他人密码,并且密码长度必须8位字符 2.管理员用户允许修改任何人的密码,无论密码长度多长或多短。 生成密码 [root@oldboy ~]# yum install expect -y [root@oldboy ~]# mkpasswd -l 10 -d 2 -c 3 -C 3 -s 2

<uhKf-L73X

PS: 推荐密码保存套件工具,支持windows、MacOS、Iphone以及浏览器插件Lastpass官方网站
还有一个开源免费,有中文的密码管理工具: bitwarden


学习用户权限管理,之前先了解组的概念:
组就是一个逻辑概念。逻辑上将多个用户捆绑成一个组,当我们操作组的时候就相当于在操作组下的所有用户。

 组的信息存放在那里?
/etc/group
/etc/gshadow

一.组的使用,组的创建、删除、修改 groupadd groupdel groupmod

组的分类:
基本组:创建时指定组,就叫基本组 (只能有1个)
私有组:创建时没有指定组,默认创建与用户同名的组 (只有有1个)
附加组:对于用户来说,可以有N多个。 (可以多个)

     注意:
     1.首先得有组。
     2.再进行加入。

**

1.使用groupadd命令新增组,

**
     groupadd [-g GID] groupname


#创建基本组, 不指定gid
[root@bgx ~]# groupadd no_gid
#创建基本组, 指定gid为5555
[root@bgx ~]# groupadd -    g 5555 yes_gid
#创建系统组,gid从201-999
[root@bgx ~]# groupadd -r sys_gid

2.使用groupmod命令修改组

 # -g 修改组gid
[root@bgx ~]# groupmod -g 1111 no_gid
#-n 修改组名称
[root@oldboy ~]# groupmod yes_gid -n active_gid
----------------------------------------------------------------

3.groupdel删除组。

**
如果要删除基本组,需要先删除基本组中的用户才可以删除该组。

[root@oldboy ~]#  useradd ttboy -g active_gid
[root@oldboy ~]# useradd ggboy -G active_gid

[root@oldboy ~]# grep "active_gid" /etc/group
active_gid:x:12345:ggboy
[root@oldboy ~]# groupdel active_gid
groupdel:不能移除用户“ttboy”的主组

#移除主要的成员,就能删除该组
[root@oldboy ~]# userdel ttboy
[root@oldboy ~]# groupdel active_gid

[root@oldboy ~]# id ggboy
uid=6009(ggboy) gid=12346(ggboy) 组=12346(ggboy)
    就像拆迁一样,必须将主要人员都清理完毕,否则就不能拆房子 (强拆-->国家不允许)
    主要用户                   组         强拆-->系统不允许

       注意:删除一个组,必须确保该组的主要成员已经移除该组,就可以正常删除。
      (附加进来的成员无需考虑在内。)

二.切换用户身份、提权?都是什么东西? su sudo

  su - username属于登陆式shell,
  su username属于非登陆式shell, 区别在于加载的环境变量不一样。
(su -username 登录时加载的环境)
  /etc/profile.d/1.sh                                      
  /etc/profile
  /etc/bashrc
  /root/.bashrc
  /root/.bash_profile
 (su   username 登录时加载部分环境变量)
  [root@oldboy ~]# bash
  /etc/profile.d/1.sh
  /etc/bashrc
   /root/.bashrc
#1.普通用户使用su切换root
[xuliangwei@node1 ~]$ su
密码:         #输入root的密码
[root@node1 xuliangwei]# pwd
/home/xuliangwei
#2.普通用户使用su -切换到root,
会加载root的环境变量
[xuliangwei@node1 ~]$ su -
密码:
[root@node1 ~]# pwd
/root
#3.以某个用户的身份执行某个服务,使用命令su -c username
[root@bgx ~]# su - xuliangwei -c 'ifconfig'
[root@bgx ~]# su - xuliangwei -c ' ls ~ '
  面如果想要进行高与自己权限的操作是就需要切换高权限用户的账号,非常不安全
  那么,我们在生产环境中,如何利用普通用户的身份,获取权限呢? —————>>> sudo  (你必修在有权限的组里)

     1.快速配置sudo方式   [先体验一下]
      [root@node1 ~]# usermod bgx -G wheel
      [root@node1 ~]$ sudo tail -f /var/log/secure    #sudo审计日志
      —————>>> 思考:将用户提权后能干什么呢?

1.切换普通用户
[root@bgx ~]# su - xuliangwei
#2.检查普通用户能提权的命令
[xuliangwei@xuliangwei ~]$ sudo -l
User xuliangwei may run the following commands on this host:
(ALL) ALL
#3.普通用户正常情况下是无法删除opt目录的
[xuliangwei@xuliangwei ~]$ rm -rf /opt/
rm: cannot remove `/opt: Permission denied
使用sudo提权,需要输入当前普通用户的密码确认操作。
[xuliangwei@xuliangwei ~]$ sudo rm -rf /opt
通过体验,我们先在开始给组陪住sudu

sudo配置方式一:

oldxu oldqiang = 运维
oldli oldguo = dba

1.需要真实创建这四个用户
[root@oldboy opt]# useradd oldxu
[root@oldboy opt]# useradd oldqiang
[root@oldboy opt]# useradd oldli
[root@oldboy opt]# useradd oldguo

2,全程进入sudo 编辑配置
[root@bgx ~]# visudo

1.使用sudo定义分组

这个系统与group没什么关系(这是sudo的组,虚拟的组。写在sudo空白处就行)
User_Alias OPS = oldxu,oldqiang 定义虚拟组成员
User_Alias DBA = 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

3.使用sudo开始分配权限

OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,STORAGE,DELEGATING,PROCESSES
DBA ALL=(ALL) SOFTWARE,PROCESSES

4.登陆对应的用户使用 sudo -l 验证权限


sudo配置方式二:针对系统中真实的组来进行操作

oldxu oldqiang = 运维
oldli oldguo = dba

1.添加两个真实的系统组, OPS DBA

[root@www ~]# groupadd OPS
[root@www ~]# groupadd DBA

2.添加两个用户, OPS(oldxu oldqiang) DBA(oldli oldguo)

[root@oldboy ~]# usermod  oldxu -G OPS
[root@oldboy ~]# usermod  oldqiang -G OPS
[root@oldboy ~]# usermod  oldguo -G DBA
[root@oldboy ~]# usermod  oldli -G DBA

3.记得添加密码

[root@oldboy ~]# echo "1" | passwd --stdin oldxu
[root@oldboy ~]# echo "1" | passwd --stdin oldguo
[root@oldboy ~]# echo "1" | passwd --stdin oldli
[root@oldboy ~]# echo "1" | passwd --stdin oldqiang

4.在sudo中配置规则
[root@www ~]# visudo

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

%OPS ALL=(ALL) SOFTWARE
%DBA ALL=(ALL) SOFTWARE,PROCESSES

5.检查sudo是否配置有错

[root@www ~]# visudo -c
/etc/sudoers: parsed OK

6.检查oldxu,和oldguo的sudo权限

[oldguo@oldboy ~]$ sudo -l
[sudo] password for oldguo:

User oldguo may run the following commands on oldboy:
(ALL) /bin/rpm, /usr/bin/yum, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

[oldxu@oldboy ~]$ sudo -l
[sudo] password for oldxu:

User oldxu may run the following commands on oldboy:
(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

  只要我们能使用sudo操作 VIm/ rm /su -  命令就能绕过root。
    所以sudo,并不能完全的解决所有的权限问题,仅仅是相对的。  
 (需要有一个操作审计平台,来监督每个人的操作。  jumpserver )

sudo配置方式三:

针对指定用户提权

visudo 编辑配置sudo功能的工具
[root@oldboy ~]# visudo 回车

## Allow root to run any commands anywhere
root    ALL=(ALL)          ALL 
用户    主机=切换的角色    拥有的权限

#如下修改
oldboy                      ALL=(ALL)      /usr/sbin/useradd, /usr/sbin/userdel
让oldboy用户,    在所有主机,所有角色上,拥有useradd,userdel权限。

[root@oldboy ~]# visudo -c #检查
/etc/sudoers: parsed OK
用户 主机=切换的角色 拥有的权限

图解:
image.png

优化:

  1. 可以将 /etc/passwd 使用#注释掉,减少系统用户。
  2. whoami 查看自己用户名称
  3. 禁用root用户登录,使用普通用户登录,有需要时su - 切换root (给手枪加保险)

su - 切换用户,提权得知道root密码,不安全,少数人。
sudo 提权给一个命令拥有root权限。大多数使用

  1. 只要我们能使用sudo操作 VIm/ rm /su - 命令就能绕过root。所以sudo,并不能完全的解决所有的权限问题,仅仅是相对的。 (需要有一个操作审计平台,来监督每个人的操作。 jumpserver )

PS:

image.png