背景
小公司创业团队,往往只关注项目进度,而忽略项目质量和安全等方面。我所在的公司刚刚从windows服务器迁移到liunx服务器,仅仅做到了代码能运行,安全性方面的工作几乎为零。
现状
现在有一台测试服务器,三台生产服务器。这些服务器均使用root登录,且密码都是一致的。mysql无论测试库还是生产库都是可以通过账号密码随意连接。
简易方案
为了帮团队提升服务器安全,我给出了最简单易行的方案:
(1)回收root登录权限,为每个开发同学创建属于自己的账号密码;
(2)ssh登录服务器时,必须通过Google Authenticator两步验证,通过方可登录;
(3)mysql仅允许本地连接;
(4)先修改root密码,再配合证书方可登录。未来可直接去掉root密码。
好处
- 开发同学没必要有root权限,从而避免他因为误操作而破坏服务器运行环境;
- 如果有人员增减,也会减少人员流动时带来的密码风险,降低修改密码的频率;
- 可以有效杜绝网络黑客的攻击。
具体实操
1. 创建账号
- 以root身份登录服务器;
- 用adduser或useradd创建用户;
[root@centos]# adduser Batman
- 用passwd设置登录密码;
[root@centos]# passwd Batman
推荐一个好工具,用来创建强密码:https://1password.com/zh-cn/password-generator/
- 如果需要sudo权限,可以将用户纳入wheel组;
[root@centos]# usermod -aG wheel Batman
2. 管理账号
- 修改密码
[root@centos]# passwd Batman
- 修改用户名
[root@centos]# usermod -l <newName> [-m -d <newHomeDir>] oldName
- 删除用户
[root@centos]# userdel Batman
3. 安装google authenticator两步验证
- 先检查yum源是否有安装包,有就直接安装吧;
[root@centos]# yum list | grep google-authenticator
[root@centos]# yum install google-authenticator
- 如果没有安装包,则需要先下载依赖,再下载源码,编译安装;
[root@centos]# yum install libpng-devel libtool lrzsz pam-devel
[root@centos]# git clone https://github.com/google/google-authenticator-libpam.git
[root@centos]# cd google-authenticator-libpam
[root@centos]# ./bootstrap.sh
[root@centos]# ./configure
[root@centos]# make && make install
[root@centos]# cp /usr/local/lib/security/pam_google_authenticator.so /lib64/security/
- 开启两步验证登录方式;
- /etc/pam.d/sshd
[root@centos]# vim /etc/pam.d/sshd
# 在最后一行加上
auth required pam_google_authenticator.so nullok
注:nullok是允许不使用两步验证也可以登录,在测试时建议加上,以后可以去掉。
- /etc/ssh/sshd_config
[root@centos]# vim /etc/ssh/sshd_config
ChallengeResponseAuthentication yes \启用其它认证
UsePAM yes \启用UsePAM模块
PasswordAuthentication yes
- 重启sshd
[root@centos]# service sshd restart
- 为需要使用两步验证的账号开启服务;
- 切换到Batman账号
[root@centos]# su Batman
- 开启两步验证
[Batman@centos]# google-authenticator
- 注意保存出现的二维码及紧急密码(用一个少一个),一路yes即可。
- 手机安装google-authenticator或authy,扫描保存的二维码即可。
4. 设置用户组
测试服务器,其实是允许开发同学可以登录上去进行类似git pull之类的操作的。
如果之前没有这方面的管理,代码是root用户clone下来的话,新建的用户执行git pull会报权限错误。此时需要进行用户组的管理。
- 新建用户组
[root@centos]# groupadd superhero
- 将相关人员放入组中
[root@centos]# usermod -g superhero Batman
[root@centos]# usermod -G wheel Batman
注:小写的g是修改主用户组,大写的G是增加从用户组。
- 修改对应目录的组
drwxr-xr-x root root justice_league
[root@centos]# chgrp -R superhero justice_league
drwxr-xr-x root superhero justice_league
- 给目录开组的写权限
[root@centos]# chmod g+w justice_league
drwxrwxr-x root superhero justice_league
- 其他权限问题
- 因新增文件,导致git报权限问题
需要把项目根目录下的 .git 目录及目录下所有文件赋予对应组写权限;
- 明明上级目录是775,但是新建目录确是755,导致同组人无写权限
可以使用umask命令,修改默认权限。默认权限=777 - umask
umask
0022
umask -S 0002
u=rwx,g=rwx,o=rx