SSH秘钥登录配置与系统日志管理

配置sshd服务

SSH Secure Shell )是一种能够以安全的方式提供远程登录的协议,也是目前远程管理 Linux 系统
的首选方式。在此之前,一般使用 FTP Telnet 来进行远程登录。但是因为它们以明文的形式在网络中传输账户密码和数据信息,因此很不安全,很容易受到黑客发起的中间人攻击,这轻则篡改传输的数据 信息,重则直接抓取服务器的账户密码。
sshd 服务的配置信息保存在 /etc/ssh/sshd_confifig 文件中。我们一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多以符号 # 开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的符号 #
sshd_config 文件中常见的重要参数:
#Port 22 # 默认的 sshd 服务端口,修改后可能无法启动 ssh ,执行 setenforce 0 临时关闭
SELinux
#ListenAddress 0.0.0.0 # 表示侦听所有地址,如果主机不需要从公网 ssh 访问,可以把监听地址
改为内网地址
#PermitRootLogin yes # 是否允许 root 登录
#PubkeyAuthentication yes # 是否允许使用密码验证
#PermitEmptyPasswords no # 是否允许空密码登录
#MaxAuthTries 6 # 最大密码尝试次数
ssh 命令连接远程主机:
ssh -p 目标主机 ssh 端口号 用户名 @ 远程主机 IP 地址 #-p 参数表示指定端口,如果目标主机没有自定义
ssh 使用的端口号可不使用该参数
sshd 配置秘钥登录的方法
1 . 制作密钥对
首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
[root@localhost ~] # ssh-keygen <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): < == Enter
Created directory '/root/.ssh' .
Enter passphrase (empty for no passphrase): < == 输入密钥锁码,或直接按 Enter 留空
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:
SHA256:eHhB2mVBG + dPvKkxh09eLlsXTFslX14LE + KDB2LRDTQ [email protected]
The key 's randomart image is:
+ --- [RSA 2048 ]---- +
|          += EOo. + o + |
|           . + . += *..o += |
|             . o.. + . oo + |
|              o .. . + ooo|
|               o S + * + .|
|                   o O o.|
|                      . + + |
|                           + .|
|                           . |
+ ---- [SHA256]----- +
如果设置了密钥锁码那么在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无
密码登录。
现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。 id_rsa 为私钥,
id_rsa.pub 为公钥。
2 . 在服务器上安装公钥
键入以下命令,在服务器上安装公钥:
[root@localhost ~] # cd .ssh
[root@localhost .ssh] # cat id_rsa.pub >> authorized_keys
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
[root@localhost .ssh] # chmod 600 authorized_keys
[root@localhost .ssh] # chmod 700 ~/.ssh
3 . 设置 SSH ,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 开启公钥验证
因为此时设置的是 root 用户通过密钥登录,所有留意 root 用户能否通过 SSH 登录
PermitRootLogin yes
完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
PasswordAuthentication no
最后重启 SSH 服务
systemctl restartsshd

操作

下载sshd
SSH秘钥登录配置与系统日志管理_第1张图片

查看ssh文件

 vim /etc/ssh/sshd_config

SSH秘钥登录配置与系统日志管理_第2张图片

开启ssh服务

xshell连接

SSH秘钥登录配置与系统日志管理_第3张图片

修改连接端口9999

SSH秘钥登录配置与系统日志管理_第4张图片

 重启服务

 去xshell连接失败,查看9999端口

 防火墙的问题,防火墙没有放行端口,给防火墙配置放行端口命令

SSH秘钥登录配置与系统日志管理_第5张图片

去xshell连接成功

linux日志简介

日志是记录系统运行过程中各种重要信息的文件,在系统运行过程中由各进程创建并记录。
日志的作用是记录系统的运行过程及异常信息,这些日志可以帮助我们对系统进行审核以及对一些故障 进行排查,一般这些日志存储在/var/log 目录中。常见日志文件及记录信息如下
/var/log/messages # 系统日志信息,这个文件相当的重要,几乎系统发生的错误讯息 (
者是重要的信息 ) 都会记录在这个文件中;如果系统发生莫名的错误时,这个文件是一定要查阅的日志文件之一。
/var/log/secure # 用户认证相关的安全事件信息,基本上,只要牵涉到『需要输入账号密码』的软件,那么当登入时 ( 不管登入正确或错误 ) 都会被记录在此文件中。包括系统的 login 程序、图形接口登入所使用的 gdm 程序、 su, sudo 等程序、还有网络联机的 ssh, telnet 等程序,登入信息都会被记载在这里
/var/log/maillog # 与邮件相关的日志文件
/var/log/cron # 与定时任务相关的日志
/var/log/boot.log # 与系统启动有关的日志,开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在/var/log/boot.log 里面!不过这个文件只会存在这次开机启动的信息,前次开机的信息并不会被保留下来!
/var/log/lastlog : 可以记录系统上面所有的账号最近一次登入系统时的相关信息。该文件无法通过 cat等命令查看,可通过lastlog 命令查看。
/var/log/wtmp, /var/log/btmp # 这两个文件可以记录正确登入系统者的帐户信息 (wtmp) 与错
误登入时所使用的帐户信息 (btmp) 该文件无法通过 cat 等命令查看,可通过 last 命令查看。
last 命令:查看正确登录系统的用户
        第一列:用户名
        第二列:终端位置,pts/0 ( 伪终端 ) 意味着从 SSH telnet 的远程连接的用, .tty(teletypewriter) 意味着直接连接到计算机或者本地连接的用户
        第三列:登录的 IP 或终端名,用户通过本地终端连接则显示空,如果是重启活动,会显示内核版本
        第四列:登录开始时间
        第五列:结束时间
        第六列:持续时间,still logged in 表示仍然在线
