
基于Ubuntu搭建HomeNAS 续章
基于Ubuntu搭建HomeNAS(五、安全防护)
安全的概念:
1、收紧安全措施有可能达到使系统无法使用的程度。安全性与便利性需要得到平衡。诀窍在于建立一个安全且有用的系统。
2、最大的威胁是(并且一直都会是)用户。
3、最小权限原则:系统的每一部分应该只能访问到它确实需要的东西,除此之外的则不可以。
4、纵深防御:多个独立的层次能带来更好的安全性。当一层防护被攻破时,另一层应该能够阻止攻击。
5、保持一点点的偏执和多疑。如果有件事看起来太好了,不像是真的,那可能确实如此。
6、永远无法令系统 100% 安全,除非把机器从网络上断开,关掉电源,锁进保险柜,用混凝土封住并不再使用它。
7、为失败做好准备。预先为安全措施被攻破的情况制定可供执行的计划。
本章节主要内容参考自Debian安全指南和Arch Linux安全。
Debian安全指南:https://www.debian.org/doc/manuals/securing-debian-manual/ch04s11.zh-cn.html
Arch Linux安全:https://wiki.archlinuxcn.org/wiki/%E5%AE%89%E5%85%A8
执行下列操作前,先给系统用户做个检查。检查是否存在空口令和root权限的账号,确认是否存在异常账号,确认UID为零的账号只有root账号。
操作步骤:
查看root权限账号,使用命令:
awk -F: '($3==0)' /etc/passwd //查看UID为零的账号。
查看空口令账号,使用命令:
awk -F: '($2=="")' /etc/shadow //查看空口令账号。
加固空口令账号,使用命令:
passwd <用户名> //为空口令账号设定密码。
5.1 配置高强度密码策略
为了确保系统的安全性,建议设置的口令复杂度策略为:口令最小长度不小于8,至少包含大写字母、小写字母、数字和特殊字符中的三种。
安装 PAM 的 cracklib 模块,cracklib 能提供额外的密码检查能力。
sudo apt install libpam-cracklib
修改文件“/etc/pam.d/common-password”。 一旦修改,策略会马上生效。
sudo vim /etc/pam.d/common-password
找到文件中的以下内容:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
添加参数“minlen”、“dcredit”、“ucredit”、“lcredit”、“ocredit”。如果文件中已有这些参数,直接修改参数值即可,参数说明如表1所示。
示例:
password requisite pam_cracklib.so retry=3 minlen=9 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=3
5.2 用户连续登陆失败锁定
在3次登录尝试失败后账户将被锁定至少15分钟,或者由管理员将其解锁。
在/etc/pam.d/common-auth中添加如下绿色字体内容,必须按下面顺序添加,命令:
sudo vim /etc/pam.d/common-auth
插入内容:
.
.
.
# here are the per-package modules (the "Primary" block)
auth required pam_faillock.so preauth audit silent deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth [success=1 default=ignore] pam_unix.so nullok
# here's the fallback if no module succeeds
# BEGIN ANSIBLE MANAGED BLOCK
auth [default=die] pam_faillock.so authfail audit deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth requisite pam_deny.so
.
.
.
参数解析:
audit //如果用户不存在,则把该用户名记录到系统日志中。
Silent //不打印信息性的消息
deny=3 //用户连续认证失败次数超过3则锁定
fail_interval=900 //间隔时间的长度,在这个时间段内连续的
unlock_time=900 //锁定后n秒后,访问将被重新启用,在没有设置faillock的情况下,不会重新启用。
even_deny_root //Root账户和普通账户一样可以被锁定。
root_unlock_time=900 //在root账户被锁定后, 允许在n秒后访问该账户。
参数解析来源/etc/security/faillock.conf文件
上述参数可以按需添加,如需全部添加,可以参考下面格式:
示例:
auth required pam_faillock.so preauth audit silent deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
接着编辑/etc/pam.d/common-account,命令:
sudo vim /etc/pam.d/common-account
在文件末尾插入内容:
# end of pam-auth-update config
account required pam_faillock.so
常用操作命令:
查看所有用户的尝试失败登录次数
sudo faillock
主要看faillock命令,显示的valid值,v表示有效,i表示无效。
查看指定用户(test用户)
sudo faillock --user test
解锁指定用户账户(test用户)
sudo faillock --user test --reset
解锁所有用户
sudo faillock --reset
重启系统也能解锁所有用户。
5.3 禁止root用户密码登陆
建议是通过Cockpit Web管理面板禁止root用户密码登陆,平时保持其处于禁用状态,如有需要时可以很方便就通过此处开启,用完即随手关闭。
通过Cockpit Web管理面板-账户-root用户-选项-禁用交互式密码,打上勾表示禁止root用户使用密码登陆。
5.4 限制指定用户外网登陆
使用pam_access模块来限制ssh登录源,ssh服务使用的服务名为sshd,pam_access模块使用的配置文件路径为/etc/security/access.conf
在ssh服务中添加pam_access模块
# 切换到pam.d目录,备份远文件
cd /etc/pam.d && sudo cp sshd sshd.old
# 使用vi编辑器编辑sshd文件
sudo vi sshd
# 添加pam_access模块
account required pam_access.so
在pam配置文件中添加限制条目,条目的格式如下:
+/-:users:origins
+/- :+号表示授权访问,-号表示拒绝访问
users :users表示限制的用户或用户组,多个用户或组时使用空格分隔
origins:origins表示来源,可以是本地主机名、ip地址/段,域名,有几个特殊关键词:ALL表示所有,LOCAL表示本地,EXCEPT表示除了
当有多条规则时,执行的顺寻是自上而下
# 切换到配置文件目录,备份原文件
cd /etc/security && sudo cp access.conf access.conf.old
# 编辑配置文件
sudo vi access.conf
# 在文件最后添加一行,只允许用户kim通过192.168.0.90地址登录
+:kim:192.168.0.90
-:kim:ALL
5.5 限制指定用户夜间登陆
pam_time模块用来限制cockpit登录的时间,cockpit服务使用的服务名为cockpit,pam_time模块使用的配置文件路径为/etc/security/time.conf,在需要对服务器进行维护的时候,或者是在特定时间禁止用户登录服务器。
1、在cockpit服务中添加pam_time模块,打开文件:
sudo vim /etc/pam.d/cockpit
添加pam_time模块:
#%PAM-1.0
auth required pam_sepermit.so
auth substack common-auth
auth optional pam_ssh_add.so
# Limit login time
account required pam_time.so
.
.
.
2、在pam配置文件中添加限制条目,条目的格式如下:
services;devices;users;times
services:可以使用的services都包含在/etc/pam.d目录中
devices :可以使用的device有:*表示所有设备,!ttyp*表示除虚拟设别外的所有设备,ttyp*远程登录设备
users :限制的用户或组,使用列表时,各元素之间使用符号|分隔
time :限制的时间,由2段组成,第一段是首字母大写的星期缩写,第二段是时间段
星期缩写:Mo、Tu、We、Th、Fr、Sa、Su
特殊缩写:Wk工作日、Wd周末、Al每周的每天、WdSa周日、WdSu周六、WkMo除周一外的工作日
3、编辑配置文件
sudo vim /etc/security/time.conf
4、在文件末尾添加一行,允许用户root和test在每天凌晨0点到8点外的时间登录
cockpit;*;root|test;!A10000-0800
5.7 限制用户同时登陆数量
在大多数Linux发行版中,有一个叫做limit.conf的文件,你可以定义一个用户或用户组的最大并发SSH会话数量。如果特定用户试图进入系统的次数超过允许的登录次数,他/她将被拒绝访问。
操作步骤,编辑/etc/security/limits.conf文件:
sudo vim /etc/security/limits.conf
在文件末行添加下面内容:
要限制特定用户(例如ostechnix)的并发 SSH 会话数,请在末尾添加以下行:
ostechnix hard maxlogins 2
如果要限制一组用户的连接数,请添加以下行:
@mygroup hard maxlogins 3
将@mygroup替换为您的组名。在这种情况下,mygroup 中的所有用户都不能登录超过3次。
如果要限制系统中所有用户(全局)的 SSH 会话,请改为添加以下行:
* hard maxlogins 3
这里,星号表示全局(即系统中的所有用户)。定义每个用户/组或整个系统的最大会话数后,保存并关闭文件。
如需限制系统中Cockpit Web管理面板用户同时登陆数量,可以按如下配置添加内容:
sudo vim /etc/pam.d/cockpit
插入下列内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):
#%PAM-1.0
auth required pam_sepermit.so
auth substack common-auth
auth optional pam_ssh_add.so
# Limit login time
account required pam_time.so
# Set up user limits from /etc/security/limits.conf.
session required pam_limits.so
.
.
.
保存后退出即刻生效。
5.6 限制用户SU
限制能su到root的用户。操作步骤
使用命令:
sudo vim /etc/pam.d/su
修改配置文件,在配置文件中添加行。例如,只允许sudo组用户su到root,则添加
auth required pam_wheel.so group=sudo
添加后如下所示:
#
# The PAM configuration file for the Shadow `su' service
#
auth required pam_wheel.so group=sudo
# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so
.
.
.
5.8 用户登陆邮件通知告警
通过 PAM 模块,就可以实现用户登录,root 权限获取时,通过邮件等方式进行通知。以实现,预先知道,预先警惕的目标,降低受影响的范围。以下是通过 PAM 模块实现的邮件通知用户登录的功能。
1、以管理员身份登录虚拟机,并切换成 root 用户。
2、新建脚本,命令:
sudo vim /etc/pam.d/login-notifiy.sh
(该脚本可以存放在任意位置,但是需要将后续的路径指定好即可),内容如下:
#!/bin/bash
[ "$PAM_TYPE" = "open_session" ] || exit 0
{
echo "User: $PAM_USER"
echo "Ruser: $PAM_RUSER"
echo "Rhost: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Date: `date`"
echo "Server: `uname -a`"
} | mail -s "`hostname -s` $PAM_SERVICE login: $PAM_USER" user@yourdomain.com
脚本中的user@yourdomain.com修改为你要接收通知的邮箱地址。
3、编辑文件
sudo vim /etc/pam.d/common-session
4、在文件最后追加一行:
session optional pam_exec.so debug /bin/bash /etc/pam.d/login-notifiy.sh
5、保存并退出。
至此,每一个用户登录都会发邮件通知给收件人,内容包括用户名以及登录的 IP 地址信息。如果遇到陌生 IP,那么就要注意,该主机是否正在遭受攻击。
注意:来源教程原文上脚本名称前后不一致,会导致脚本执行出错,如是按来源教程操作,记得修改脚本名称,使其前后名称一致。
5.9 超时自动注销活动状态
设置系统登录后,连接超时时间,增强安全性。操作步骤,使用命令:
sudo vim /etc/profile
修改配置文件,在文件末行添加下列内容:
# 超时自动退出
TMOUT=180
即超时时间为三分钟。
5.10 记录所有用户的登录和操作日志
通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。
操作步骤
sudo vim /etc/profile
打开配置文件,在配置文件末行输入以下内容:
# 记录所有用户的登录和操作日志
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
运行命令加载配置生效:
source /etc/profile
注意:/var/log/history 是记录日志的存放位置,可以自定义。
通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。
5.11 禁止SSH服务开机自启动
为了系统的安全起见,建议SSH服务在有需要用的时候通过Cockpit Web面板开启,平常则处于关闭状态。开启路径:Cockpit-服务-ssh.service-启动
关闭ssh服务开机自动启动,命令:
sudo systemctl disable ssh
常用操作:
设置开机自动启动ssh服务,命令:
sudo systemctl enable ssh
单次开启ssh,命令:
sudo systemctl start ssh
单次关闭ssh,命令:
sudo systemctl stop ssh
5.11 安装防火墙
推荐使用firewalld防火墙的理由是,Cockpit Web管理面板搭配firewalld防火墙可以提供一个可视化的防火墙管理界面,对新手友好。
Ubuntu 22.04 已UFW默认安装。最好只使用一个防火墙。所以禁用 UFW:
sudo ufw disable
然后更新系统包:
sudo apt update
下一步是从apt存储库安装firewalld
sudo apt -y install firewalld
检查运行状态
sudo systemctl status firewalld
在终端输出的内容中将看到:
Active: active (running)
安装完成之后默认启动运行,需关闭之后进入cockpit配置规则。
关闭firewalld
sudo systemctl stop firewalld
登陆cockpit-网络-防火墙-打开防火墙-添加新区-信任级别- public,允许的地址-整个子网
5.12 安装自动封锁软件
第 1 步 — 安装 Fail2ban
Fail2ban 在 Ubuntu 的软件存储库中可用。首先以非根用户身份运行以下命令来更新您的软件包列表并安装 Fail2ban:
sudo apt update
sudo apt install fail2ban -y
Fail2ban 安装后会自动设置后台服务。但是,默认情况下它是禁用的,因为它的某些默认设置可能会导致不良影响。您可以使用以下systemctl命令验证这一点:
systemctl status fail2ban.service
终端中输出的内容:
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-11-22 09:03:07 CST; 1min 5s ago
Docs: man:fail2ban(1)
Main PID: 52196 (fail2ban-server)
Tasks: 5 (limit: 4534)
Memory: 12.9M
CPU: 166ms
CGroup: /system.slice/fail2ban.service
└─52196 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
第 2 步 – 配置 Fail2ban
Fail2Ban的配置文件:/etc/fail2ban/
Fail2Ban的安装目录:/usr/share/fail2ban/
Fail2Ban日志文件:/var/log/fail2ban.log
达到阈值之后的执行Fail2Ban的动作的配置文件:/etc/fail2ban/action.d/
包含Fail2Ban所有的过滤规则:/etc/fail2ban/filter.d/
fail2ban 服务将其配置文件保存在该/etc/fail2ban目录中。在本教程中,您将创建jail.local. 你可以通过复制来做到这一点jail.conf:
sudo cp /etc/fail2ban/jail.{conf,local}
现在您可以开始进行配置更改。vim在或您喜欢的文本编辑器中打开文件:
sudo vim /etc/fail2ban/jail.local
当您滚动文件时,本教程将查看您可能想要更新的一些选项。位于文件顶部附近部分下的设置[DEFAULT]将应用于 Fail2ban 支持的所有服务。在文件的其他地方,有用于[sshd]和用于其他服务的标头,其中包含将在默认设置之上应用的特定于服务的设置。
#全局设置
[DEFAULT]
#此参数标识应被禁止系统忽略的 IP 地址。默认情况下,这只是设置为忽略来自机器本身的流量,这样您就不会填写自己的日志或将自己锁定。
ignoreip = 127.0.0.1/8 ::1
#此参数设置禁令的长度,以秒为单位。默认值为-1,表示将永久禁止IP地址,设置值为1h,则禁止1小时。
bantime = -1
#此参数设置 Fail2ban 在查找重复失败的身份验证尝试时将关注的窗口。默认设置为 1d ,这意味着软件将统计最近 1 天内的失败尝试次数。
findtime = 1d
#这设置了在禁止之前在窗口内允许的失败尝试次数。
maxretry = 5
#此条目指定 Fail2ban 将如何监视日志文件。设置auto意味着 fail2ban 将尝试pyinotify, 然后gamin, 然后基于可用的轮询算法。inotify是一个内置的 Linux 内核功能,用于跟踪文件何时被访问,并且是Fail2ban 使用pyinotify的 Python 接口。
backend = auto
#这定义了是否使用反向 DNS 来帮助实施禁令。将此设置为“否”将禁止 IP 本身而不是其域主机名。该warn设置将尝试查找主机名并以这种方式禁止,但会记录活动以供审查。
usedns = warn
#如果将您的操作配置为邮件警报,这是接收通知邮件的地址。
destemail = root@localhost
#发送者邮件地址
sender = root@<fq-hostname>
#这是用于发送通知电子邮件的邮件传输代理。
mta = mail
#“action_”之后的“mw”告诉 Fail2ban 向您发送电子邮件。“mwl”也附加了日志。
action = %(action_mw)s
#这是实施 IP 禁令时将丢弃的流量类型。这也是发送到新 iptables 链的流量类型。
protocol = tcp
##这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
banaction = firewallcmd-ipset
[SSH]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:
sudo systemctl restart fail2ban
常用命令:
#启动
systemctl start fail2ban
#停止
systemctl stop fail2ban
#开机启动
systemctl enable fail2ban
#查看被ban IP,其中sshd为名称
fail2ban-client status sshd
#删除被ban IP
fail2ban-client set sshd unbanip 192.168.111.111
#查看日志
tail /var/log/fail2ban.log
设置邮件通知告警
配置中文邮件格式(可选项,默认为英文):
sudo cp /etc/fail2ban/action.d/mail-whois.{conf,local}
然后编辑mail-whois.local文件,
sudo vim /etc/fail2ban/action.d/mail-whois.local
替换成下面的内容:
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
#
[INCLUDES]
before = mail-whois-common.conf
[Definition]
# bypass ban/unban for restored tickets
norestored = 1
# Option: actionstart
# Notes.: command executed on demand at the first ban (or at the start of Fail2Ban if actionstart_on_demand is set to false).
# Values: CMD
#
actionstart = printf %%b "你好!\n
Fail2ban监视<name> 服务已成功启动。\n
敬请注意!\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: 在 <fq-hostname> 服务器上启动" <dest>
# Option: actionstop
# Notes.: command executed at the stop of jail (or at the end of Fail2Ban)
# Values: CMD
#
actionstop = printf %%b "你好!\n
Fail2ban监视<name> 服务已被停止。\n
敬请注意!\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: 在 <fq-hostname> 服务器上停止" <dest>
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "警告!!!\n
攻击者IP:<ip>\n
被攻击机器名:`uname -n` \n
被攻击机器IP:`/bin/curl ifconfig.co` \n
攻击服务:<name> \n
攻击次数:<failures> 次 \n
攻击方法:暴力破解,尝试弱口令.\n
该IP:<ip>已经被Fail2Ban加入防火墙黑名单,屏蔽时间<bantime>秒.\n\n
以下是攻击者 <ip>信息 :\n
`/bin/curl https://ip.useragentinfo.com/json?ip=<ip>`\n\n
Fail2Ban邮件提醒\n\n "|/bin/mailx -s "<fq-hostname>服务器:<name>服务疑似遭到<ip>暴力攻击。" <dest>
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban =
[Init]
# Default name of the chain
#
name = default
# Destination/Addressee of the mail
#
dest = root
说明
通过curl ifconfig.co获取服务器的外网IP地址,方便知道哪台机报出来的告警。
通过curl https://ip.useragentinfo.com/json?ip =<ip> 查询获取攻击者的IP信息。
不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:
sudo systemctl restart fail2ban
配置完成后效果:
服务被攻击通知
5.14 安装病毒防护软件
ClamAV 是一个开源的防病毒软件,可用于检测木马,病毒,恶意软件和其他恶意威胁。适用于 Linux、macOS 和 Windows 平台。
基于Ubuntu搭建HomeNAS(六、存储管理)
6.1 硬盘管理
通过Cockpit Web管理面板进行管理。
6.2 软Raid管理
通过Cockpit Web管理面板进行管理。
6.3 硬盘自动休眠
hdparm
参考:https://manpages.ubuntu.com/manpages/jammy/man8/hdparm.8.html
6.4 硬盘健康监测
SMART是现代硬盘驱动器中的一个系统,旨在报告可能表明即将发生故障的情况。smartmontools是一个免费的软件包,可以监控 SMART 属性并运行硬盘自检。
安装smartmontools:
sudo apt install smartmontools
检查驱动器的SMART功能
要确保您的驱动器支持 SMART,请键入:
sudo smartctl -i /dev/sda
其中 /dev/sda 是你的硬盘。这将为您提供有关驱动器的简要信息。最后两行可能如下所示:
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
启用SMART
如果您的驱动器未启用 SMART,您可以通过键入以下内容来启用它:
sudo smartctl -s on /dev/sda
检查硬盘整体健康状况
sudo smartctl -H /dev/sda
此命令应返回:
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
如果它没有返回 PASSED,您应该立即备份所有数据。您的硬盘驱动器可能出现故障。
测试驱动器
您可以在安装驱动器时运行任何类型的测试,尽管性能可能会有所下降。可以在驱动器上进行三种类型的测试:
短
扩展(长)
传输
要查找执行每个测试所需时间的估计值,请键入:
sudo smartctl -c /dev/sda
最有用的测试是扩展测试(长)。您可以通过键入以下内容来启动测试:
sudo smartctl -t long /dev/sda
结果
您可以通过键入以下内容来查看驱动器的测试统计信息:
sudo smartctl -l selftest /dev/sda
要显示 IDE 驱动器的详细 SMART 信息,请键入:
sudo smartctl -a /dev/sda
要显示 SATA 驱动器的详细 SMART 信息,请键入:
sudo smartctl -a -d ata /dev/sda
注意:这也适用于通过 SCSI 堆栈运行并显示为 /dev/sdX 的新内核中的 IDE 驱动器
部分字段的含义
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME
1 Raw_Read_Error_Rate 读取错误率
3 Spin_Up_Time 起转时间
4 Start_Stop_Count 启动停止次数
5 Reallocated_Sector_Ct 重新分配扇区计数
7 Seek_Error_Rate 寻道错误率
9 Power_On_Hours 通电时间
10 Spin_Retry_Count 起转重试次数
11 Calibration_Retry_Count 重新校准重试次数
12 Power_Cycle_Count 启动<->关闭循环次数
192 Power-Off_Retract_Count 断电磁头缩回计数
193 Load_Cycle_Count 磁头加载/卸载循环计数
194 Temperature_Celsius 温度
196 Reallocated_Event_Count 在分配扇区物理位置事件计数(与坏道无关)
197 Current_Pending_Sector 当前等待中扇区数(状态存疑/不稳定-等待后续判断)
198 Offline_Uncorrectable 无法修正的扇区总数
199 UDMA_CRC_Error_Count UltraDMA CRC错误计数
200 Multi_Zone_Error_Rate 写入错误率
使用示例:
# 监测硬盘1
/dev/sda -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M exec /usr/share/smartmontools/smartd-runner
# 监测硬盘2
/dev/sdb -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M exec /usr/share/smartmontools/smartd-runner
# 测试邮件通知
/dev/sda -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M test
上述例子来源于/etc/smartd.conf,以下内容为文件原文:
# 第一个 ATA/SATA 或 SCSI/SAS 磁盘。 监控所有属性,启用
# 自动在线数据收集,自动属性自动保存,并
# 每天凌晨 2-3 点开始短的自检,长的自检
# 周六凌晨3-4点之间。
#/dev/sda -a -o on -S on -s (S/./././02|L/././6/03)
# 监控SMART状态、ATA错误日志、自检日志,并跟踪
# 所有属性的变化,除了属性 194
#/dev/sdb -H -l error -l selftest -t -I 194
# 监控所有属性,除了正常化的温度(通常是194)。
# 但跟踪温度变化 >= 4 摄氏度,报告温度
# >= 45 摄氏度和 Reallocated_Sector_Ct (5) 原始值的变化。
# 在SMART故障或温度>=55摄氏度时发送邮件。
#/dev/sdc -a -I 194 -W 4,45,55 -R 5 -m admin@example.com
如需可视化的SMART数值界面,请在Docker容器中部署Scrutiny,该容器可以提供可视化界面。Scrutiny需搭配smartmontools工具才能正常使用,安装完smartmontools之后,无需按照上面的复杂操作配置smartmontools即可搭配Scrutiny使用,上面的smartmontools各类配置操作,仅是适用于无需可视化界面情况下的。
Scrutiny 是一种硬盘驱动器运行状况仪表板和监控解决方案,将制造商提供的 SMART 指标与实际故障率相结合。用于 smartd SMART 监控的 WebUI
项目地址:https://github.com/AnalogJ/scrutiny
安装教程:https://www.tauceti.blog/posts/easy-hard-disk-health-monitoring-with-scrutiny-and-smart/
安装教程:https://blog.csdn.net/wbsu2004/article/details/124095004
Scrutiny
6.5 安装联合文件系统
mergerfs是一个联合文件系统,旨在简化跨众多商品存储设备的文件存储和管理。它类似于mhddfs、unionfs和aufs。
项目地址:https://github.com/trapexit/mergerfs
基于Ubuntu搭建HomeNAS(七、Docker服务)
7.1 安装Docker
在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。(推荐通过存储库安装,方便后期版本升级。)
A、设置存储库
1.更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
2.添加 Docker 的官方 GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
3.使用以下命令设置存储库:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
B、安装 Docker 引擎
1.更新apt包索引:
sudo apt-get update
2.安装 Docker Engine、containerd 和 Docker Compose。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
3.hello-world通过运行镜像验证 Docker Engine 安装是否成功 :
sudo docker run hello-world
查看Docker版本命令:
docker version
查看Docker Compose版本命令:
docker compose version
7.2 容器管理
Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。
请将路径/srv/volume_1/data/docker/portainer替换为您的,此路径存储Portainer配置文件。
sudo docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/volume_1/data/docker/portainer:/data portainer/portainer-ce:latest
安装完成后,可以通过打开 Web 浏览器并转到Portainer管理界面:
http://localhost:9000或https://localhost:9443
7.3 反向代理
Nginx Proxy Manager 是用于管理 Nginx 代理主机的 Docker 容器,具有简单、强大的界面。它使您可以轻松地转发到您在家里或其他地方运行的网站,包括免费的 SSL,而无需对 Nginx 或 Letsencrypt 了解太多。
官网:https://nginxproxymanager.com
安装教程:https://blog.csdn.net/wbsu2004/article/details/122533684
https://blog.csdn.net/wbsu2004/article/details/126698539?spm=1001.2014.3001.5502
泛解析说明:https://cloud.tencent.com/document/product/302/9073
解决报错 (Bad Gateway on Login):https://www.reddit.com/r/nginx/comments/pt352s/comment/hdvucab/
原贴:https://space.bilibili.com/381396284
- 感谢你赐予我前进的力量