企业级Linux用户管理实践

1,658 阅读4分钟

大家好,我是果果。我目前所在公司人数不多,在运维上没有严格区分Linux用户权限,每个人都是root。我知道这样不好,一是权限越大,沦陷后,危害就越大;二是权限发放过多,误操作后损失惨重。近期公司买了一台阿里云开发服务器,索性就在这个新的服务器上探索该如何做好企业级Linux用户管理吧。

类似文章传送门:Linux运维--企业sudo权限规划详解 (实测一个堆命令搞定)

实验内容:给项目组成员,每个人分配一个账号(zs、ls、ww),其中zs和ls能够使用docker,ww能够使用mysql、java。

在开始探索之前,先回顾以下Linux的基础知识:

  1. Linux安全模型
  2. 用户
  3. 权限

Linux安全模型

Linux是一个多用户、多任务的操作系统。多用户,同一时间可以有多个用户登录并操作。如果只有一个账号,其他用户也想用,那就要么等着,要么后来者把前者账户下来。多任务,直观的感受就是可以打开多个程序运行。比如redis、mysql可以都在运行。

Linux的安全模型主要有2个:BLP模型和RBAC模型。Centos7采用RBAC模型。

一个用户(User)有多个用户组(Group,也就是RBAC中的角色),一个用户组有多个权限(文件、进程)。

用户

  1. 使用root查看当前系统的所有用户
[root@iZm5ede6zdaho9rdxvqztdZ ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

其字段的含义为用户名(root):密码(x):用户ID(0):用户组ID(0):用户信息(root):家目录(/root):Shell类型:(/bin/bash) 其中用户ID参数0是为root保留的,1-499是系统用户保留。500-65535给一般用户使用。 2. 增加用户zs,并设置密码和用户空间

[root@iZm5ede6zdaho9rdxvqztdZ ~]# useradd zs
[root@iZm5ede6zdaho9rdxvqztdZ ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
# 这里就是新增的用户
zs:x:1000:1000::/home/zs:/bin/bash

useradd和adduser有什么区别?没什么区别。 默认情况下useradd命令会同时在/home文件夹下创建zs的家目录,也会创建一个zs的group。

还可以使用useradd的高级用法来指定添加用户的用户组、家目录等。菜鸟教程传送门

  1. 为zs用户设置密码为12345678
[root@iZm5ede6zdaho9rdxvqztdZ ~]# passwd zs
Changing password for user zs.
New password:
# 越来越智能了,设置简单密码会出现这个提示
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
  1. 使用zs/12345678登录操作系统
[root@iZm5ede6zdaho9rdxvqztdZ ~]# ssh zs@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:DdEw4tEaoDusCMNk2OYMPG6vWInJZPUJBazG3sSW/b4.
ECDSA key fingerprint is MD5:19:b2:cb:28:d1:22:d4:2f:da:23:9a:0b:a1:38:3d:2f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
zs@localhost's password:
Last login: Wed May 27 12:15:19 2020 from 124.207.188.68

Welcome to Alibaba Cloud Elastic Compute Service !
# 退出
[zs@iZm5ede6zdaho9rdxvqztdZ ~]$ logout

用户组

  1. root查看所有的用户组
[root@iZm5ede6zdaho9rdxvqztdZ ~]# cat /etc/group
......
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
zs:x:1000:
......

字段为:用户组:用户组口令:用户组id:[用户组包含的用户]

  1. root创建分组wheel
[root@iZm5ede6zdaho9rdxvqztdZ ~]# groupadd wheel
groupadd: group 'wheel' already exists
  1. 增加用户zs到wheel用户组
[root@iZm5ede6zdaho9rdxvqztdZ ~]# usermod -g wheel zs
#删除不必要的用户组
[root@iZm5ede6zdaho9rdxvqztdZ ~]# groupdel zs
  1. 查看zs用户所在的用户组
[root@iZm5ede6zdaho9rdxvqztdZ ~]# groups zs
zs : wheel

这里为什么要创建wheel用户组呢?因为wheel用户组具有sudo的权限。下文“给普通用户提升root的权力”章节给出了答案。

软件安装

  1. 给普通用户提升root的权力
[root@iZm5ede6zdaho9rdxvqztdZ ~]# vim /etc/sudoers
.....
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

# Allows people in group wheel to run all commands
# 只要在wheel组下的用户就可以使用sudo命令。
%wheel  ALL=(ALL)       ALL
.....

为什么我们给用户sodo的权力要比直接加入root用户组好呢? 因为给了sudo权限,root还可以收回,或者修改权限范围。 Linux环境下为普通用户添加sudo权限

因此接下来要做2个事情:1.查看当前有哪些用户组2.将用户sz添加到wheel用户组下

  1. zs安装docker
[zs@iZm5ede6zdaho9rdxvqztdZ ~]$ yum install docker
Loaded plugins: fastestmirror
# 提示只有root才有权限执行这个命令
You need to be root to perform this command.

默认情况下普通用户是没有yum的权限。那zs有时又需要安装文件,怎么办呢?sudo

[zs@iZm5ede6zdaho9rdxvqztdZ ~]$ sudo yum install -y docker-ce-18.09.0-3.el7 docker-ce-cli-18.09.0-3.el7

安装一个软件,默认系统会创建一个该软件的用户组,在这里为docker

[zs@iZm5ede6zdaho9rdxvqztdZ /]$ sudo cat /etc/group
root:x:0:
bin:x:1:
wheel:x:10:
cdrom:x:11:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
ntp:x:38:
tcpdump:x:72:
nscd:x:28:
cgred:x:995:
# 这是在安装这个软件时候,软件自动创建的
docker:x:994:

zs用户是假借sudo之手安装的docker;zs还是没有docker的使用权。如果想让zs可以不加sudo,直接使用docker,还需要把zs加到docker组中。

  1. 让zs加入docker组
[zs@iZm5ede6zdaho9rdxvqztdZ /]$ sudo usermod -G wheel,docker zs

此时如果zs想要使用docker命令还是不行。因为目前zs还处在wheel组,需要切换到docker组才可以使用docker命令

[zs@iZm5ede6zdaho9rdxvqztdZ /]$ sudo usermod -G wheel,docker zs
[sudo] password for zs:
[zs@iZm5ede6zdaho9rdxvqztdZ /]$ docker ps -a
Got permission denied while trying to connect to the Docker daemon socket at uni
[zs@iZm5ede6zdaho9rdxvqztdZ /]$ groups
wheel
[zs@iZm5ede6zdaho9rdxvqztdZ /]$ newgrp docker # 切换用户组
[zs@iZm5ede6zdaho9rdxvqztdZ /]$ docker ps -a #可以正常使用dokcer命令了
CONTAINER ID        IMAGE               COMMAND             CREATED
  1. 大功告成

至此,root如何控制普通用户;普通用户如何安装软件已经全部搞定。