lastb :查看登录失败的用户

rsyslog服务

rsyslog 是一个开源工具,它被广泛应用于 Linux 系统,它除了可以将收集的日志信息保存在本地外还可以通过TCP UDP 等协议将日志消息转发到其他主机。
rsyslog 的主配置文件为 /etc/rsyslog.conf
指定日志采集规则
格式:日志类型 . 日志级别 执行动作
常见日志类型分为:
auth # 主要与认证 / 授权有关的机制,例如 login, ssh, su
authpriv # auth 类似,但记录较多账号私人的信息
cron # 定时任务相关
kern # 内核产生的日志
mail # 邮件收发信息
lpr # 打印产生的日志
user # 用户程序产生的日志信息
日志级别用来指出消息的优先等级,即消息的重要程度。其优先级别如下(数字等级越小,优先级越高,消息越重要,但记录的信息越少):
0 emerg (紧急):会导致系统不可用的情况,一般是硬件出现问题
1 alert (警告):必须马上采取措施解决的问题。
2 crit (严重):严重的错误。
3 err (错误):运行出现错误。
4 warning (提醒):可能影响系统功能,需要提醒用户的重要事件。
5 notice (注意):不会影响正常功能,但是需要注意的事件。
6 info (信息):一般信息。
7 debug (调试):程序或系统调试信息等。
除此之外, " 日志类型 " " 日志级别 " 可以使用星号( * )代表所有,因此 *.* 就表示来自所有类型的所有级别的消息。
        "执行动作 " 字段则用来定义如何处理接收到的消息,可以指定如下几项内容:
        /PATH/FILENAME 将消息存储到指定的文件中,文件必须以斜线( / )开头的绝对路径命名;
        :omusrmsg:USERNAME 将消息发送给指定的已经登录的用户;
        @HOSTNAME 将消息转发到指定的日志服务器;一个 @ 表示通过 UDP 发送,两个 @ 表示通过 TCP 发送
        :omusrmsg:* 将消息发送给所有已经登录的用户。
*.info;mail.none;authpriv.none;cron.none :由于 mail, authpriv, cron 等类别产生的讯息
较多, 且已经写入底下的几个文件中,因此在 /var/log/messages 里面就不记录这些内容。除此之外的其他讯息都写入/var/log/messages
预设规则解读
authpriv.* :认证方面的讯息均写入 /var/log/secure 文件;
mail.* :邮件方面的讯息则均写入 /var/log/maillog 文件;
cron.* :计划任务均写入 /var/log/cron 文件;
*.emerg :当产生最严重的错误等级时,将该等级的讯息广播给所有在系统登录的账号,要这么做的原因是希望在线的用户能够赶紧通知系统管理员来处理错误。
uucp,news.crit uucp 是早期 Unix-like 系统进行数据传递的通讯协议,后来常用在新闻组的
用途中。 news 则是新闻组。当新闻组方面的信息有严重错误时就写入 /var/log/spooler 文件中;
local7.* :将本机开机时应该显示到屏幕的讯息写入到 /var/log/boot.log 文件中;
自定义日志采集格式
$template 自定义格式名 , "%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
"%timegenerated% # 显示日志时间
%FROMHOST-IP% # 显示主机 IP
%syslogtag% # 日志记录目标
%msg% # 日志内容
\n # 换行
日志类型 . 日志级别 执行动作 ; 自定义格式名 # 在指定的日志中采用自定义格式
$ActionFileDefaultTemplate 自定义格式名 # 修改系统默认日志采集格式为自定义格式
# 根据客户端的 IP 单独存放主机日志在不同目录,设置远程日志存放路径及文件名格式
$template Remote, "/var/log/syslog/%fromhost-ip%/%fromhost-ip%_% $YEAR %-% $MONTH %-
% $DAY %.log"
# 排除本地主机 IP 日志记录,只记录远程主机日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
# 注意此规则需要在其它规则之前,否则配置没有意义,远程主机的日志也会记录到 Server 的日志文件中
# 忽略之前所有的日志,远程主机日志记录完之后不再继续往下记录
& ~
journalctl :日志查看工具
-n 3 ## 查看最近 3 条日志
-p err ## 查看错误日志
-o verbose ## 查看日志的详细参数
--since ## 查看从什么时间开始的日志
--until ## 查看到什么时间为止的日志
_PID = pid # 只输出指定 PID 号码的信息
_UID = uid # 只输出指定 UID 号码的信息
如何使用 systemd-journald 保存系统日志,默认 systemd-journald 是不保存系统日志到硬盘的
那么关机后再次开机只能看到本次开机之后的日志,关机之前的日志时无法查看的,想要保存日志需要进行如下操作
mkdir /var/log/journal
chgrp systemd-journal /var/log/journal
chmod g + s /var/log/journal
killall -1 systemd-journald
ls /var/log/journal

