4 sshd客户端配置
4.1 客户端配置文件
客户端配置文件:/etc/ssh/ssh_config
客户端首次连接服务端时,系统询问是否交换公钥,进行安全确认。这是由客户端配置文件默认的,可以修改配置文件ssh_config取消询问。
注:
这种做法只在内网中使用,如果服务器暴露在外网中,不建议这样操作,非常危险。
4.2 sftp命令
SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。
sftp命令格式:
sftp [用户名@]IP地址 sftp -oPort=220 [用户名@]IP地址 //修改了默认端口的情况下,需要指定端口号 例: sftp 192.168.72.129 sftp root@192.168.72.129 #sftp连接后,进入的是当前登录用户的家目录。例如使用root登录,则sftp连接后进入的是/root/目录. #文件的上传和下载,不能使用绝对路径。文件必须位于当前目录下。 复制代码
sftp连接后的常用命令:
get #下载文件 get -r #下载目录 put #上传文件 put -r #上传目录 quit、exit、bye #退出 复制代码
sftp和ftp的区别:
- 连接方式:FTP使用TCP端口21上的控制连接建立连接。而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。
- 安全性:SFTP使用加密传输认证信息和传输的数据,所以使用SFTP相对于FTP是非常安全。
- 效率:SFTP这种传输方式使用了加密解密技术,所以传输效率比普通的FTP要低得多。
5 免密码登录
5.1 sshd服务支持登录验证方式
- 密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。
- 密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。
- 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
- 不能根据一个密码来推算出另一个密钥;
- 公钥对外公开,私钥只有私钥的持有人才知道。
5.2 设置免密码登录
免密码原理流程:
- 首先在客户端生成一对密钥(ssh-keygen)。
- 并将客户端的公钥ssh-copy-id 拷贝到服务端。
- 当客户端再次发送一个连接请求时,包括ip、用户名。
- 服务端得到客户端的请求后,会到 authorized_keys 文件中查找,如果有相应的IP和用户,就会随机生成一个字符串,例如:kfc。
- 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端。
- 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端。
- 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就进行免密码登录。
相关命令:
ssh-keygen -t ecdsa ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.72.129 ssh-add 复制代码
操作步骤:
1、客户端使用命令生成密钥文件。
家目录 ~/.ssh/ 下会生成两个密钥文件,一个公钥一个私钥,.pub结尾的是公钥。
[root@localhost ~]# ssh-keygen -t ecdsa //生成密钥文件 Generating public/private ecdsa key pair. Enter file in which to save the key (/root/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_ecdsa. Your public key has been saved in /root/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:7chFnJIV8f9fOJhVCk1U+F+3EtGX1NqCWaX5rZZnQEI root@localhost.localdomain The key's randomart image is: +---[ECDSA 256]---+ | +oE.===| | + + +o=o| | o + ++*+o| | + o*o+*| | S o *.B| | . + = B.| | o . o B =| | . +o| | .| +----[SHA256]-----+ [root@localhost ~]# cd ~/.ssh //切换到sshd服务的家目录下 [root@localhost .ssh]# ls id_ecdsa id_ecdsa.pub known_hosts //同时生成公钥和私钥文件 复制代码
2、将客户端的公钥文件拷贝到服务端。注意路径不要写错。
[root@localhost .ssh]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.72.129 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_ecdsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.72.129's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.72.129'" and check to make sure that only the key(s) you wanted were added. [root@localhost .ssh]# 复制代码
3、测试远程连接服务端时,是否免密码。
[root@localhost .ssh]# ssh 192.168.72.129 Last failed login: Wed Mar 23 01:32:09 CST 2022 from 192.168.72.10 on ssh:notty There were 13 failed login attempts since the last successful login. Last login: Tue Mar 22 23:57:20 2022 from 192.168.72.10 [root@192 ~]# 复制代码
6 TCP Wrappers 访问控制
TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers
的安全控制。它的主要功能就是控制谁可以访问,常见的程序有 rpcbind、vsftpd、sshd、telnet。
有些进程不受tcp_wrappers管理,例如 httpd、smb、squid等。
6.1 工作原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
保护机制实现方式:
- 方式1:通过tcpd程序对其他服务程序进行包装
- 方式2:由其他服务程序调用libwrap.so.*链接库
6.2 访问控制策略的配置文件
白名单:/etc/hosts.allow
黑名单:/etc/hosts.deny
示例:
1)设置白名单
[root@192 ~]# vim /etc/hosts.allow --------------- sshd:192.168.72.10,192.168.72.20 //允许这两个地址使用sshd服务进行访问 sshd:192.168.4.0/255.255.255.0 //允许该网段的所有地址使用sshd服务进行访问 复制代码
2)设置黑名单
[root@192 ~]# vim /etc/hosts.deny --------------- sshd:ALL //禁止所有地址使用sshd服务进行访问 sshd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.10 //禁止该网段的所有地址使用sshd服务进行访问,除了192.168.0.10 复制代码
小贴士:
- 白名单的优先级高于黑名单,如果一个地址既在白名单也在黑名单中,该地址是可以访问的。
- 实际工作中一般通过防火墙的方式来实现同样功能。