星期三, 九月 12, 2012

避免弱口令,配置putty使用密钥认证登陆CentOS 6.2服务器,提高服务器安全性

几个月前的中文版putty后门事件和国内几大论坛密码泄漏事件可能让很多人至今记忆犹新。事实上,即使密码存放是安全可靠的,密码安全本身也不一定可靠,电脑处理速度越来越快,弱口令的破解也越来越简单,参照前贴:怎样构建安全的密码,如何安全地存储及使用密码。所以,选密码本身就是一个头疼的问题,密码太简单,容易被破解,密码很复杂,自己容易忘。尤其对站长来说,服务器密码丢失,损失将是巨大的。幸运的是,对于Linux服务器,我们可以选择用非对称密钥认证,整个过程私钥永远只在本地存贮,只要本地数据安全,服务器就是安全的。而密码本身只在需要root权限时使用,双重认证,很大程度上增加了服务器的安全。

有底纹的文字为配置文件内容或者shell命令
1. 准备工作
下载必需的软件,putty和puttygen。如果你有服务器,相信你已经有putty了,不过这里还是提醒一下,putty应该从官方网站下载,而且尽量使用英文原版,不要使用翻译的,中文版putty血淋淋的教训就在眼前,下载地址:
http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
puttygen是用来生成密钥对的工具,同时它还可以在openssh和putty所有的密钥格式间进行转换,下载地址:
http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe

2. 生成登陆密钥对
打开puttygen,点击下边第一个按钮Generate生成密钥,点击后,生成密钥时,可以在程序上边部空白面板处快速移动鼠标,这样能加快密钥生成。程序完成后如下图:
程序上半部分不可编辑文本框“Public key for pasting into OpenSSH authorized_keys file”里面就是需要用到的公钥,后面设置的时候会上传到服务器上。保存生成的公钥和私钥,点"Save public key",选择保存路径,命名为"pub.txt",注意是文本文件,为了下面设置时方便使用:点"Save private key"按钮,选择存放路径,命名为"pri.ppk"。

3. 上传公钥到服务器
用putty连接并登陆服务器,注意用你自己的普通用户登陆。运行如下命令
mkdir -p ~/.ssh
cat > ~/.ssh/authorized_keys
ssh-rsa <这里粘贴pub.txt的内容,跳过前两行和最后一行,只粘贴密钥本身,也就是第2步public key编辑框内的内容,确保密钥数据只有一行,删除puttygen添加的换行符>
EOF
接下来是必须步骤,设置权限,不能忽略
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

测试登陆,打开putty,按常规填入服务器地址。先不要连接,在左侧选择Connection->Data,在右侧对话框"Auto login username"中填入用户名(注意,是你自己刚才上传过密钥的普通用户名,不是root)。继续在左侧选择Connection->SSH->Auth,在右侧找到"Private key file for authentication",点Browse按钮,选择你刚才生成的密钥文件"pri.ppk". 如下图:

再check一下设置,服务器、用户名、私钥文件都无误,点击Open连接。如果登陆成功,祝贺你,密钥登陆已经工作了。到此你可以把上面的设置保存成一个session,下次登陆时直接选择session名就能连接,非常方便。到此安全设置还没结束,耐心继续。

以下工作需要root权限
4. 增加安全性,禁用密码登陆
接第3步,现在用su命令直接切换到root用户获得root shell。如果你已经logout,请重新用root用户登陆,原来怎么做现在就怎么做,系统登陆方式到现在还没有改变,旧的东西都还在。用vi或者其它编辑器打开文件/etc/ssh/sshd_config,找到PasswordAuthentication,改为
PasswordAuthentication no
注意,做完此项后,将只可以使用密钥方式登陆。如果你想直接登陆root用户,请按照3步骤给root生成并上传密钥

[建议]同时禁止root用户直接登陆,即使是密钥方式。方法是,找到PermitRootLogin字段,去掉注释,改为
PermitRootLogin no
重启服务器,或者sshd。
/etc/init.d/sshd restart
注意,做完此项后,root用户将无法登陆,即使给root用户上传密钥也无法登陆。唯一获得root shell的方法是使用su命令进行用户切换。

5. [可选]进一步的安全限制
做完第4步后,你就给自己的服务器上了双保险,唯一获得root权限的方法是同时取得普通用户的登陆私钥和root用户的密码。在以上的设置中,整个过程没有传输私钥,所以只要你本地密钥和root密码两个之一是安全的,你的服务器一般来讲就是安全的。
不过,如果你的服务器有多位用户,让多位用户同时持有root用户密码可能不是很好的安全选择,所以可以采用开启sudo选项给相关用户root权限。(需要root权限)
编辑/etc/sudoers文件,centos下不要直接用vi编辑此文件,用visudo命令,程序会自动处理相关权限和其它问题
visudo
找到"root    ALL=(ALL)       ALL"一行
在其下添加(假设bob是你的用户名)
bob    ALL=(ALL)       ALL
保存退出(ESC + :wq)

测试sudo功能,使用普通用户登陆(bob)
sudo -i
输入此用户(bob)的密码,如果成功获得root shell,那么sudo功能设置成功。以后有sudo权限的用户不需要root的密码,直接用自己的密码sudo -i命令即可获得root权限。更多sudo的用法请在网上查询。

[可选]禁用root用户。如果你的服务器上有用户只有普通权限,为了防止他们破解root口令获得root权限,你可以选择禁用root用户。方法是在root shell下运行命令
usermod -L root
注意:此项做完后将不能使用su命令切换用户获得root权限。所以,一定确保系统中存在可用的有sudo权限的普通用户,否则你将把自己锁在系统外!!!

结贴:网络安全永远不会过度。根据需要,建议读者至少将第4步设置做完。

没有评论: