安全杂谈SSSH(SELinx+SSH)

Selinux 介绍

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

使用SELINUX最好的原因就是,它可以通过增强访问控制来限制用户程序访问的最低权限,还有一些改进:

  1. 对内核对象和服务的访问控制
  2. 对进程初始化,继承和程序执行的访问控制
  3. 对文件系统,目录,文件和打开文件描述的访问控制
  4. 对端口,信息和网络接口的访问控制

在linux里面,所有的文件和进程都有一个security context的,而SELinux就是通过security context就用来对文件和进程进行控制的。

查看selinux状态

[root@station164 ~]# sestatus

SELinux status:                 enabled

SELinuxfs mount:                /selinux

Current mode:                   enforcing

Mode from config file:          enforcing

Policy version:                 26

Policy from config file:        targeted

查看文件的security context值

#ls -Z

[root@localhost ~]#

[root@localhost ~]# ls -Z

-rw------- root root system_u:object_r:user_home_t     anaconda-ks.cfg

drwxr-xr-x  root root root:object_r:user_home_t      Desktop

-rw-r--r-- root root root:object_r:user_home_t       file

-rw-r--r-- root root root:object_r:user_home_t       Finished

 [root@localhost ~]#

这个就是我们文件的security context值,

root:object_r:user_home_t

root         用户的用户名(一般文件是谁创建的,这个用户名就是谁)

object_r       文件的角色

user_home_t       context值的类型

 

context值的类型会随着文件在不同的位置,会跟着发生变化。

现在通过试验来验证一下

可以看到,这个文件的context值就发生变化了。

这个文件的context值会随着目录的作用和环境的不同而发生改变。

它会继承上一级目录的context值。

如何去查看一个进程的security context值呢,

#ps -Z

这个就是我们进程的security context值,

如何去修改一个文件的context值呢,

使用chcon命令来修改文件的context值,

Chcon=change context

# chcon -t context值的类型  文件名

可以看到,1这个文件的context值就改变了。

也可以改变目录的context值,要加上-R参数,表示递归。

如何去恢复一个文件的context值呢,

#restorecon -v file

-v   是查看改变的过程

[root@localhost ~]#

[root@localhost ~]# restorecon -v file

restorecon reset /root/file context root:object_r:tmp_t:s0->root:object_r:user_home_t:s0

[root@localhost ~]#

[root@localhost ~]# ls -Z | grep file

-rw-r--r-- root root root:object_r:user_home_t        file

[root@localhost ~]#

OK,file这个文件的context值就改变回来了。

同样的,恢复目录的context值也需要加上-R参数,表示递归。

SELinux的管理

关于SELinux的三种模式

Enforcing      强制模式

Permissive      警告模式(运用排错中)

Disabled       禁用模式

从强制模式切换到禁用模式,或者禁用模式切换到强制模式,都必须等到计算机下次启动的时候才会生效的。

但是强制模式和警告模式在切换的时候当前就可以生效。

如何去修改SELinux的模式呢,

可以通过文件来修改

/etc/selinux/config这个文件中可以修改SELinux的模式,

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#       enforcing - SELinux security policy is enforced.

#       permissive - SELinux prints warnings instead of enforcing.

#       disabled - SELinux is fully disabled.

SELINUX=enforcing

# SELINUXTYPE= type of policy in use. Possible values are:

#       targeted - Only targeted network daemons are protected.

#       strict - Full SELinux protection.

SELINUXTYPE=targeted

也可以通过图形界面修改,输入system-config-selinux,如果没有该命令,安装policycoreutils-gui

那么如何去查看计算机中正在生效的模式呢,

使用getenforce命令

 [root@localhost ~]# getenforce

Enforcing

可以看到,系统正在处于SELinux的强制模式,

如何通过命令来实现强制模式和警告模式之间的切换,

使用setenforce命令来切换

#setenforce   0

切换成警告模式

#setenforce   1

切换成强制模式

 [root@localhost ~]# getenforce

Enforcing

 [root@localhost ~]# setenforce 0

 [root@localhost ~]# getenforce

Permissive

[root@localhost ~]# setenforce 1

 [root@localhost ~]# getenforce

Enforcing

这就是强制模式和警告模式之间的切换,注意强制模式和警告模式之间的切换是立即生效的。涉及到禁用模式的切换要重新启动系统。

 

关于selinux的Boolean值

如何去查看Boolean值呢,

# getsebool -a

这样可以查看关于服务的Boolean值,

怎么设置服务的Boolean值

setsebool -P ftp_home_dir on

在linux系统中,如果我们的SELinux是处于强制状态的,一旦用户触犯了selinux的规则,那么SELinux将会阻挡用户的访问。但是linux也提供给用户提供了一个解决方案,当用户触犯了SELinux的规则后,系统会跳出一个黄色五角星,并给出解决的方案。如果这个黄色五角星没有跳出来,如果这个软件包没有安装,那么就需要安装下,

这个功能是由setroubleshoot这个软件包提供的。

图形化界面也是可以修改bool值,如果发现没有该选项,需要安装policycoreutils-gui

Linux访问控制

----------iptables----------tcp_wrappers----------服务本身的访问控制。

Iptables           基于原IP,目的IP,原端口,目的端口来进行控制的。

Tcp_wrappers:                对服务的本身来进行控制。

Service            对行为做控制,更细致的控制。

Tcp_wrapper

    像Telnet、SSH、FTP、POP和SMTP等很多网络服务都会用到TCP Wrapper,它被设计为一个介于外来服务请求和系统服务回应的中间处理软件。

    它的基本过程是这样的:当系统接收到一个外来服务请求的时候,先由TCP Wrapper处理这个请求,TCP Wrapper根据这个请求所请求的服务和针对这个服务所定制的存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper将该请求按照配置文件定义的规则转交给相应的守护进程去处理同时记录这个请求动作,然后自己就等待下一个请求的处理。
    TCP Wrapper机制的主要目的在于,来自客户端的请求只被允许同一个独立的守护进程(xinetd)直接通信,而它请求的目标服务被TCP Wrapper包裹起来,这样就提高了系统的安全性和系统管理的方便性。
  TCP Wrapper 提高了系统的安全性。系统安全性的具体体现主要有两点,一个是获取访问权限前的控制,一个是获取访问后的处理。获取权限前,它会根据/etc/hosts.allow和/etc/hosts.deny定制的规则来判断对方是否有权限;获取权限后,通过bind、redirect等属性的设置,可能已经由另一台主机或者另一个服务在处理了对方的请求,而对方并不会感知中间经过了这样的处理。
  TCP Wrapper更加方便了系统管理。一方面可以抽取系统所有服务共有的属性放到/etc/xinetd.conf中,另一方面,将每一个服务具体的配置放到/etc/inetd.d目录下,而每个配置文件都遵循同样的语法和规则。
  TCP Wrapper的功能来自于libwrap.a,它是一个网络服务库, sshd和portmap等许多系统服务编译时都依赖于它,其他的网路服务程序甚至你自己编写的网络服务程序都可以加上这个编译选项来提供TCP Wrapper的功能。

今天我们来讨论第二层防火墙tcp_wrappers

Tcp_wrappwes的访问控制主要是两个文件,

/etc/hosts.allow  

/etc/hosts.deny 

/etc/hosts.allow是用来定义允许的访问,

/etc/hosts.deny是用来定义拒绝的访问。

注意,配置改变,立即生效

现在我们来了解一下tcp_wrappers访问控制判断顺序

首先查看/etc/hosts.allow,如果匹配到一个条目,将不在读取下面的。

如果在/etc/hosts.allow没有匹配到条目,则读取/etc/hosts.deny,如果匹配,则拒绝,如果不匹配,则默认允许所有。

举例说明:
allow     192.168.1.0/255.255.255.0

Deny      192.168.1.1

如果是这样的,192.168.1.1可以访问吗?

是可以的,在allow里面定义了允许192.168.1.0/24,这个网段里面就包含了192.168.1.1。它已经明确了指定了允许192.168.1.0/24的网络,那么192.168.1.1匹配到这个条目,就不在往下面读。

关于tcp_wrappers的语法

Daemon_list client_list

关于客户机的说明

IP地址      192.168.0.1

域名         .example.com

网段         192.168.0.0/255.255.255.0  192.168.0.

现在来做个试验,

