码迷,mamicode.com
首页 > 系统相关 > 详细

Linux服务器安全之用户密钥认证登录(基于CentOS 7.0系统)

时间:2016-04-28 12:38:14      阅读:1136      评论:0      收藏:0      [点我收藏+]

标签:服务器安全 秘钥登录 centos 7

一、 密钥简介: 

  在Linux下,远程登录系统有两种认证方式:密码认证和密钥认证。密码认证方式是一种传统的安全策略。设置一个相对复杂的密码,对系统安全能起到一定的防护作用,但是也面临一些其他问题,例如密码暴力破解、密码泄露、密码丢失等,同时过于复杂的密码也会对运维工作造成一定的负担。密钥认证是一种新型的认证方式,公用密钥存储在远程服务器上,专用密钥保存在本地,当需要登录系统时,通过本地专用密钥和远程服务器的公用密钥进行配对认证,如果认证成功,就可以成功登录系统。这种认证方式避免了被暴力破解的危险,同时只要保存在本地的专用密钥不被黑客盗用,攻击者一般无法通过密钥认证的方式进入系统。

二:服务器端密钥的生成和配置

  OpenSSH的密钥认证体系有两种:RSA和DSA,分别是两种不同的加解密算法。

  T710服务器中管理员主要采用RSA密钥认证。用户在使用初始密钥登录后,可自行修改使用其他密钥认证方法。

  服务器端RSA密钥的生成和配置步骤如下:

    1.在用户目录下新建一个.ssh目录,并将其目录权限改为700(仅用户自身有读写操作权限):

# mkdir .ssh

# chmod 700 .ssh

    2.进入.ssh目录,使用ssh-keygen命令生成rsa密钥对:

# ssh-keygen -b 4096(rsa默认为2048位) -t rsa (一路回车即可;如果想给生成的私钥加密的话,可以加密)

    3.这时生成了两个文件:id_rsa和id_rsa.pub,其中前一个为私钥,后一个为公钥,公钥须保留在服务器上,私钥拷贝到客户端机器上

    4.在.ssh目录中新建一个文件名为:authorized_keys,将公钥内容拷贝到这个文件中,并将文件权限改为600(仅用户自身有读写权限)

# touch authorized_keys

# cat id_rsa.pub >> authorized_keys

# chmod 600 authorzied_keys

  到此:服务器端的密钥设置完成,这里需注意要保证.ssh和authorized_keys都仅用户自身有写权限,否则验证无效,这也是系统处于安全性考虑做的设置。


     加强安全相关的设置:

通过服务器端秘钥生成的方式进行验证,如果想更加的安全,可以修改:/etc/ssh/sshd_config 的配置文件;

#Port 22 (此项表示使用的端口的,默认为22号端口,可以更改为别的)


     #LoginGraceTime 2m   (设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位))


#PermitRootLogin yes  (此项改为 no 管理员账户root将不能直接登录;这个选项一定不要设成“yes)


#StrictModes yes   (设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限)


#MaxAuthTries 6  (此项启用,表示最多允许认证的次数)


#MaxSessions 10   (此项启用,表示最多允许建立的会话连接数)


#KeyRegenerationInterval 3600 (设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。)


#IgnoreRhosts yes  (设置验证的时候是否使用“rhosts”和“shosts”文件)


#IgnoreUserKnownHosts yes  (设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”)


#X11Forwarding no  (设置是否允许X11转发)


#PrintMotd yes     (设置sshd是否在用户登录的时候显示“/etc/motd”中的信息)


#SyslogFacility AUTH (SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”)

#LogLevel INFO (“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息)


#RhostsAuthentication no (“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了)


#RhostsRSAAuthentication no (“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证)


#RSAAuthentication yes (设置是否允许只有RSA安全验证)


#PasswordAuthentication yes(设置是否允许口令验证)


#PermitEmptyPasswords no(设置是否允许用口令为空的帐号登录)


#AllowUsers admin(“AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。)


三、客户端密钥的设置:

Windows系统 

  在Windows系统下,一般我们采用不同的X server工具来登录,需要先将私钥导入到登录工具的密钥管理器,建立一个新的连接,用户名和主机的填写与采用用户名密码登录一样,登录不再选择”Password”而是”Public key",User Name填写自己的登录用户名,User Key选择之前导入的服务器私钥 ,保存之后,即可无密码登录。

Linux系统

  Linux系统下设置同样先将服务器私钥拷贝到客户端

        1.与服务器端一样,在用户目录下新建一个.ssh目录,并将其目录权限改为700(仅用户自身有读写操作权限)

        # mkdir .ssh

        # chmod 700 .ssh

2.将私钥id_rsa拷贝到.ssh目录下,检查文件权限是否为600,如果不是,需要更改文件权限为600

# mv  id_rsa  ./.ssh

# chmod 600 id_rsa

3.这时即设置完毕,输入ssh命令,即可直接连接到服务器,无需输入用户名密码

# ssh –l 用户名 服务器IP

4.如果需要从客户端通过密钥认证的方式登录不同的服务器,私钥的名称不能都是用id_rsa,这是可以在.ssh目录下建立一个config文件来进行区分,config文件权限同样设为600

# touch config

# chmod 600 config

5.为config文件添加内容如下:

User username      //username 填写自己的登录用户名

Host server_IP   //设置服务器IP

IdentityFile ~/.ssh/rsa_file   //rsa_file填写私钥名称

Port 22


   这样:

    用户可以将私钥id_rsa改为与config文件中irs_file同名的文件名,就可以匹配登录服务器了.

本文出自 “小小运维” 博客,请务必保留此出处http://wangyongchun.blog.51cto.com/10421552/1768423

Linux服务器安全之用户密钥认证登录(基于CentOS 7.0系统)

标签:服务器安全 秘钥登录 centos 7

原文地址:http://wangyongchun.blog.51cto.com/10421552/1768423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!