SSH服务详解(1)+https://developer.aliyun.com/article/1557873
2.1、查看、修改ssh服务中的配置文件(配置文件详解)
1、查看配置文件:
#pam认证模块 --》配置路径/etc/pam.d 这个目录下面存放的是每个需要认证的服务的配置,文件名就是服务名
UseDNS yes #是否将客户端主机名解析为ip
#此过程不顺利的话,会非常的慢,会影响登陆认证的速度,可以将其设置为no
[root@nginx-kafka01 etc]# vim /etc/ssh/sshd_config (修改文件,传递参数) Port 22 #修改默认监听端口(默认22端口) #AddressFamily any ListenAddress 0.0.0.0 ##表示可以连接的ip地址:0.0.0.0表示在本机上的任意ip都可以访问 #ListenAddress :: HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: ........ #LoginGraceTime 2m #设置为运行root用户登录:yes,no就是不允许用户使用root用户进行登录。 PermitRootLogin yes ##允许root用户登陆,默认为yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #PubkeyAuthentication yes ##是否开启公钥认证 #UsePAM yes #使用pam认证 .... # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes #允许密码验证登录 #UseDNS yes #是否将客户端主机名解析为ip
sshd_config --->sshd服务端的进程
ssh_config ----》ssh客户端命令的配置文件
2、配置文件(/etc/ssh/sshd/config)里面的详解:
denyusers:禁止登录的用户
maxauth tries 6:表示最多能输6次密码。
端口号不能随意更改:因为端口号的范围是从0到65535(2^16次)。
修改配置文件之后(永久修改),根据自己的需求进行修改,修改完成之后需要重启进程:(service sshd restart)
扩展:重启的过程就是kill之前的进程,然后重新启动一个新的进程。
3、重启sshd
三个方法选择其一:
[root@nginx-kafka01 ssh]# service sshd restart [root@nginx-kafka01 ssh]#systemctl restart sshd [root@nginx-kafka01 ssh]#restart sshd. service
===扩展===
tail -f secure 盯着文件的末尾看。
[root@nginx-kafka01 log]# grep "Failed password" secure 查看哪些登录失败的
lastlog:查看哪些登录的用户。
[root@nginx-kafka01 ssh]# lastlog 用户名 端口 来自 最后登陆时间 root pts/3 192.168.2.123 五 7月 29 16:12:45 +0800 2022 bin **从未登录过** daemon **从未登录过** adm **从未登录过**
如何查看哪些是开机启动的:systemctl list-unit-files
[root@sc-mysql ~]# systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled brandbot.path disabled systemd-ask-password-console.path static systemd-ask-password-plymouth.path static systemd-ask-password-wall.path static
其中 enabled 表示开机就可以启动的,
disabled是不能启动的。
static表示该服务与其他服务相关联,不能单独设置该服务的启动状态,为其他的需要使用的提供支持。
4、设置sshd服务开机自启
systemctl enable sshd 设置开机自启
[root@nginx-kafka01 ~]# systemctl enable sshd 设置开机自启 查看和设置默认的 target :systemctl get-default [root@nginx-kafka01 ~]# systemctl get-default 取得目前的 target(运行级别) multi-user.target [root@nginx-kafka01 ~]# cd /etc/systemd/system [root@nginx-kafka01 system]# ll 总用量 4 drwxr-xr-x. 2 root root 57 2月 26 18:01 basic.target.wants lrwxrwxrwx. 1 root root 46 2月 26 18:01 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service lrwxrwxrwx. 1 root root 57 2月 26 18:01 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service lrwxrwxrwx. 1 root root 37 2月 26 18:06 default.target -> /lib/systemd/system/multi-user.target
3、查看sshd服务是否启动
1、看进程
2、看端口
3、直接访问
4、看日志
3.1、 查看进程
ps -aux |grep ssh或者 ps -ef|grep ssh
1、查看进程 [root@localhost acl]# ps -ef |grep ssh 查看进程 root 6858 1 0 09:28 ? 00:00:00 /usr/sbin/sshd -D root 7379 6858 0 09:29 ? 00:00:00 sshd: root@pts/0 root 7398 6858 0 09:29 ? 00:00:00 sshd: root@pts/1 root 8020 7722 0 11:37 pts/1 00:00:00 grep --color=auto ssh [root@localhost acl]# pidof sshd 查看进程号,有就已经启动 7398 7379 6858
3.2 看端口(需要知道端口号)
lsof -i:端口号、netstat -anplut |grep 端口号
[root@localhost acl]# lsof -i:22 查看端口号的(需要知道端口号) COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 6858 root 3u IPv4 37869 0t0 TCP *:ssh (LISTEN) sshd 6858 root 4u IPv6 37878 0t0 TCP *:ssh (LISTEN) sshd 7379 root 3u IPv4 39374 0t0 TCP localhost.localdomain:ssh->192.168.119.1:50371 (ESTABLISHED) sshd 7398 root 3u IPv4 39493 0t0 TCP localhost.localdomain:ssh->192.168.119.1:50374 (ESTABLISHED) [root@localhost acl]# netstat -atpln |grep 22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6858/sshd tcp 0 36 192.168.119.137:22 192.168.119.1:50374 ESTABLISHED 7398/sshd: root@pts tcp 0 0 192.168.119.137:22 192.168.119.1:50371 ESTABLISHED 7379/sshd: root@pts tcp6 0 0 :::22 :::* LISTEN 6858/sshd
0.0.0.0:22表示在本机所有ip上监听22端口。
0.0.0.0:* 表示允许任意ip,任意端口客户端来连接。
3.3 直接访问
直接输入ssh +目标主机地址 的登录指令。
3.4 看日志
日志文件存放路径:/var/log/secure
/var/log:系统的所有日志存放位置,里面存放的文件为:
/var:-----variable 变量
/etc:--诸如此类,其他
log:日志
①bot里面存放启动,②messages里面存放普通,③secure存放与安全相关:存放④audit:安全审计服务
/var/log/secure 里会记录sudo执行的命令,可以查询到。
/var/log/audit 安全审计相关服务日志(audit.log)
auditctl
Linux的audit审计系统是提供系统中上事件的各种动作和事件,比如系统调用,文件修改,执行的程序。(只用于记录,不会进行安全问题组织)
audit的学习网站:https://zhuanlan.zhihu.com/p/337289840
扩展知识点:
查看命令属于哪个包:
root@sanchuang ~]# ①which netstat #找到命令的绝对路径 /usr/bin/netstat [root@sanchuang ~]# rpm -qf /usr/bin/netstat #查看这个绝对路径执行文件属于哪个包 net-tools-2.0-0.51.20160912git.el8.x86_64 ②或者yum provides netstat
所有的服务都是一个程序:
ssh中关闭服务,客户端连接还在 systemctl stop sshd。
4、故障排查
如果修改配置文件之后,重启也没生效的话,就需要进行排查。建议进行关闭selinux和防火墙。
4.1、selinux是什么
selinux是Linux系统里的一套安全机制,用来保护Linux系统的安全,会限制进程去做某些对安全有威胁的事情,永久修改selinux的策略为disable。
1、getenforce:查看selinux的状态,临时修改selinux的策略。
[root@nginx-kafka01 ssh]# getenforce Disabled (如果是enforcing,要修改为disable) [root@nginx-kafka01 ssh]# setenforce 0 #临时调整selinux的策略为宽容模式 [root@nginx-kafka01 ssh]# getenforce Permissive
2、永久修改selinux的策略:修改配置文件:
[root@nginx-kafka01 selinux]# cat /etc/selinux/config (可以在/etc/selinux/config文件下面进行永久修改) # 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 - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
4.2、关闭防火墙
修改完之后,需要关闭防火墙。systemctl disable firewalld或者service disable firewalld。
root@localhost ssh]# systemctl firewalld stop 关闭防火墙 Redirecting to /bin/systemctl stop firewalld.service
经常需要给openssh进行升级,如何保证Linux系统的安全?
yum update openssh openssh-clients openssh-server
三、ssh服务器加固
①修改端口
②禁用root用户
③ 升级openssh
④秘钥认证:需要进行配置
⑤密码认证:默认开启的:经常更换密码+设置复杂的密码
比如禁用root用户:
前提条件是PermitRootLogin no 允许用户登录设置为no:
指定root用户去xshell中登录sshd的登录不了(因为设置了不允许root用户登录),而在xshell中使用普通用户先登录进去之后,再切换成root用户登录之后就能登录的原因:因为使用普通用户登录xshell之后已经进入了Linux系统里面,再使用su -root切换到root用户的时候不需要进过ssh登录认证,因为它已经进入到bash进程中了。
四、ssh服务远程登录流程
1、登录流程图为:
ssh服务登录流程详解:一个客服端client(xshel)通过使用用户名(root)和密码(123456)进行登录的话,通过sshd服务进行登录认证:sshd服务会去sshd_config文件下面查看是否允许root用户登录,如果允许的话,就会去Linux系统中(server)的/etc/passwd 和/etc/shadow文件中查看输入的用户名和密码是否正确。本地登录访问的是Linux系统里面的/etc/passwd 和/etc/shadow,不需要进行ssh服务登录认证。
2、扩展:如何将一个连接到自己的ssh的普通用户踢出去:杀死其所对应的进程。
根据终端号找到对应的bash进程,然后kill进程。比如:
[root@nginx-kafka01 system]# w (查看到连接的用户) 11:37:20 up 2:12, 4 users, load average: 0.00, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 09:39 1:57m 0.01s 0.01s -bash root pts/0 192.168.2.118 09:25 0.00s 0.03s 0.00s w root pts/1 192.168.2.118 10:14 9:12 0.06s 0.06s -bash root pts/2 192.168.2.144 11:37 18.00s 0.00s 0.00s -bash [root@nginx-kafka01 system]# ps -aux|grep bash (查看bash进程:pts/2,对应的终端号是:8591) root 7852 0.0 0.2 115676 2048 pts/0 Ss 09:25 0:00 -bash root 7879 0.0 0.2 115668 2072 tty1 Ss+ 09:39 0:00 -bash root 8081 0.0 0.2 115756 2228 pts/1 Ss+ 10:14 0:00 -bash root 8591 0.0 0.2 115672 2080 pts/2 Ss+ 11:37 0:00 -bash root 8609 0.0 0.0 112824 988 pts/0 R+ 11:38 0:00 grep --color=auto bash [root@nginx-kafka01 system]# kill -9 8591 (杀死对应的进程),连接上的用户就会马上断开 [root@xieshan ~]# 连接断开的样子: Connection closed.
下一篇将会详细讲解ssh服务的两种登录方式。