默认情况下,我们的tcp_wrappers防火墙的默认允许所有的,是因为在/etc/hosts.allow/etc/hosts.deny这两个文件里面默认是任何策略也没有的。

现在我们在192.168.0.10这台主机上面去ssh192.168.0.254

[root@localhost ~]#

[root@localhost ~]# ssh 192.168.0.254

root@192.168.0.254's password:

Last login: Thu Mar 11 21:56:54 2010 from 192.168.0.254

[root@localhost ~]#

OK,可以看到,我们没有做任何的策略,192.168.0.10的确是可以ssh192.168.0.254这台主机上面去的。

下面我们开始做策略,在192.168.0.254这台主机上面拒绝192.168.0.10ssh

编辑/etc/hosts.deny文件,

Vim  /etc/hosts.deny

#

# hosts.deny    This file describes the names of the hosts which are

#               *not* allowed to use the local INET services, as decided

#               by the '/usr/sbin/tcpd' server.

#

# The portmap line is redundant, but it is left to remind you that

# the new secure portmap uses hosts.deny and hosts.allow.  In particular

# you should know that NFS uses portmap!

sshd: 192.168.0.10

~

/etc/hosts.deny文件就定义完成了,现在来测试下,

[root@localhost ~]#

[root@localhost ~]# ssh 192.168.0.254

ssh_exchange_identification: Connection closed by remote host

[root@localhost ~]#

可以看到,现在连接就被直接拒绝了。

当然,后面匹配的客户端的写法可以是192.168.0.0/255.255.255.0,也可以是192.168.0.这个也可以。用域的方式来表示也没有问题可以写成.example.com。但是不可以用192.168.0.0/24来表示一个网段。

 

关于主机的宏定义表示方式

宏定义表示某一种类型的主机

LOCAL                           主机中不含.的主机(通常是指自己)

KNOWN                        所有在DNS中可以解析到的主机

UNKNOWN                   所有在DNS不可以解析到的主机

PARANOID                    所有在DNS中正向解析与反向解析不匹配的主机

ALL                                代表匹配所有(这个主机和服务都可以定义)

还有一个非常有用的定义方式:

EXCEPT

这个就代表反向选择,

现在做一个试验来理解这个参数的意义,

先在192.168.0.254这台主机上面定义./etc/hosts.deny这个文件,

#

# hosts.deny    This file describes the names of the hosts which are

#               *not* allowed to use the local INET services, as decided

#               by the '/usr/sbin/tcpd' server.

#

# The portmap line is redundant, but it is left to remind you that

# the new secure portmap uses hosts.deny and hosts.allow.  In particular

# you should know that NFS uses portmap!

sshd: 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.10

 

/etc/hosts.deny文件定义完成了,来测试下。

~

现在我们在192.168.0.10上面去ssh192.168.0.254上,看下能否成功。

[root@localhost ~]#

[root@localhost ~]# ssh 192.168.0.254

root@192.168.0.254's password:

Last login: Thu Mar 11 22:25:04 2010 from 192.168.0.10

[root@localhost ~]#

OK192.168.0.10是可以ssh192.168.0.254上面去的。

现在我们在来利用192.168.0.20ssh192.168.0.254,看下能否成功。

[root@localhost ~]#

[root@localhost ~]# ssh 192.168.0.254

ssh_exchange_identification: Connection closed by remote host

[root@localhost ~]#

可以看到,现在连接就被拒绝了。

 

为什么192.168.0.10可以ssh192.168.0.254上面,而192.168.0.20不可以ssh192.168.0.254上面去呢,这个就是刚才EXCEPT的作用。我们在/etc/hosts.deny文件里面定义了拒绝192.168.0.0/255.255.255.0这个网络中的所有主机,但是,除了192.168.0.10以外。就是这个原因。

我们刚才是将EXCEPT写在了/etc/hosts.deny文件中,如果写在/etc/hosts.allow里面呢,那么就和写在deny里面就又不一样了。

现在将hosts.deny给清空掉,然后编辑hosts.allow文件。

#

# hosts.allow   This file describes the names of the hosts which are

#               allowed to use the local INET services, as decided

#               by the '/usr/sbin/tcpd' server.

#

sshd: 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.10

~

/etc/hosts.allow文件就编辑完成了,这个时候,192.168.0.10可以ssh192.168.0.254吗,测试下。