日志切割(轮循)

    日志切割指的是当应用程序或操作系统的日志文件满足设定的触发条件,对其进行切割 / 分割处理。切割后的日志会在原有日志的基础上多出一个新的日志文件,且后续产生的日志也会被写入到新的日志文件中,直到下一次满足设定的触发条件时。
    一般情况下,我们习惯于将各种应用程序 (Web 端程序、应用服务、数据库等 ) 软件部署在 Linux 操作系统上,但众多软件部署后运行时会产生对应的日志记录,以便于出现故障后能够及时排查问题原因。
    但久而久之,随着时间的推长,应用程序的日志文件可能会变得很庞杂,这对于运维、管理、故障排查等来说非常不方便,因此,及时对日志进行定期切割和清理时非常有必要的。
Linux 操作系统上切割日志可以通过 logrotate 来实现。
相比其他日志切割软件来看,使用 logrotate 有以下优点:
  • logrotate Linux操作系统上自带的一款开源的日志切割软件,因此你无需安装
  • logrotate 自身已经集成进操作系统的定时任务中,因此无需再配置定时任务
  • logrotate 自身支持日志压缩
logrotate 的全局配置文件为 /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly # 表示每周轮转一次,常见用法有 daily weekly monthly yearly
# keep 4 weeks worth of backlogs
rotate 4 # 保留的日志副本数
# create new (empty) log files after rotating old ones
create # 日志轮转时创建一个新的日志文件用来接受新产生的日志
# use date as a suffix of the rotated file
dateext # 切割日志时使用日期作为文件后缀
# uncomment this if you want your log files compressed
#compress # 轮转后的日志是否进行压缩
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d # 日志轮转时会加载 /etc/logrotate.d/ 目录下的所有配置文件
ps :该目录下的配置必须在操作系统中有 rpm 包存在)
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
        monthly
        create 0664 root utmp
                minsize 1M
        rotate 1
}
/var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
}
#/var/log/btmp /var/log/wtmp 两个日志因为在操作系统中没有对应的 rpm 包,因此被当作 "
" 日志,配置在 /etc/logrotate.conf 全局配置中。
# system-specific logs may be also be configured here.
倘若操作系统上新部署了一项应用程序,或需要对其他的日志文件配置切割规则,你可以自定义
logrotate 的配置文件使其生效。这里以 /var/log/audit/audit.log 日志为例
[root@hostname ~] # cat /etc/logrotate.d/audit
/var/log/audit/*.log {
        missingok # 日志切割时缺少该日志不会报错
        weekly # 每周切割一次
        rotate 10 # 切割后最多保留 10 个文件
        size + 100M # 当前日志容量超过 100M , 立即进行日志切割
        compress # 切割后的日志进行压缩
        dateext # 切割后的日志以时间 ' 年月日 ' 为后缀
        notifempty # 日志为空时不进行切割
        create 0600 root root # 切割时创建一个新日志文件 , 模式为 0600, 日志属组为 root
root
}
logrotate --debug --force /etc/logrotate.d/audit # 测试配置文件是否合法
        -v :启动显示模式,会显示日志切割时的运作过程
        -f :不论是否符合配置文件的数据,强制登录档进行切割的动作!
给日志文件添加 a 属性后日志切割时的设置
[root@localhost ~] # cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure/var/log/spooler
{
sharedscripts # 使用脚本
prerotate # 在日志切割之前要做的事
/usr/bin/chattr -a /var/log/messages # 执行了 chattr -a
endscript # 脚本结束
sharedscripts # 使用脚本
postrotate # 在日志切割之后要做的事
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2 > /dev/null || true # 重启rsyslog
/usr/bin/chattr + a /var/log/messages # 执行了 chattr +a
endscript # 脚本结束
}

你可能感兴趣的:(linux,运维,服务器)