- A+
互联网企业,往往都拥有大量服务器,安全高效的管理这些服务器是每个运维必要工作。生产环境服务器,研发(rd)、运维(op)同学必须通过跳板机进行登陆访问。比如商业产品齐治堡垒机,开源产品jumpserver,基于Python开发。这里分享基于Shell的门神系统(rdgod)。
目标
1、门神系统登陆要通过谷歌双因素验证机制(Google Authenticator);
2、门神系统到应用服务器要实现免密码登陆,应用服务器密码所有用户都不可见;
3、研发人员通过rd用户登陆门神系统,运维人员通过work用户登陆门神系统,不同用户拥有服务器不同的操作权限;
4、所有服务器权限最小化,收回root权限,运维人员通过work用户可以提权root;
5、应用服务器所有应用都工作在work用户下;
6、结合rsyslog实现日志审计功能。
功能
1、支持ssh免认证,远程管理主机、主机组;
2、支持ssh免认证,批量执行命令;
3、支持scp免认证,批量文件分发;
4、支持md5文件完整性校验,防止文件分发传输过程中,数据不一致。
Google身份认证
博客之前文章,有详细介绍:
https://www.liuyalei.top/2017/11/03/google-authenticator/
部署文档
环境说明
192.168.1.3 门神系统(Door-god)
192.168.3.150 应用服务器Client(app)
创建用户
门神系统(Door-god)、Client分别创建rd和work用户
useradd rd passwd rd useradd work passwd work
ssh免认证登陆
在门神系统(Door-god)操作
su – rd
生成密钥对,默认一路回车即可
ssh-keygen -t dsa
查看密钥,注意密钥对的权限
[root@Door-god bin]$ cd /home/rd/.ssh/ [root@Door-god bin]$ ll /home/rd/.ssh/id_dsa -rw------- 1 rd rd 668 10月 20 15:43 id_dsa 注意私钥的权限 -rw-r--r-- 1 rd rd 606 10月 20 15:43 id_dsa.pub 注意公钥的权限
将公钥颁发给Client端
[root@Door-god .ssh]$ ssh-copy-id -i id_dsa.pub "-p 22 rd@192.168.3.150" rd@192.168.3.150's password: Now try logging into the machine, with "ssh '-p 22 rd@192.168.3.150'", and check in: .ssh/authorized_keys 这个是分发过去的文件名 to make sure we haven't added extra keys that you weren't expecting.
免认证测试:
ssh -p22 rd@192.168.3.150 who
同理切换到work用户,重复上述操作。
1) 这个免密码登陆认证是单向的(如果要双向,把钥匙在分发过去,但是一般不做双向,不安全)。
2) 基于用户的,最好不要跨用户。
3) 批量分发1000台初始都需要输入一次秘密,并且第一次连接要有个确认。(expect)
Client端查看公钥
[root@rd ~]$ cat /rd/.ssh/authorized_keys ssh-dss AAAAB3NzaC1kc3MAAACBANhaOJKpPyvA/gaBo2lKsneI3H8iMRSPOse8iLJKcXCaH0va8aBUb1Z0Te4AZlTC+Kks5FyDbtILA6fakpK96HeWqtZYAP9k4e0OVRgVrzy5SKei6iV4sR3Wj+/qmrFME1ZBR8j5AfT7VTmKAUjq5mcVFxhZqeMWt/1LcLgPRvAHAAAAFQDCqHlwGddpBm3r4lM5r5VYNgxHlwAAAIEAqwztcC8Qlg+bO3kzcqY6TS4gsel1OZ8XMjuuPHAKJQEECMuccnIbOFi6RiPB49oZXodPwqET/8RPiNVyxuq0rXL3RHQgpHTtMGsjnXthea2cSftQZ+qLyAvTV3nSoNTsYJVLCYY1ZSSV5HefS3AjQeyEoEIDTDkjjN3L0ziCpzcAAACBAJ5fKiF8s/KQhOif8lPN2Hdzlg41zyBzHcUeed4iCyPsviItlzof1aernlhjcoIoE7kbEDxkHT+B81Q/u419ELUH6V3mWCr62Vj/M+gWrmIB99OBOizdtRSXVqzB7gHzU3fo+KGhO4Rj0lkvNX5Mp5rm7Sq94chxWSIhSYOZtPF/ rd@Door-god [root@work ~]$ cat /work/.ssh/authorized_keys ssh-dss AAAAB3NzaC1kc3MAAACBAIooqsMH2dyZQPy+kpgtSNuwLwbaX/kbI0x1crkD4ZnaDb36S192aweCD2cofFR1VNTC95DRu1z0le1/Ou3iKne6xMpqECK8Gv/RPIezu9grN59ioSh4sgIAh7a4WX6UlzyxSOficKbnWbVk8N5n/ZC0i0//ssm5ojpFk7tya79fAAAAFQCGc9YirNonom7J/mJyjN2FA6hMrQAAAIB3ioz6OUaay6es17ixfS/3/hno2fnRj1Do/u7gSIbHyyDG8RyI5szcQ2ETOrl/fd801/1emiTaXEiZR936zhqT4W1CKfDsNS3Dbm9C5Sb17/khHLHAcMFVIrzj7XmqxnDYOncv7HzIhQAgoolVdAdwMryF3sJpvqu2Wyoe7wJPYAAAAIBXIJ/VVhBLLMPG/z1Ima1sOmLlvBWA2iJhbVrqNOFhZxE04fowe1VmLg4fxCAlAS+FfeaX89HggdFLEjIJKb844NtrRGCizsrUAgBsnscrAb3DX9UFblJQu6okatLXhjAA4qNI5dn3/t9eg2xYgAFDotcxOE68ghBqN55UWV5CRg== work@Door-god
sudo授权管理
客户端sudo授权管理,允许work用户免密码提权
[root@app ~]# ll /etc/sudoers -r--r----- 1 root root 4039 Nov 3 09:59 /etc/sudoers
通过visudo在98行修改配置,有语法检查,不要直接修改sudoers文件。
要把自己的work账户提升成root,那么直接复制,把root改成work账号即可。下次work用户直接使用sudo su - root 就能切到root权限下
work ALL=(ALL) ALL
work既有了root权限还不知道root的密码,但是每次切到root,都要输入work普通用户密码,太繁琐了,可以在visudo中改成如下,这样就不用输入密码了,但是不安全。
work ALL=(ALL) NOPASSWD: ALL
测试提权命令:
[root@Repo3 ~]# su - work [work@Repo3 ~]$ sudo su - [root@Repo3 ~]#
安装iTools门神系统
su - work mkdir -p /data/work/opbin/ cd /data/work/opbin/ unzip itools.zip && rm -rf itools.zip chmod +x /data/work/opbin/itools/bin/* sh /data/work/opbin/itools/bin/install.sh chmod 777 /tmp/itools/ [root@Door-god bin]$ ll /tmp/itools/ drwxrwxr-x. 2 rd rd 21 8月 27 13:41 rd-34196 drwxrwxr-x. 2 work work 21 8月 27 13:42 work-34414
生产环境日志审计解决方案
1、通过环境变量syslog全部日志审计(信息量太大,不推荐)
2、sudo配合syslog服务,进行日志审计(信息较少,效果不错)
3、在bash解释器嵌入一个监视器,让所有用户使用修改过的bash
4、齐治的堡垒机(商业产品)
以下实验以centos6.x,如果是centos5.x对应服务是syslog
[root@eric6 ~]# uname -a Linux eric6.4 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [root@eric6 ~]# rpm -qa|grep rsys rsyslog-5.8.10-6.el6.x86_64 [root@eric6 ~]# rpm -qa|grep sudo sudo-1.8.6p3-7.el6.x86_64
配置syslog:
[root@eric6 ~]# echo "Defaults logfile=/var/log/sudo.log">>/etc/sudoers [root@eric6 ~]# tail -1 /etc/sudoers Defaults logfile=/var/log/sudo.log [root@eric6 ~]# visudo -c /etc/sudoers:解析正确 [root@eric6 ~]# echo "local2.debug /var/log/sudo.log">>/etc/rsyslog.conf [root@eric6 ~]# tail -1 /etc/rsyslog.conf local2.debug /var/log/sudo.log [root@eric6 ~]# /etc/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@eric6 ~]# ll /var/log/sudo.log
检查日志记录信息:
[root@eric6 ~]# cat /var/log/sudo.log Sep 14 20:13:38 : liuyalei : TTY=pts/0 ; PWD=/home/liuyalei ; USER=root ; COMMAND=/bin/su -root Sep 14 20:13:42 : liuyalei : TTY=pts/0 ; PWD=/home/liuyalei ; USER=root ;