1、概述
由云数据库引发的一个思考,公司加强配置管理,则想通过apollo搭建一个配置中心;那么配置中心既可以方便配置,也可以方便查看配置。相关开发也有查询配置的权限,这里就会存在一个安全隐患。生产环境数据库的用户密码存在一定的风险,首先在设置生产环境项目访问数据库时,用户设置内网访问。但是测试环境开发环境与生产环境数据库都是同一个内网中,那么存在的安全隐患(开发通过配置中心看到的数据库用户密码修改生产环境数据)。
为此,解决以上安全隐患有三种方式:
- apollo侧进行用户密码加密处理(花费成本过大);
- 云数据库侧限制内网IP访问(关联IP过多,新增服务器需要重新限制,过于繁琐);
- 在测试开发环境通过iptables限制访问云数据库IP(虽然繁琐但不用反复处理)。
其实,在测试开发环境通过iptables来限制访问的话,也会存在一个问题普通用户通过sudo也是可以iptables -F清空防火墙配置表,那么应该如何解决呢,通过sudoers用户权限来控制iptables使用(如普通开发无法sudo su - 和无法使用iptables命令)。
2、sudo与su区别
- sudo命令需要输入当前用户的密码,su命令需要输入root用户的密码;
- sudo命令只允许使用提升的权限运行单个命令,su命令会启动一个新的shell,同时允许使用root权限运行尽可能多的命令;
- sudo su - 命令可以直接切换到root用户家目录,运维特别慎用
3、sudoers限制用户权限-iptables
3.1、修改sudoers配置文件(特别注意需要root权限,并且也需要强制保存)
# vim /etc/sudoers
front ALL=(ALL) NOPASSWD:ALL,!/usr/bin/su,!/usr/sbin/iptables,!/bin/chattr
解释说明:
front表示的是开发用户
NOPASSWD:ALL表示sudo命令可以免密使用
!/usr/bin/su表示禁止使用sudo su -
!/usr/sbin/iptables表示禁止使用iptables
!/bin/chattr表示禁止使用chattr
特别注意命令需要加上绝对路径
chattr加上i权限防止文件被普通用户修改
保存文件特别注意如下图:
限制配置文件/etc/sudoers和/etc/ssh/sshd_config,通过chattr命令加上i权限
[root@VM_0_5_centos ~]# chattr +i /etc/sudoers
[root@VM_0_5_centos ~]# chattr +i /etc/ssh/sshd_config
3.2、检查用户权限
su至front用户
[root@VM_0_5_centos ~]# su front
[front@VM_0_5_centos root]$
检查NOPASSWD:ALL免密问题
检查sudo su - 命令是否可用
[front@VM_0_5_centos root]$ sudo su -
检查配置文件/etc/sudoers和/etc/ssh/sshd_config是否可被修改
[front@VM_0_5_centos root]$ sudo vim /etc/sudoers
[front@VM_0_5_centos root]$ sudo vim /etc/ssh/sshd_config
检查iptables和chattr是否可用问题
[front@VM_0_5_centos root]$ sudo iptables -nL
Sorry, user front is not allowed to execute '/sbin/iptables -nL' as root on VM_0_5_centos.
[front@VM_0_5_centos root]$ sudo chattr -i /etc/sudoers
Sorry, user front is not allowed to execute '/bin/chattr -i /etc/sudoers' as root on VM_0_5_centos
4、iptables配置
以上权限完成通过root用户设置访问权限(限制访问线上数据库)
命令格式:iptables -A OUTPUT -d 线上数据库IP -j DROP 拒接访问线上数据库,因为是拒接所有协议,所以是无法ping通
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.0.17 -j DROP
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.16.5 -j DROP
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.16.9 -j DROP
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.16.16 -j DROP
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.16.3 -j DROP
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.32.15 -j DROP
[root@VM_0_5_centos ~]# iptables -A OUTPUT -d 172.16.16.10 -j DROP
本博客主要根据我工作中实际情况编写,望志同道合的运维者,多多交流;其实以上问题通过堡垒机可以得到有效解决,由于资源限制,只能通过如此方式解决。