[root@localhost ~]#

[root@localhost ~]# ssh 192.168.0.254

root@192.168.0.254's password:

Last login: Thu Mar 11 22:31:42 2010 from 192.168.0.20

[root@localhost ~]#

可以看到,是允许的,这个又是为什么呢,当192.168.0.10想要去ssh192.168.0.254这台主机的时候,先读取/etc/hosts.allow文件,在hosts.allow文件中定义了允许192.168.0.0/255.255.255.0这个网络,除了192.168.0.10这台主机,但是并没有明确给192.168.0.10这台主机一个允许或拒绝的定义,是先读取hosts.allow文件,而这个文件只是将192.168.0.10这台主机排除在外,最终还是要看hosts.deny文件中的定义是怎么样的。

 

查询那些服务是支持tcp_wrappers

如果服务调用了libwrap.so这个动态链接库文件就代表这个服务支持tcp_wrappers

当然也可以这样来直接查询,

[root@localhost ~]#

[root@localhost ~]# ldd `which vsftpd` |grep libwrap

        libwrap.so.0 => /lib/libwrap.so.0 (0x00825000)

[root@localhost ~]#

可以看到,vsftpd也是可以支持tcp_wrappers的。

数据加密

加密的意义

  • 数据不加密可能造成的后果
    • 密码/数据被盗听
    • 数据被篡改
    • 认证被操纵
  • 不安全的服务和协议
    • 密码不安全:telnet,等等
    • 数据不安全:sendmail,nfs等等
    • 认证不安全:rsh,rcp等等
  • telnet 服务由于密码传送的时候是明文,容易被抓包软件截取到,不能保证安全,现在已经很少在使用了。ssh替代
  • FTP可以用sftp来取代。
  • rcp 远端复制文件或目录,scp取代了它。
  • rsh 由于无法保证安全,可以采用证书验证登陆。

      单向校验

  • 对数据文件用工具求值,并与原文件求得值做比较以验证文件是否为原文件
  • 常用的工具:
    • sum(CRC-32)
    • md5sum(MD5)
    • sigen(CRC-32/MD5/SHA/HAVAL)
  • 常用于检验网络下载的大尺寸文件,诸如iso镜象。   我们从网上下载文件的时候,经常会看到下载文件的旁边有个MD5码之类的,等我们下载下来之后,使用工具,验证下,就知道文件完整性,跟官方发布的对比,就可以知道是不是被修改过。

 

不对称加密

  • 基于公钥与私钥组   --成对出现,一组密钥,
  • 原理:
    • 先由收信人生成一对公钥与私钥
    • 收信人将公钥发布出去,留下私钥
    • 送信人获取公钥,然后用公钥将传送给收信人的信息加密
    • 收信人收到加密信息后再用私钥将信息解密

数字签名

  • 另一种同样基于公钥与私钥组的不对称加密
  • 原理:
    • 发信人先生成一对公钥与私钥
    • 发信人将公钥发布出去,留下私钥
    • 发信人用私钥将所传送的信息加密,然后送出
    • 收信人用获得的公钥将信息解密

 

PKI与证书服务应用

PKI(Public Key Infrastructure ) 即"公钥基础设施",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。

PKI的基础技术包括加密、数字签名、数据完整性机制、数字信封、双重数字签名等。

 

什么是公钥

公钥是与私钥算法一起使用的密钥对的非秘密一半。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥)其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

什么是私钥

与公钥算法一起使用的密钥对的秘密一半。

1,公钥和私钥成对出现

2,公开的密钥叫公钥,只有自己知道的叫私钥

3,用公钥加密的数据只有对应的私钥可以解密

4,用私钥加密的数据只有对应的公钥可以解密

5,如果可以用公钥解密,则必然是对应的私钥加的密

6,如果可以用私钥解密,则必然是对应的公钥加的密

  • Public Key Infrastructure,公钥基础结构
  • 通过公钥技术与数字证书确保信息安全的体系
  • 由公钥加密技术、数字证书、CA、RA等共同组成
  • PKI体系能够实现的功能有
    • 身份认证
    • 数据完整性
    • 数据机密性
    • 操作的不可否认性

