说明
没有绝对的安全,只有相对的安全
1. 修改root密码
root作为超级管理员可以做很多事情(甚至删除系统),密码简单了容易被暴力破解,建议使用密码生成器生成一个16位复杂的密码(暴力破解也需要更长的时间),不要想着记住密码了,使用的时候就复制-粘贴吧,毕竟作为服务器当上线运行的时候不会经常有用到root权限。
计算一下暴力破解16位密码的时间(此段可跳过直接往下看)
单个密码的可能(95)=(26)小写字母+(26)大写字母+(10)数字+(32)键盘上的符号+(1)空格
16位密码共有多少种组合呢?
如果普通计算机的破解速度为每秒10000000个(一千万个还不包括软件运算和网络卡顿延迟时间。。。)
一天=60×60×24=86400秒
假设黑客运气好点,暴力尝试一半就破解了,我们计算一下需要多少天
后面还有两个个0呢。。。。
需要25470293324750000000天。。。自己计算一下需要多少年吧。一般别人不会跟你有生死仇吧,你的服务器也不会重要到国家战争级别吧。。不会有人从出生到入土都在破解你一台服务器。
计算了这么多,就是说明密码越长越好,多一位数就是指数级上升,自己记不住没关系,可以复制粘贴嘛。
密码长了就安全吗?当然不是,人家可以拦截你在网络上传输的数据包,你输入了什么都有可能看到,你复制-粘贴,人家也复制-粘贴。。。密码长度越长可防止暴力破解
2. 添加其他用户,将用户分组。
各司其职,权限不是越大越好,用户需要什么权限就分配什么权限,可将不同功能的用户分为不同的组。
比如:ftp用户分配在ftp组内,git分配到git组中。。。
具体方法如下
linux添加用户,用户组(centos7)传送门:http://www.jianshu.com/p/f468e02f38a0
3. 更换ssh登录端口
ssh默认端口为22。默认的东西你知我知。
- 修改sshd_config文件(关于ssh的配置大多都在这个文件中)
vim /etc/ssh/sshd_config
搜索Port修改为2222端口(端口可自行更改)
理论上可以改成随意端口,可是这些端口可能会和其他服务冲突,可以参考这里
Port 2222
firewall-cmd --zone=public --add-port=2222/tcp --permanent #开启防火墙2222端口
systemctl restart firewalld.service #重启防火墙
systemctl restart sshd.service #重启ssh服务
4. 使用密钥+密码登录(双层保障)
当别人通过非暴力破解方式获取了你的服务器登录密码之后,密码再长也没有用了。这个时候就需要使用密钥文件验证了。如果加上密码安全系数相对会更高一点。
密钥是提前生成的。想要登录,必须拿到密钥文件。拿到密钥文件后才有资格输入密码。密钥文件也可以单独加密,这样要登录服务器就要获取到密钥文件,输入两个密码。
同时获取到这个三个条件(密钥文件,密钥密码,用户密码)难度可不是×3了。。。再被别人莫名其妙的登录那就要想想自己得罪谁了,被人家针对了。。
使用密钥+密码登录传送门:http://www.jianshu.com/p/b1eeb3f1a2c1
5. 防火墙端口配置
用到什么端口就开什么端口,千万不要为了省事,直接关闭防火墙。
防火墙端口设置常用命令,添加/禁用,操作后需要重启或重载防火墙生效。
systemctl start firewalld #启动防火墙
systemctl stop firewalld #禁用防火墙(防火墙全部关闭)
systemctl restart firewalld.service #重启防火墙
firewall-cmd --reload #重启载入防火配置
systemctl enable firewalld.service #将防火墙加入开机自启动
firewall-cmd --zone=public --add-port=80/tcp --permanent #添加开启80端口
firewall-cmd --zone=public --add-port=4000-4010/tcp --permanent #添加开启4000-4010端口
firewall-cmd --zone=public --remove-port=21/tcp --permanent #禁用21端口
firewall-cmd --query-port=80/tcp #查询80端口是否开启
netstat -tunlp |grep ftp #查看ftp端口使用端口情况
netstat -ntlp #查看监听(Listen)的端口
netstat -antp #查看所有建立的TCP连接
iptables -L #查看防火墙规则
6. 设置日志文件系统
使用history命令查看当前系统用户操作日志是默认10000行这样的用户是不够的。
而且同一个用户多个地方同时登录我们就查不到具体那条命令是哪个用户在哪个ip登录并执行的。
所以我们需要自己创建ssh日志记录。
- 编辑profile文件
vi /etc/profile
使用户登录后在/tmp/dbasky
目录生成日志(目录可自定义修改,修改下面代码对应目录即可)
将以下内容粘贴到文件底部
#########################日志记录##############################
PS1="`whoami`@`hostname`:"'[$PWD]'
history
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
if [ ! -d /tmp/dbasky ]
then
mkdir /tmp/dbasky
chmod 777 /tmp/dbasky
fi
if [ ! -d /tmp/dbasky/${LOGNAME} ]
then
mkdir /tmp/dbasky/${LOGNAME}
chmod 300 /tmp/dbasky/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date "+%Y-%m-%d_%H:%M:%S"`
export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT"
chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null
使用脚本生效
source /etc/profile
退出用户,重新登录
查看日志(默认只有root有权限查看),不同用户会以用户名名单独创建目录,使用vi即可查看
7. 最后禁止 root 用户使用 ssh 登入
当服务器基础环境搭建好之后就可以禁用掉root账号登录,平时只使用普通账号。
如果需要管理员权限可以在命令前加sudo。或者登录后切换到root用户(切换root也尽量少用)。
禁用root配置
- 修改sshd_config文件
vim /etc/ssh/sshd_config
搜索PermitRootLogin修改为no,yes为允许root账号登录
PermitRootLogin no
重启ssh服务
systemctl restart sshd.service
**这个时候不要关闭当前的连接,另外开一个连接进行测试root是否能登录。同时保证有其他用户可以登录,如果其他用户不能登录还能改回来。否则你关闭了连接又没有其他账号可登录。想要控制远程的服务器,呵呵!!→_→ **
(真的关闭了当然不是不能连接,麻烦点。如果自建机房,带着键盘和显示器去机房吧。如果是云服务器,一般登录管理页面都有控制台。)