公钥加密技术

  • 公钥加密技术是PKI的基础
  • 公钥(Public Key)和私钥(Private Key)
    • 公钥和私钥是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密
    • 不能根据一个密钥而推算出另外一个密钥
    • 公钥对外公开,私钥只有私钥的持有人才知道
    • 私钥应该由密钥的持有人妥善保管
  • 根据实现的功能不同,可以分为数据加密和数字签名

 

数据加密

数字签名

 

基于PKI技术的协议

  • SSL
    • 认证用户和服务器,确保数据发送到正确的客户机和服务器
    • 加密数据以防止数据中途被窃取
    • 维护数据的完整性,确保数据在传输过程中不被改变
  • Https
    • 使用SSL来实现安全的通信
  • IPSec
    • 目前已经成为最流行的VPN解决方案

 

什么是证书

  • 证书用于保证密钥的合法性
  • 证书把公钥与拥有对应私钥的主体标识信息捆绑在一起
  • 证书的主体可以是用户、计算机、服务等
  • 证书格式遵循X.509标准
  • X.509是由国际电信联盟制定的数字证书标准
    • 使用者的公钥值
    • 使用者标识信息(如名称和电子邮件地址)
    • 有效期(证书的有效时间)
    • 颁发者标识信息
    • 颁发者的数字签名

 

  • 证书可以应用于
    • Web服务器身份验证
    • Web用户身份验证
    • 安全电子邮件
    • Internet协议安全(IPSec)
  • 数字证书由权威公正的第三方机构即CA签发

 

CA的作用

  • CA(Certificate Authority,证书颁发机构)
  • CA的核心功能是颁发和管理数字证书
  • CA的作用
    • 处理证书申请
    • 鉴定申请者是否有资格接收证书
    • 证书的发放
    • 证书的更新
    • 接收最终用户数字证书的查询、撤销
    • 产生和发布证书吊销列表(CRL)
    • 数字证书的归档
    • 密钥归档
    • 历史数据归档

 

证书发放过程

 

Openssh

  • openssh用来普遍替代了不安全的基本网络通讯工具
  • 支持用户与基于标记的认证
  • 需要预先安装openssl
  • openssh基础配置放在/etc/ssh下

 

ssh客户端

  • ssh:安全shell进程
  • scp:基于ssh的安全远端拷贝文件与目录
    • scp  文件  用户@主机名:远端目录    scp /root/123 root@192.168.10.1:/root/
    • scp –r 用户@主机名:远端目录  本地目录
  • sftp:基于ssh的安全ftp传送

 

下面是2台主机建立ssh信任,从此,A机器登陆B机器就不需要密码验证了。

  • A机器 192.168.1.1
    B机器 192.168.1.2
  •  
  • [root@mailsvr ~]# ssh-keygen -t rsa      创建证书
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    65:4a:68:cc:6c:23:2b:04:1a:3c:ee:d7:af:e7:e3:8d root@mailsvr
  • [root@mailsvr ~]#
    然后把公匙传到B机的/root/.ssh中:
    [root@mailsvr .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.1.2:/root/.ssh/authorized_keys  
    root@192.168.1.2's password:
    id_rsa.pub                            100%  219     0.2KB/s   00:00
    [root@mailsvr .ssh]# 
  • 验证一下,ssh登陆到B机,是否不需要输入密码,如果不用则建立成功
  • [root@mailsvr .ssh]# ssh 192.168.1.2
    Last login: Fri Jun  6 09:59:28 2008 from 192.168.1.1

 

ssh服务端

  • 配置ssh服务端,需要安装openssh-server
  • 后台进程sshd,作为一个System V服务,可以用/etc/init.d/sshd脚本来控制
  • 采用公钥与私钥组机制
  • 使用22为其服务端口
  • 支持libwrapper的限制

 

1、修改ssh链接端口号

  • [root@linux ~]# vi /etc/ssh/sshd_config
    # OpenSSH is to specify options with their default value where
    # possible, but leave them commented. Uncommented options change a
    # default value.
  • Port 8284      //以前这个前面是有 # 号的,而且默认是 22 ,修改一下就ok了
    #Protocol 2,1
    #ListenAddress 0.0.0.0
  • 重起ssh服务,修改端口才生效
    [root@linux ~]# /etc/init.d/sshd restart
    Stopping sshd:                    [ OK ]
    Starting sshd:                    [ OK ]
    [root@linux ~]#
  • 为了检验是否正确,可以使用 netstat -an 命令查看一下。

2、修改默认root用户不能通过ssh登陆

  • 修改之前,请先创建一个用户,ssh登陆之后,在su到root用户来操作。
  • [root@linux ~]#  vi /etc/ssh/sshd_config
  • #LoginGraceTime 2m
    #PermitRootLogin yes    
    修改为 PermitRootLogin no
  • #StrictModes yes
    #MaxAuthTries 6
  •  
  • 重启ssh服务,方法上面有的。

3、.bash_history 文件不记录历史命令,

  • /root/.bash_profile  文件里面添加一行    
  •  HISTSIZE=0     就OK啦
  •  
  • 退出重新登录,这样设置后,向上向下箭头就不再显示曾经输入的命令
  •  

4,记录命令执行的时间

  • [root@linux ~]#  vi /etc/bashrc
  •  
  • 后面添加

ISTFILESIZE=2000

HISTSIZE=2000

HISTTIMEFORMAT="%Y%m%d-%H%M%S:"

export HISTTIMEFORMAT

 

  • 退出重新登录测试
  • [root@linux ~]#  cat .bash_history
  • #1260352080
    history
    #1260352089
    cat /dev/null >.bash_history
    #1260352093
    exit
  •  
  • 这个时间叫做Unix time,是从1970年1月1日临时起,到现在一共经过了多少秒
    因为1969年是Unix系统诞生,因此1970年1月1日被规定为Unix系统诞生的时间的初始
    Linux系统因为和Unix系统的相似性,也完全采用这种方式来记录时间
    按照年月日方式来显示时间,执行History命令来查看,就可以了,例如:
  •  
  • [root@mailsvr12 ~]# history
        1  20091209-174800:history
        2  20091209-174809:cat /dev/null >.bash_history
        3  20091209-174813:exit
        4  20091209-174818:history
        5  20091209-175018:cat .bash_history
        6  20091209-175132:history
  •  
  • 注意:本方法必须在服务器刚刚新安装好时候,就设置这个参数。如果是已经运行了很久的服务器才添加这个参数,则以前的那些命令历史记录是不显示时间的。
  • 可以先清空.bash_history文件,以后的记录就会正常
    方法:
  • [root@mailsvr12 ~]# cat /dev/null /root/.bash_history
  •   

5,允许某个特定的用户ssh登录,除过该用户,其他所有的用户都不能登陆。

  • [root@mailsvr12 ~]# vi /etc/ssh/sshd_config
    在最后一行加入一行,
  • AllowUsers user
  •  
  • #user是允许连接的用户
  • 如果是多个用户的话:AllowUsers A B C
  • 注意中间是空格,而不是分号,接下来重启ssh
  • [root@mailsvr12 ~]# /etc/init.d/sshd restart
  •  
  • 配置完成之后,只有特定允许的用户才可以登录,其他用户包括root用户都是不能登录的。其他用户登录之后,su到root用户。

 

SSH使用证书登录

 

先生成证书

 

[root@app1 ~]# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ce:f4:9f:0c:b7:53:81:3b:c1:cf:d2:21:d0:5e:38:70 root@app1

 

[root@app1 ~]# cd /root/.ssh/

我们需要修改公钥的文件名,因为openssh缺省的文件名是authorized_keys

[root@app1 .ssh]# cp id_rsa.pub authorized_keys

 

把id_rsa.pub(公钥),id_rsa(私钥)这两个文件下载回到本地,放到同一个文件夹下,这是关键。例如我下载到D:\soft\ssh\

 

接下来配置SecureCRT

 

新建一个会话

取消口令 然后选中公钥,点击右面的属性。

选择使用会话公钥设置,浏览到私钥的路径。确定之后,测试下,不需要输入密码,即可登录进去。

 

取消使用密码登录方法

vi/etc/ssh/sshd_config

将#PasswordAuthentication yes改为

PasswordAuthentication no

 

重启ssh服务

 

完成之后,只能使用证书来登录,就算使用root用户密码也是无法登录的。这里大家也可以使用其他用户来验证,不一定使用root用户。

 

转载于:https://my.oschina.net/u/3697324/blog/3082905

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值