<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on 我的博客</title><link>https://hugo.kkun.top/tags/linux/</link><description>Recent content from 我的博客</description><generator>Hugo</generator><language>zh-cn</language><managingEditor>your@email.com (你的名字)</managingEditor><webMaster>your@email.com (你的名字)</webMaster><copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright><lastBuildDate>Thu, 24 Aug 2023 08:03:51 +0000</lastBuildDate><atom:link href="https://hugo.kkun.top/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Ubuntu apt源密钥不可用解决方案</title><link>https://hugo.kkun.top/post/ubuntu-apt%E6%BA%90%E5%AF%86%E9%92%A5%E4%B8%8D%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</link><pubDate>Thu, 24 Aug 2023 08:03:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/ubuntu-apt%E6%BA%90%E5%AF%86%E9%92%A5%E4%B8%8D%E5%8F%AF%E7%94%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</guid><description>
<![CDATA[<h1>Ubuntu apt源密钥不可用解决方案</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="现象">
<a class="header-anchor" href="#%e7%8e%b0%e8%b1%a1"></a>
现象
</h2><ul>
<li>报错如下</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">The following signatures couldn<span class="err">&#39;</span>t be verified because the public key is not available: NO_PUBKEY D8FF8E1F7DF8B07E
</span></span></code></pre></div><ul>
<li>apt update报错</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">W: GPG error: https://repos.influxdata.com/ubuntu focal InRelease: The following signatures couldn<span class="s1">&#39;t be verified because the public key is not available: NO_PUBKEY D8FF8E1F7DF8B07E
</span></span></span><span class="line"><span class="cl"><span class="s1">E: The repository &#39;</span>https://repos.influxdata.com/ubuntu focal InRelease<span class="s1">&#39; is not signed.
</span></span></span><span class="line"><span class="cl"><span class="s1">N: Updating from such a repository can&#39;</span>t be <span class="k">done</span> securely, and is therefore disabled by default.
</span></span><span class="line"><span class="cl">N: See apt-secure<span class="o">(</span>8<span class="o">)</span> manpage <span class="k">for</span> repository creation and user configuration details.
</span></span></code></pre></div><h2 id="解决方案">
<a class="header-anchor" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88"></a>
解决方案
</h2><h3 id="重新获取公钥">
<a class="header-anchor" href="#%e9%87%8d%e6%96%b0%e8%8e%b7%e5%8f%96%e5%85%ac%e9%92%a5"></a>
重新获取公钥
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo gpg --keyserver keyserver.ubuntu.com --recv-keys D8FF8E1F7DF8B07E
</span></span></code></pre></div><h3 id="导出公钥并加入apt信任密钥">
<a class="header-anchor" href="#%e5%af%bc%e5%87%ba%e5%85%ac%e9%92%a5%e5%b9%b6%e5%8a%a0%e5%85%a5apt%e4%bf%a1%e4%bb%bb%e5%af%86%e9%92%a5"></a>
导出公钥并加入apt信任密钥
</h3><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo gpg --export --armor 467B942D3A79BD29 <span class="p">|</span> sudo apt-key add -
</span></span></code></pre></div><p><code>apt update</code> 不再报错</p>
        
        <hr><p>本文2023-08-24首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-08-24</p>]]></description><category>Linux</category><category>Ubuntu</category></item><item><title>Linux加固脚本</title><link>https://hugo.kkun.top/post/linux%E5%8A%A0%E5%9B%BA%E8%84%9A%E6%9C%AC/</link><pubDate>Wed, 16 Aug 2023 08:03:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/linux%E5%8A%A0%E5%9B%BA%E8%84%9A%E6%9C%AC/</guid><description>
<![CDATA[<h1>Linux加固脚本</h1><p>作者：你的名字（your@email.com）</p>
        
          <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="c1"># @Author: WeiyiGeek</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Description: Ubuntu TLS Security Initiate</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Create Time:  2019年9月1日 16:43:33</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Last Modified time: 2021-11-15 11:06:31</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @E-mail: master@weiyigeek.top</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Blog: https://www.weiyigeek.top</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @wechat: WeiyiGeeker</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Github: https://github.com/WeiyiGeek/SecOpsDev/tree/master/OS-操作系统/Linux/</span>
</span></span><span class="line"><span class="cl"><span class="c1"># @Version: 3.3</span>
</span></span><span class="line"><span class="cl"><span class="c1">#-------------------------------------------------#</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 脚本主要功能说明:</span>
</span></span><span class="line"><span class="cl"><span class="c1"># (1) Ubuntu 系统初始化操作包括IP地址设置、基础软件包更新以及安装加固。</span>
</span></span><span class="line"><span class="cl"><span class="c1"># (2) Ubuntu 系统容器以及JDK相关环境安装。</span>
</span></span><span class="line"><span class="cl"><span class="c1"># (3) Ubuntu 系统中异常错误日志解决。</span>
</span></span><span class="line"><span class="cl"><span class="c1"># (4) Ubuntu 系统常规服务安装配置，加入数据备份目录。</span>
</span></span><span class="line"><span class="cl"><span class="c1"># (5) Ubuntu 脚本错误优化、添加禁用cloud-init</span>
</span></span><span class="line"><span class="cl"><span class="c1">#-------------------------------------------------#</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 系统全局变量定义</span>
</span></span><span class="line"><span class="cl"><span class="nv">HOSTNAME</span><span class="o">=</span>Ubuntu-Security-Template
</span></span><span class="line"><span class="cl"><span class="nv">IP</span><span class="o">=</span>192.168.1.2
</span></span><span class="line"><span class="cl"><span class="nv">GATEWAY</span><span class="o">=</span>192.168.1.1
</span></span><span class="line"><span class="cl"><span class="nv">DNSIP</span><span class="o">=(</span><span class="s2">&#34;223.5.5.5&#34;</span> <span class="s2">&#34;223.6.6.6&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">SSHPORT</span><span class="o">=</span><span class="m">20211</span>
</span></span><span class="line"><span class="cl"><span class="nv">DefaultUser</span><span class="o">=</span><span class="s2">&#34;WeiyiGeek&#34;</span>  <span class="c1"># 系统创建的用户名称非root用户</span>
</span></span><span class="line"><span class="cl"><span class="nv">ROOTPASS</span><span class="o">=</span>WeiyiGeek       <span class="c1"># 密码建议12位以上且包含数字、大小写字母以及特殊字符。</span>
</span></span><span class="line"><span class="cl"><span class="nv">APPPASS</span><span class="o">=</span>WeiyiGeek
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: err 、info 、warning</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途：全局Log信息打印函数</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: $@</span>
</span></span><span class="line"><span class="cl">log::err<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">printf</span> <span class="s2">&#34;[</span><span class="k">$(</span>date +<span class="s1">&#39;%Y-%m-%dT%H:%M:%S&#39;</span><span class="k">)</span><span class="s2">]: \033[31mERROR: </span><span class="nv">$@</span><span class="s2"> \033[0m\n&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">log::info<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">printf</span> <span class="s2">&#34;[</span><span class="k">$(</span>date +<span class="s1">&#39;%Y-%m-%dT%H:%M:%S&#39;</span><span class="k">)</span><span class="s2">]: \033[32mINFO: </span><span class="nv">$@</span><span class="s2"> \033[0m\n&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">log::warning<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">printf</span> <span class="s2">&#34;[</span><span class="k">$(</span>date +<span class="s1">&#39;%Y-%m-%dT%H:%M:%S&#39;</span><span class="k">)</span><span class="s2">]: \033[33mWARNING: </span><span class="nv">$@</span><span class="s2"> \033[0m\n&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: os::Network</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 网络配置相关操作脚本包括(IP地址修改)</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">os::Network <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 操作系统网络配置相关脚本,开始执行.....&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (1) IP地址与主机名称设置</span>
</span></span><span class="line"><span class="cl">sudo cp /etc/netplan/00-installer-config.yaml<span class="o">{</span>,.bak<span class="o">}</span>
</span></span><span class="line"><span class="cl">mkdir /opt/init/
</span></span><span class="line"><span class="cl">sudo tee /opt/init/network.sh <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="s">CURRENT_IP=$(hostname -I | cut -f 1 -d &#34; &#34;)
</span></span></span><span class="line"><span class="cl"><span class="s">GATEWAY=$(hostname -I | cut -f 1,2,3 -d &#34;.&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s">if [[ $# -lt 3 ]];then
</span></span></span><span class="line"><span class="cl"><span class="s">  echo &#34;Usage: $0 IP Gateway Hostname&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">  exit
</span></span></span><span class="line"><span class="cl"><span class="s">fi
</span></span></span><span class="line"><span class="cl"><span class="s">echo &#34;IP:${1} # GATEWAY:${2} # HOSTNAME:${3}&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">sudo sed -i &#34;s#${CURRENT_IP}#${1}#g&#34; /etc/netplan/00-installer-config.yaml
</span></span></span><span class="line"><span class="cl"><span class="s">sudo sed -i &#34;s#${GATEWAY}.1#${2}#g&#34; /etc/netplan/00-installer-config.yaml
</span></span></span><span class="line"><span class="cl"><span class="s">sudo hostnamectl set-hostname ${3} 
</span></span></span><span class="line"><span class="cl"><span class="s">sudo netplan apply
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">sudo chmod +x /opt/init/network.sh
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (2) 本地主机名解析设置</span>
</span></span><span class="line"><span class="cl">sed -i <span class="s2">&#34;s/127.0.1.1\s.\w.*</span>$<span class="s2">/127.0.1.1 </span><span class="si">${</span><span class="nv">HOSTNAME</span><span class="si">}</span><span class="s2">/g&#34;</span> /etc/hosts
</span></span><span class="line"><span class="cl">grep -q <span class="s2">&#34;^\$(hostname -I)\s.\w.*</span>$<span class="s2">&#34;</span> /etc/hosts <span class="o">&amp;&amp;</span> sed -i <span class="s2">&#34;s/\$(hostname -I)\s.\w.*</span>$<span class="s2">/</span><span class="si">${</span><span class="nv">IPADDR</span><span class="si">}</span><span class="s2"> </span><span class="si">${</span><span class="nv">HOSTNAME</span><span class="si">}</span><span class="s2">&#34;</span> /etc/hosts <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">IPADDR</span><span class="si">}</span><span class="s2"> </span><span class="si">${</span><span class="nv">HOSTNAME</span><span class="si">}</span><span class="s2">&#34;</span> &gt;&gt; /etc/hosts
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (3) 系统DNS域名解析服务设置</span>
</span></span><span class="line"><span class="cl">cp -a /etc/resolv.conf<span class="o">{</span>,.bak<span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> dns in <span class="si">${</span><span class="nv">DNSIP</span><span class="p">[@]</span><span class="si">}</span><span class="p">;</span><span class="k">do</span> <span class="nb">echo</span> <span class="s2">&#34;nameserver </span><span class="si">${</span><span class="nv">dns</span><span class="si">}</span><span class="s2">&#34;</span> &gt;&gt; /etc/resolv.conf<span class="p">;</span><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">sudo /opt/init/network.sh <span class="si">${</span><span class="nv">IP</span><span class="si">}</span> <span class="si">${</span><span class="nv">GATEWAY</span><span class="si">}</span> <span class="si">${</span><span class="nv">HOSTNAME</span><span class="si">}</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[*] network configure modifiy successful! restarting Network.........&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: os::Software</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 操作系统软件包管理及更新源配置</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">os::Software <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 操作系统软件包管理及更新源配置相关脚本,开始执行.....&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (1) 卸载多余软件，例如 snap 软件及其服务</span>
</span></span><span class="line"><span class="cl">sudo systemctl stop snapd snapd.socket <span class="c1">#停止snapd相关的进程服务</span>
</span></span><span class="line"><span class="cl">sudo apt autoremove --purge -y snapd
</span></span><span class="line"><span class="cl">sudo systemctl daemon-reload
</span></span><span class="line"><span class="cl">sudo rm -rf ~/snap /snap /var/snap /var/lib/snapd /var/cache/snapd /run/snapd
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (2) 软件源设置与系统更新</span>
</span></span><span class="line"><span class="cl">sudo cp /etc/apt/sources.list<span class="o">{</span>,.bak<span class="o">}</span>
</span></span><span class="line"><span class="cl">sudo tee /etc/apt/sources.list <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">#阿里云Mirrors - Ubuntu
</span></span></span><span class="line"><span class="cl"><span class="s">deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (3) 内核版本升级以及常规软件安装</span>
</span></span><span class="line"><span class="cl">sudo apt autoclean <span class="o">&amp;&amp;</span> sudo apt update <span class="o">&amp;&amp;</span> sudo apt upgrade -y
</span></span><span class="line"><span class="cl">sudo apt install -y nano vim git unzip wget ntpdate dos2unix net-tools tree htop ncdu nload sysstat psmisc bash-completion fail2ban  gcc g++ make jq nfs-common rpcbind libpam-cracklib
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (4) 代理方式进行更新</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo apt autoclean &amp;&amp; sudo apt -o Acquire::http::proxy=&#34;http://proxy.weiyigeek.top/&#34; update &amp;&amp; sudo apt -o Acquire::http::proxy=&#34;http://proxy.weiyigeek.top&#34; upgrade -y</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo apt install -o Acquire::http::proxy=&#34;http://proxy.weiyigeek.top/&#34; -y nano vim git unzip wget ntpdate dos2unix net-tools tree htop ncdu nload sysstat psmisc bash-completion fail2ban</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: os::TimedataZone</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 操作系统时间与时区同步配置</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">os::TimedataZone <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[*] 操作系统系统时间时区配置相关脚本,开始执行.....&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (1) 时间同步服务端容器(可选也可以用外部ntp服务器) : docker run -d --rm --cap-add SYS_TIME -e ALLOW_CIDR=0.0.0.0/0 -p 123:123/udp geoffh1977/chrony</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;同步前的时间: </span><span class="k">$(</span>date -R<span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 方式1.Chrony 客户端配置</span>
</span></span><span class="line"><span class="cl">apt install -y chrony
</span></span><span class="line"><span class="cl">grep -q <span class="s2">&#34;192.168.12.254&#34;</span> /etc/chrony/chrony.conf <span class="o">||</span> sudo tee -a /etc/chrony/chrony.conf <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">pool 192.168.4.254 iburst maxsources 1
</span></span></span><span class="line"><span class="cl"><span class="s">pool 192.168.10.254 iburst maxsources 1
</span></span></span><span class="line"><span class="cl"><span class="s">pool 192.168.12.254 iburst maxsources 1
</span></span></span><span class="line"><span class="cl"><span class="s">pool ntp.aliyun.com iburst maxsources 4
</span></span></span><span class="line"><span class="cl"><span class="s">keyfile /etc/chrony/chrony.keys
</span></span></span><span class="line"><span class="cl"><span class="s">driftfile /var/lib/chrony/chrony.drift
</span></span></span><span class="line"><span class="cl"><span class="s">logdir /var/log/chrony
</span></span></span><span class="line"><span class="cl"><span class="s">maxupdateskew 100.0
</span></span></span><span class="line"><span class="cl"><span class="s">rtcsync
</span></span></span><span class="line"><span class="cl"><span class="s"># 允许跳跃式校时 如果在前 3 次校时中时间差大于 1.0s
</span></span></span><span class="line"><span class="cl"><span class="s">makestep 1 3
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">systemctl <span class="nb">enable</span> chrony <span class="o">&amp;&amp;</span> systemctl restart chrony <span class="o">&amp;&amp;</span> systemctl status chrony -l
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 方式2</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo ntpdate 192.168.10.254 || sudo ntpdate 192.168.12.215 || sudo ntpdate ntp1.aliyun.com</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 方式3</span>
</span></span><span class="line"><span class="cl"><span class="c1"># echo &#39;NTP=192.168.10.254 192.168.4.254&#39; &gt;&gt; /etc/systemd/timesyncd.conf</span>
</span></span><span class="line"><span class="cl"><span class="c1"># echo &#39;FallbackNTP=ntp.aliyun.com&#39; &gt;&gt; /etc/systemd/timesyncd.conf</span>
</span></span><span class="line"><span class="cl"><span class="c1"># systemctl restart systemd-timesyncd.service</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (2) 时区与地区设置: </span>
</span></span><span class="line"><span class="cl">sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
</span></span><span class="line"><span class="cl">sudo timedatectl set-timezone Asia/Shanghai
</span></span><span class="line"><span class="cl"><span class="c1"># sudo dpkg-reconfigure tzdata  # 修改确认</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo bash -c &#34;echo &#39;Asia/Shanghai&#39; &gt; /etc/timezone&#34; # 与上一条命令一样</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 将当前的 UTC 时间写入硬件时钟 (硬件时间默认为UTC)</span>
</span></span><span class="line"><span class="cl">sudo timedatectl set-local-rtc <span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 启用NTP时间同步：</span>
</span></span><span class="line"><span class="cl">sudo timedatectl set-ntp yes
</span></span><span class="line"><span class="cl"><span class="c1"># 校准时间服务器-时间同步(推荐使用chronyc进行平滑同步)</span>
</span></span><span class="line"><span class="cl">sudo chronyc tracking
</span></span><span class="line"><span class="cl"><span class="c1"># 手动校准-强制更新时间</span>
</span></span><span class="line"><span class="cl"><span class="c1"># chronyc -a makestep</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 系统时钟同步硬件时钟</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo hwclock --systohc</span>
</span></span><span class="line"><span class="cl">sudo hwclock -w
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (3) 重启依赖于系统时间的服务</span>
</span></span><span class="line"><span class="cl">sudo systemctl restart rsyslog.service cron.service
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[*] Tie confmigure modifiy successful! restarting chronyd rsyslog.service crond.service.........&#34;</span>
</span></span><span class="line"><span class="cl">timedatectl
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: os::Security</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 操作系统安全加固配置脚本(符合等保要求-三级要求)</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">os::Security <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;正在进行-&gt;操作系统安全加固(符合等保要求-三级要求)配置&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (0) 系统用户核查配置</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 锁定或者删除多余的系统账户以及创建低权限用户&#34;</span>
</span></span><span class="line"><span class="cl">userdel -r lxd
</span></span><span class="line"><span class="cl">groupdel lxd
</span></span><span class="line"><span class="cl"><span class="nv">defaultuser</span><span class="o">=(</span>root daemon bin sys games man lp mail news uucp proxy www-data backup list irc gnats nobody systemd-network systemd-resolve systemd-timesync messagebus syslog _apt tss uuidd tcpdump landscape pollinate usbmux sshd systemd-coredump _chrony<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> i in <span class="k">$(</span>cat /etc/passwd <span class="p">|</span> cut -d <span class="s2">&#34;:&#34;</span> -f 1,7<span class="k">)</span><span class="p">;</span><span class="k">do</span>
</span></span><span class="line"><span class="cl">  <span class="nv">flag</span><span class="o">=</span>0<span class="p">;</span> <span class="nv">name</span><span class="o">=</span><span class="si">${</span><span class="nv">i</span><span class="p">%%:*</span><span class="si">}</span><span class="p">;</span> <span class="nv">terminal</span><span class="o">=</span><span class="si">${</span><span class="nv">i</span><span class="p">##*:</span><span class="si">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">[[</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">terminal</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">==</span> <span class="s2">&#34;/bin/bash&#34;</span> <span class="o">||</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">terminal</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">==</span> <span class="s2">&#34;/bin/sh&#34;</span> <span class="o">]]</span><span class="p">;</span><span class="k">then</span>
</span></span><span class="line"><span class="cl">    log::warning <span class="s2">&#34;</span><span class="si">${</span><span class="nv">i</span><span class="si">}</span><span class="s2"> 用户，shell终端为 /bin/bash 或者 /bin/sh&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">fi</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> j in <span class="si">${</span><span class="nv">defaultuser</span><span class="p">[@]</span><span class="si">}</span><span class="p">;</span><span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[[</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">name</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">==</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">j</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">]]</span><span class="p">;</span><span class="k">then</span>
</span></span><span class="line"><span class="cl">      <span class="nv">flag</span><span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="cl">      break<span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">  <span class="k">done</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">[[</span> <span class="nv">$flag</span> -eq <span class="m">0</span> <span class="o">]]</span><span class="p">;</span><span class="k">then</span>
</span></span><span class="line"><span class="cl">    log::warning <span class="s2">&#34;</span><span class="si">${</span><span class="nv">i</span><span class="si">}</span><span class="s2"> 非默认用户&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">cp /etc/shadow /etc/shadow-<span class="sb">`</span>date +%Y%m%d<span class="sb">`</span>.bak
</span></span><span class="line"><span class="cl">passwd -l adm<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l daemon<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l bin<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l sys<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l lp<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l uucp<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l nuucp<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l smmsplp<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l mail<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l operator<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l games<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l gopher<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l ftp<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l nobody<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l nobody4<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l noaccess<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l listen<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l webservd<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l rpm<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l dbus<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l avahi<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l mailnull<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l nscd<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l vcsa<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l rpc<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l rpcuser<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l nfs<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l sshd<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l pcap<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l ntp<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l haldaemon<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l distcache<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l webalizer<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l squid<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l xfs<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l gdm<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l sabayon<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> passwd -l named<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (2) 用户密码设置和口令策略设置</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-]  配置满足策略的root管理员密码 &#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span>  <span class="si">${</span><span class="nv">ROOTPASS</span><span class="si">}</span> <span class="p">|</span> passwd --stdin root
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] 配置满足策略的app普通用户密码(根据需求配置)&#34;</span>
</span></span><span class="line"><span class="cl">groupadd application
</span></span><span class="line"><span class="cl">useradd -m -s /bin/bash -c <span class="s2">&#34;application primary user&#34;</span> -g application app 
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="si">${</span><span class="nv">APPPASS</span><span class="si">}</span> <span class="p">|</span> passwd --stdin app
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 强制用户在下次登录时更改密码 &#34;</span>
</span></span><span class="line"><span class="cl">chage -d <span class="m">0</span> -m <span class="m">0</span> -M <span class="m">90</span> -W <span class="m">15</span> root <span class="o">&amp;&amp;</span> passwd --expire root 
</span></span><span class="line"><span class="cl">chage -d <span class="m">0</span> -m <span class="m">0</span> -M <span class="m">90</span> -W <span class="m">15</span> <span class="si">${</span><span class="nv">DefaultUser</span><span class="si">}</span> <span class="o">&amp;&amp;</span> passwd --expire <span class="si">${</span><span class="nv">DefaultUser</span><span class="si">}</span> 
</span></span><span class="line"><span class="cl">chage -d <span class="m">0</span> -m <span class="m">0</span> -M <span class="m">90</span> -W <span class="m">15</span> app <span class="o">&amp;&amp;</span> passwd --expire app
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 用户口令复杂性策略设置 (密码过期周期0~90、到期前15天提示、密码长度至少15、复杂度设置至少有一个大小写、数字、特殊字符、密码三次不能一样、尝试次数为三次)&#34;</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*PASS_MIN_DAYS\s+\S*(\s*#.*)?\s*</span>$<span class="s2">&#34;</span> /etc/login.defs <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(\s*)PASS_MIN_DAYS\s+\S*(\s*#.*)?\s*</span>$<span class="s2">/\PASS_MIN_DAYS  0/&#34;</span> /etc/login.defs <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;PASS_MIN_DAYS  0&#34;</span> &gt;&gt; /etc/login.defs
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*PASS_MAX_DAYS\s+\S*(\s*#.*)?\s*</span>$<span class="s2">&#34;</span> /etc/login.defs <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(\s*)PASS_MAX_DAYS\s+\S*(\s*#.*)?\s*</span>$<span class="s2">/\PASS_MAX_DAYS  90/&#34;</span> /etc/login.defs <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;PASS_MAX_DAYS  90&#34;</span> &gt;&gt; /etc/login.defs
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*PASS_WARN_AGE\s+\S*(\s*#.*)?\s*</span>$<span class="s2">&#34;</span> /etc/login.defs <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(\s*)PASS_WARN_AGE\s+\S*(\s*#.*)?\s*</span>$<span class="s2">/\PASS_WARN_AGE  15/&#34;</span> /etc/login.defs <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;PASS_WARN_AGE  15&#34;</span> &gt;&gt; /etc/login.defs
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*PASS_MIN_LEN\s+\S*(\s*#.*)?\s*</span>$<span class="s2">&#34;</span> /etc/login.defs <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(\s*)PASS_MIN_LEN\s+\S*(\s*#.*)?\s*</span>$<span class="s2">/\PASS_MIN_LEN  15/&#34;</span> /etc/login.defs <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;PASS_MIN_LEN  15&#34;</span> &gt;&gt; /etc/login.defs
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^password\s.+pam_cracklib.so\s+\w+.*</span>$<span class="s2">&#34;</span> /etc/pam.d/common-password <span class="o">&amp;&amp;</span> sed -ri <span class="s1">&#39;/^password\s.+pam_cracklib.so/{s/pam_cracklib.so\s+\w+.*$/pam_cracklib.so retry=3 minlen=15 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 difok=1/g;}&#39;</span> /etc/pam.d/common-password
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^password\s.+pam_unix.so\s+\w+.*</span>$<span class="s2">&#34;</span> /etc/pam.d/common-password <span class="o">&amp;&amp;</span> sed -ri <span class="s1">&#39;/^password\s.+pam_unix.so/{s/pam_unix.so\s+\w+.*$/pam_unix.so obscure use_authtok try_first_pass sha512 remember=3/g;}&#39;</span> /etc/pam.d/common-password
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 存储用户密码的文件，其内容经过sha512加密，所以非常注意其权限&#34;</span>
</span></span><span class="line"><span class="cl">touch /etc/security/opasswd <span class="o">&amp;&amp;</span> chown root:root /etc/security/opasswd <span class="o">&amp;&amp;</span> chmod <span class="m">600</span> /etc/security/opasswd 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (3) 用户sudo权限以及重要目录和文件的权限设置</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 用户sudo权限以及重要目录和文件的新建默认权限设置&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 如uBuntu安装时您创建的用户 WeiyiGeek 防止直接通过 sudo passwd 修改root密码(此时必须要求输入WeiyiGeek密码后才可修改root密码)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Tips: Sudo允许授权用户权限以另一个用户（通常是root用户）的身份运行程序, </span>
</span></span><span class="line"><span class="cl"><span class="c1"># DefaultUser=&#34;weiyigeek&#34;</span>
</span></span><span class="line"><span class="cl">sed -i <span class="s2">&#34;/# Members of the admin/i </span><span class="si">${</span><span class="nv">DefaultUser</span><span class="si">}</span><span class="s2"> ALL=(ALL) PASSWD:ALL&#34;</span> /etc/sudoers
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 配置用户 umask 为022 &#34;</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*umask\s+\w+.*</span>$<span class="s2">&#34;</span> /etc/profile <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*umask\s+\w+.*</span>$<span class="s2">/umask 022/&#34;</span> /etc/profile <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;umask 022&#34;</span> &gt;&gt; /etc/profile
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*umask\s+\w+.*</span>$<span class="s2">&#34;</span> /etc/bash.bashrc <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*umask\s+\w+.*</span>$<span class="s2">/umask 022/&#34;</span> /etc/bashrc <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;umask 022&#34;</span> &gt;&gt; /etc/bash.bashrc
</span></span><span class="line"><span class="cl"><span class="c1"># log::info &#34;[-] 设置用户目录创建默认权限, (初始为077比较严格)，在设置 umask 为022 及 777 - 022 &#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># egrep -q &#34;^\s*(umask|UMASK)\s+\w+.*$&#34; /etc/login.defs &amp;&amp; sed -ri &#34;s/^\s*(umask|UMASK)\s+\w+.*$/UMASK 022/&#34; /etc/login.defs || echo &#34;UMASK 022&#34; &gt;&gt; /etc/login.defs</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 设置或恢复重要目录和文件的权限&#34;</span>
</span></span><span class="line"><span class="cl">chmod <span class="m">755</span> /etc<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">777</span> /tmp<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">700</span> /etc/inetd.conf<span class="p">&amp;</span>&gt;/dev/null 2<span class="p">&amp;</span>&gt;/dev/null<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">755</span> /etc/passwd<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">755</span> /etc/shadow<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">644</span> /etc/group<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">755</span> /etc/security<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">644</span> /etc/services<span class="p">;</span> 
</span></span><span class="line"><span class="cl">chmod <span class="m">750</span> /etc/rc*.d
</span></span><span class="line"><span class="cl">chmod <span class="m">600</span> ~/.ssh/authorized_keys
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 删除潜在威胁文件 &#34;</span>
</span></span><span class="line"><span class="cl">find / -maxdepth <span class="m">3</span> -name hosts.equiv <span class="p">|</span> xargs rm -rf
</span></span><span class="line"><span class="cl">find / -maxdepth <span class="m">3</span> -name .netrc <span class="p">|</span> xargs rm -rf
</span></span><span class="line"><span class="cl">find / -maxdepth <span class="m">3</span> -name .rhosts <span class="p">|</span> xargs rm -rf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (4) SSHD 服务安全加固设置</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] sshd 服务安全加固设置&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 严格模式</span>
</span></span><span class="line"><span class="cl">sudo egrep -q <span class="s2">&#34;^\s*StrictModes\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*StrictModes\s+.+</span>$<span class="s2">/StrictModes yes/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;StrictModes yes&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl"><span class="c1"># 监听端口更改</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> -e <span class="si">${</span><span class="nv">SSHPORT</span><span class="si">}</span> <span class="o">]</span><span class="p">;</span><span class="k">then</span> <span class="nb">export</span> <span class="nv">SSHPORT</span><span class="o">=</span>20211<span class="p">;</span><span class="k">fi</span>
</span></span><span class="line"><span class="cl">sudo egrep -q <span class="s2">&#34;^\s*Port\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*Port\s+.+</span>$<span class="s2">/Port </span><span class="si">${</span><span class="nv">SSHPORT</span><span class="si">}</span><span class="s2">/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;Port </span><span class="si">${</span><span class="nv">SSHPORT</span><span class="si">}</span><span class="s2">&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl"><span class="c1"># 禁用X11转发以及端口转发</span>
</span></span><span class="line"><span class="cl">sudo egrep -q <span class="s2">&#34;^\s*X11Forwarding\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*X11Forwarding\s+.+</span>$<span class="s2">/X11Forwarding no/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;X11Forwarding no&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl">sudo egrep -q <span class="s2">&#34;^\s*X11UseLocalhost\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*X11UseLocalhost\s+.+</span>$<span class="s2">/X11UseLocalhost yes/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;X11UseLocalhost yes&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl">sudo egrep -q <span class="s2">&#34;^\s*AllowTcpForwarding\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*AllowTcpForwarding\s+.+</span>$<span class="s2">/AllowTcpForwarding no/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;AllowTcpForwarding no&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl">sudo egrep -q <span class="s2">&#34;^\s*AllowAgentForwarding\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*AllowAgentForwarding\s+.+</span>$<span class="s2">/AllowAgentForwarding no/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;AllowAgentForwarding no&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl"><span class="c1"># 关闭禁用用户的 .rhosts 文件  ~/.ssh/.rhosts 来做为认证: 缺省IgnoreRhosts yes </span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?\s*IgnoreRhosts\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(#)?\s*IgnoreRhosts\s+.+</span>$<span class="s2">/IgnoreRhosts yes/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;IgnoreRhosts yes&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl"><span class="c1"># 禁止root远程登录（推荐配置-根据需求配置）</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*PermitRootLogin\s+.+</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*PermitRootLogin\s+.+</span>$<span class="s2">/PermitRootLogin no/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;PermitRootLogin no&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl"><span class="c1"># 登陆前后欢迎提示设置</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*(banner|Banner)\s+\W+.*</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*(banner|Banner)\s+\W+.*</span>$<span class="s2">/Banner \/etc\/issue/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Banner /etc/issue&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] 远程SSH登录前后提示警告Banner设置&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># SSH登录前警告Banner</span>
</span></span><span class="line"><span class="cl">sudo tee /etc/issue <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">****************** [ 安全登陆 (Security Login) ] *****************
</span></span></span><span class="line"><span class="cl"><span class="s">Authorized only. All activity will be monitored and reported.By Security Center.
</span></span></span><span class="line"><span class="cl"><span class="s">Owner: WeiyiGeek, Site: https://www.weiyigeek.top
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl"><span class="c1"># SSH登录后提示Banner</span>
</span></span><span class="line"><span class="cl">sed -i <span class="s1">&#39;/^fi/a\\n\necho &#34;\\e[1;37;41;5m################## 安全运维 (Security Operation) ####################\\e[0m&#34;\necho &#34;\\e[32mLogin success. Please execute the commands and operation data carefully.By WeiyiGeek.\\e[0m&#34;&#39;</span> /etc/update-motd.d/00-header
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (5) 用户远程登录失败次数与终端超时设置 </span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 用户远程连续登录失败10次锁定帐号5分钟包括root账号&#34;</span>
</span></span><span class="line"><span class="cl">sed -ri <span class="s2">&#34;/^\s*auth\s+required\s+pam_tally2.so\s+.+(\s*#.*)?\s*</span>$<span class="s2">/d&#34;</span> /etc/pam.d/sshd 
</span></span><span class="line"><span class="cl">sed -ri <span class="s1">&#39;2a auth required pam_tally2.so deny=10 unlock_time=300 even_deny_root root_unlock_time=300&#39;</span> /etc/pam.d/sshd 
</span></span><span class="line"><span class="cl"><span class="c1"># 宿主机控制台登陆(可选)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sed -ri &#34;/^\s*auth\s+required\s+pam_tally2.so\s+.+(\s*#.*)?\s*$/d&#34; /etc/pam.d/login</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sed -ri &#39;2a auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=300&#39; /etc/pam.d/login</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 设置登录超时时间为10分钟 &#34;</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*(export|)\s*TMOUT\S\w+.*</span>$<span class="s2">&#34;</span> /etc/profile <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*(export|)\s*TMOUT.\S\w+.*</span>$<span class="s2">/export TMOUT=600\nreadonly TMOUT/&#34;</span> /etc/profile <span class="o">||</span> <span class="nb">echo</span> -e <span class="s2">&#34;export TMOUT=600\nreadonly TMOUT&#34;</span> &gt;&gt; /etc/profile
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*.*ClientAliveInterval\s\w+.*</span>$<span class="s2">&#34;</span> /etc/ssh/sshd_config <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*.*ClientAliveInterval\s\w+.*</span>$<span class="s2">/ClientAliveInterval 600/&#34;</span> /etc/ssh/sshd_config <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;ClientAliveInterval 600&#34;</span> &gt;&gt; /etc/ssh/sshd_config
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (5) 切换用户日志记录或者切换命令更改(可选)</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 切换用户日志记录和切换命令更改名称为SU &#34;</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(\s*)SULOG_FILE\s+\S*(\s*#.*)?\s*</span>$<span class="s2">&#34;</span> /etc/login.defs <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(\s*)SULOG_FILE\s+\S*(\s*#.*)?\s*</span>$<span class="s2">/\SULOG_FILE  \/var\/log\/.history\/sulog/&#34;</span> /etc/login.defs <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;SULOG_FILE  /var/log/.history/sulog&#34;</span> &gt;&gt; /etc/login.defs
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*SU_NAME\s+\S*(\s*#.*)?\s*</span>$<span class="s2">&#34;</span> /etc/login.defs <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^(\s*)SU_NAME\s+\S*(\s*#.*)?\s*</span>$<span class="s2">/\SU_NAME  SU/&#34;</span> /etc/login.defs <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;SU_NAME  SU&#34;</span> &gt;&gt; /etc/login.defs
</span></span><span class="line"><span class="cl">mkdir -vp /usr/local/bin /var/log/.backups /var/log/.history /var/log/.history/sulog
</span></span><span class="line"><span class="cl">cp /usr/bin/su /var/log/.backups/su.bak
</span></span><span class="line"><span class="cl">mv /usr/bin/su /usr/bin/SU
</span></span><span class="line"><span class="cl"><span class="c1"># 只能写入不能删除其目标目录中的文件</span>
</span></span><span class="line"><span class="cl">chmod -R <span class="m">1777</span> /var/log/.history
</span></span><span class="line"><span class="cl">chattr -R +a /var/log/.history 
</span></span><span class="line"><span class="cl">chattr +a /var/log/.backups
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (6) 用户终端执行的历史命令记录</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] 用户终端执行的历史命令记录 &#34;</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^HISTSIZE\W\w+.*</span>$<span class="s2">&#34;</span> /etc/profile <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^HISTSIZE\W\w+.*</span>$<span class="s2">/HISTSIZE=101/&#34;</span> /etc/profile <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;HISTSIZE=101&#34;</span> &gt;&gt; /etc/profile
</span></span><span class="line"><span class="cl"><span class="c1"># 方式1</span>
</span></span><span class="line"><span class="cl">sudo tee /etc/profile.d/history-record.sh <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s"># 历史命令执行记录文件路径
</span></span></span><span class="line"><span class="cl"><span class="s">LOGTIME=$(date +%Y%m%d-%H-%M-%S)
</span></span></span><span class="line"><span class="cl"><span class="s">export HISTFILE=&#34;/var/log/.history/${USER}.${LOGTIME}.history&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">if [ ! -f ${HISTFILE} ];then
</span></span></span><span class="line"><span class="cl"><span class="s">  touch ${HISTFILE}
</span></span></span><span class="line"><span class="cl"><span class="s">fi
</span></span></span><span class="line"><span class="cl"><span class="s">chmod 600 /var/log/.history/${USER}.${LOGTIME}.history
</span></span></span><span class="line"><span class="cl"><span class="s"># 历史命令执行文件大小记录设置
</span></span></span><span class="line"><span class="cl"><span class="s">HISTFILESIZE=128
</span></span></span><span class="line"><span class="cl"><span class="s">HISTTIMEFORMAT=&#34;%F_%T $(whoami)#$(who -u am i 2&gt;/dev/null| awk &#39;{print $NF}&#39;|sed -e &#39;s/[()]//g&#39;):&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 方式2.未能成功(如后续有小伙伴成功了欢迎留言分享)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo tee /usr/local/bin/history.sh &lt;&lt;&#39;EOF&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># #!/bin/bash</span>
</span></span><span class="line"><span class="cl"><span class="c1"># logfiletime=$(date +%Y%m%d-%H-%M-%S)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># # unalias &#34;history&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># if [ $# -eq 0 ];then history;fi</span>
</span></span><span class="line"><span class="cl"><span class="c1"># for i in $*;do</span>
</span></span><span class="line"><span class="cl"><span class="c1">#   if [ &#34;$i&#34; = &#34;-c&#34; ];then </span>
</span></span><span class="line"><span class="cl"><span class="c1">#     mv ~/.bash_history &gt; /var/log/.history/${logfiletime}.history</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     history -c</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     continue;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#   fi</span>
</span></span><span class="line"><span class="cl"><span class="c1"># done</span>
</span></span><span class="line"><span class="cl"><span class="c1"># alias history=&#34;source /usr/local/bin/history.sh&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># EOF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (7) GRUB 安全设置 （需要手动设置请按照需求设置）</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 系统 GRUB 安全设置(防止物理接触从grub菜单中修改密码) &#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Grub 关键文件备份</span>
</span></span><span class="line"><span class="cl">cp -a /etc/grub.d/00_header /var/log/.backups 
</span></span><span class="line"><span class="cl">cp -a /etc/grub.d/10_linux /var/log/.backups 
</span></span><span class="line"><span class="cl"><span class="c1"># 设置Grub菜单界面显示时间</span>
</span></span><span class="line"><span class="cl">sed -i -e <span class="s1">&#39;s|GRUB_TIMEOUT_STYLE=hidden|#GRUB_TIMEOUT_STYLE=hidden|g&#39;</span> -e <span class="s1">&#39;s|GRUB_TIMEOUT=0|GRUB_TIMEOUT=3|g&#39;</span> /etc/default/grub
</span></span><span class="line"><span class="cl">sed -i -e <span class="s1">&#39;s|set timeout_style=${style}|#set timeout_style=${style}|g&#39;</span> -e <span class="s1">&#39;s|set timeout=${timeout}|set timeout=3|g&#39;</span> /etc/grub.d/00_header
</span></span><span class="line"><span class="cl"><span class="c1"># 创建认证密码 (此处密码: WeiyiGeek)</span>
</span></span><span class="line"><span class="cl">sudo grub-mkpasswd-pbkdf2
</span></span><span class="line"><span class="cl"><span class="c1"># Enter password:</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Reenter password:</span>
</span></span><span class="line"><span class="cl"><span class="c1"># PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.21AC9CEF61B96972BF6F918D2037EFBEB8280001045ED32DFDDCC260591CC6BC8957CF25A6755904A7053E97940A9E4CD5C1EF833C1651C1BCF09D899BED4C7C.9691521F5BB34CD8AEFCED85F4B830A86EC93B61A31885BCBE3FEE927D54EFDEE69FA8B51DBC00FCBDB618D4082BC22B2B6BA4161C7E6B990C4E5CFC9E9748D7</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 设置认证用户以及password_pbkdf2认证</span>
</span></span><span class="line"><span class="cl">tee -a /etc/grub.d/00_header <span class="s">&lt;&lt;&#39;END&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">cat &lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s"># GRUB Authentication
</span></span></span><span class="line"><span class="cl"><span class="s">set superusers=&#34;grub&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">password_pbkdf2 grub grub.pbkdf2.sha512.10000.21AC9CEF61B96972BF6F918D2037EFBEB8280001045ED32DFDDCC260591CC6BC8957CF25A6755904A7053E97940A9E4CD5C1EF833C1651C1BCF09D899BED4C7C.9691521F5BB34CD8AEFCED85F4B830A86EC93B61A31885BCBE3FEE927D54EFDEE69FA8B51DBC00FCBDB618D4082BC22B2B6BA4161C7E6B990C4E5CFC9E9748D7
</span></span></span><span class="line"><span class="cl"><span class="s">EOF
</span></span></span><span class="line"><span class="cl"><span class="s">END</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 设置进入正式系统不需要认证如进入单用户模式进行重置账号密码时需要进行认证。 （高敏感数据库系统不建议下述操作）</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 在191和193 分别加入--user=grub 和 --unrestricted</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 191       echo &#34;menuentry --user=grub &#39;$(echo &#34;$title&#34; | grub_quote)&#39; ${CLASS} \$menuentry_id_option &#39;gnulinux-$version-$type-$boot_device_id&#39; {&#34; | sed &#34;s/^/$submenu_indentation/&#34;  # 如果按e进行menu菜单则需要用grub进行认证</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 192   else</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 193       echo &#34;menuentry --unrestricted &#39;$(echo &#34;$os&#34; | grub_quote)&#39; ${CLASS} \$menuentry_id_option &#39;gnulinux-simple-$boot_device_id&#39; {&#34; | sed &#34;s/^/$submenu_indentation/&#34;          # 正常进入系统则不认证</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">sed -i <span class="s1">&#39;/echo &#34;$title&#34; | grub_quote/ { s/menuentry /menuentry --user=grub /;}&#39;</span> /etc/grub.d/10_linux
</span></span><span class="line"><span class="cl">sed -i <span class="s1">&#39;/echo &#34;$os&#34; | grub_quote/ { s/menuentry /menuentry --unrestricted /;}&#39;</span> /etc/grub.d/10_linux
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Ubuntu 方式更新GRUB从而生成boot启动文件。</span>
</span></span><span class="line"><span class="cl">update-grub
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (8) 操作系统防火墙启用以及策略设置</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 系统防火墙启用以及规则设置 &#34;</span>
</span></span><span class="line"><span class="cl">systemctl <span class="nb">enable</span> ufw.service <span class="o">&amp;&amp;</span> systemctl start ufw.service <span class="o">&amp;&amp;</span> ufw <span class="nb">enable</span>
</span></span><span class="line"><span class="cl">sudo ufw allow proto tcp to any port <span class="m">20211</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 重启修改配置相关服务</span>
</span></span><span class="line"><span class="cl">systemctl restart sshd
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: os::Operation </span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 操作系统安全运维设置</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">os::Operation <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 操作系统安全运维设置相关脚本&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (0) 禁用ctrl+alt+del组合键对系统重启 (必须要配置,我曾入过坑)</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 禁用控制台ctrl+alt+del组合键重启&#34;</span>
</span></span><span class="line"><span class="cl">mv /usr/lib/systemd/system/ctrl-alt-del.target /var/log/.backups/ctrl-alt-del.target-<span class="k">$(</span>date +%Y%m%d<span class="k">)</span>.bak
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (1) 设置文件删除回收站别名</span>
</span></span><span class="line"><span class="cl">  log::info <span class="s2">&#34;[-] 设置文件删除回收站别名(防止误删文件) &#34;</span>
</span></span><span class="line"><span class="cl">sudo tee /etc/profile.d/alias.sh <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s"># User specific aliases and functions
</span></span></span><span class="line"><span class="cl"><span class="s"># 删除回收站
</span></span></span><span class="line"><span class="cl"><span class="s"># find ~/.trash -delete
</span></span></span><span class="line"><span class="cl"><span class="s"># 删除空目录
</span></span></span><span class="line"><span class="cl"><span class="s"># find ~/.trash -type d -delete
</span></span></span><span class="line"><span class="cl"><span class="s">alias rm=&#34;sh /usr/local/bin/remove.sh&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">sudo tee /usr/local/bin/remove.sh <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">#!/bin/sh
</span></span></span><span class="line"><span class="cl"><span class="s"># 定义回收站文件夹目录.trash
</span></span></span><span class="line"><span class="cl"><span class="s">trash=&#34;/.trash&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">deltime=$(date +%Y%m%d-%H-%M-%S)
</span></span></span><span class="line"><span class="cl"><span class="s">TRASH_DIR=&#34;${HOME}${trash}/${deltime}&#34;
</span></span></span><span class="line"><span class="cl"><span class="s"># 建立回收站目录当不存在的时候
</span></span></span><span class="line"><span class="cl"><span class="s">if [ ! -e ${TRASH_DIR} ];then
</span></span></span><span class="line"><span class="cl"><span class="s">   mkdir -p ${TRASH_DIR}
</span></span></span><span class="line"><span class="cl"><span class="s">fi
</span></span></span><span class="line"><span class="cl"><span class="s">for i in $*;do
</span></span></span><span class="line"><span class="cl"><span class="s">  if [ &#34;$i&#34; = &#34;-rf&#34; ];then continue;fi
</span></span></span><span class="line"><span class="cl"><span class="s">  # 防止误操作
</span></span></span><span class="line"><span class="cl"><span class="s">  if [ &#34;$i&#34; = &#34;/&#34; ];then echo &#39;# Danger delete command, Not delete / directory!&#39;;exit -1;fi
</span></span></span><span class="line"><span class="cl"><span class="s">  #定义秒时间戳
</span></span></span><span class="line"><span class="cl"><span class="s">  STAMP=$(date +%s)
</span></span></span><span class="line"><span class="cl"><span class="s">  #得到文件名称(非文件夹)，参考man basename
</span></span></span><span class="line"><span class="cl"><span class="s">  fileName=$(basename $i)
</span></span></span><span class="line"><span class="cl"><span class="s">  #将输入的参数，对应文件mv至.trash目录，文件后缀，为当前的时间戳
</span></span></span><span class="line"><span class="cl"><span class="s">  mv $i ${TRASH_DIR}/${fileName}.${STAMP}
</span></span></span><span class="line"><span class="cl"><span class="s">done
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">sudo chmod +775 /usr/local/bin/remove.sh /etc/profile.d/alias.sh /etc/profile.d/history-record.sh
</span></span><span class="line"><span class="cl">sudo chmod a+x /usr/local/bin/remove.sh /etc/profile.d/alias.sh /etc/profile.d/history-record.sh
</span></span><span class="line"><span class="cl"><span class="nb">source</span> /etc/profile.d/alias.sh  /etc/profile.d/history-record.sh
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (2) 解决普通定时任务无法后台定时执行</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] 解决普通定时任务无法后台定时执行 &#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">linenumber</span><span class="o">=</span><span class="sb">`</span>expr <span class="k">$(</span>egrep -n <span class="s2">&#34;pam_unix.so\s</span>$<span class="s2">&#34;</span> /etc/pam.d/common-session-noninteractive <span class="p">|</span> cut -f <span class="m">1</span> -d <span class="s2">&#34;:&#34;</span><span class="k">)</span> - 2<span class="sb">`</span>
</span></span><span class="line"><span class="cl">sudo sed -ri <span class="s2">&#34;</span><span class="si">${</span><span class="nv">linenumber</span><span class="si">}</span><span class="s2">a session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid&#34;</span> /etc/pam.d/common-session-noninteractive
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (3) 解决 ubuntu20.04 multipath add missing path 错误</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 添加以下内容,sda视本地环境做调整</span>
</span></span><span class="line"><span class="cl">tee -a /etc/multipath.conf <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">blacklist {
</span></span></span><span class="line"><span class="cl"><span class="s">  devnode &#34;^sda&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">}
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 重启multipath-tools服务</span>
</span></span><span class="line"><span class="cl">sudo service multipath-tools restart
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (4) 禁用 Ubuntu 中的 cloud-init</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 在 /etc/cloud 目录下创建 cloud-init.disabled 文件,注意重启后生效</span>
</span></span><span class="line"><span class="cl">sudo touch /etc/cloud/cloud-init.disabled
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: os::optimizationn</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 操作系统优化设置(内核参数)</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">os::optimizationn <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] 正在进行操作系统内核参数优化设置.......&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (1) 系统内核参数的配置(/etc/sysctl.conf)</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] 系统内核参数的配置/etc/sysctl.conf&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># /etc/sysctl.d/99-kubernetes-cri.conf</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?net.ipv4.ip_forward.*&#34;</span> /etc/sysctl.conf <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s|^(#)?net.ipv4.ip_forward.*|net.ipv4.ip_forward = 1|g&#34;</span>  /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;net.ipv4.ip_forward = 1&#34;</span> &gt;&gt; /etc/sysctl.conf
</span></span><span class="line"><span class="cl"><span class="c1"># egrep -q &#34;^(#)?net.bridge.bridge-nf-call-ip6tables.*&#34; /etc/sysctl.conf &amp;&amp; sed -ri &#34;s|^(#)?net.bridge.bridge-nf-call-ip6tables.*|net.bridge.bridge-nf-call-ip6tables = 1|g&#34; /etc/sysctl.conf || echo &#34;net.bridge.bridge-nf-call-ip6tables = 1&#34; &gt;&gt; /etc/sysctl.conf </span>
</span></span><span class="line"><span class="cl"><span class="c1"># egrep -q &#34;^(#)?net.bridge.bridge-nf-call-iptables.*&#34; /etc/sysctl.conf &amp;&amp; sed -ri &#34;s|^(#)?net.bridge.bridge-nf-call-iptables.*|net.bridge.bridge-nf-call-iptables = 1|g&#34; /etc/sysctl.conf || echo &#34;net.bridge.bridge-nf-call-iptables = 1&#34; &gt;&gt; /etc/sysctl.conf</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?net.ipv6.conf.all.disable_ipv6.*&#34;</span> /etc/sysctl.conf <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s|^(#)?net.ipv6.conf.all.disable_ipv6.*|net.ipv6.conf.all.disable_ipv6 = 1|g&#34;</span> /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;net.ipv6.conf.all.disable_ipv6 = 1&#34;</span> &gt;&gt; /etc/sysctl.conf
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?net.ipv6.conf.default.disable_ipv6.*&#34;</span> /etc/sysctl.conf <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s|^(#)?net.ipv6.conf.default.disable_ipv6.*|net.ipv6.conf.default.disable_ipv6 = 1|g&#34;</span> /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;net.ipv6.conf.default.disable_ipv6 = 1&#34;</span> &gt;&gt; /etc/sysctl.conf
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?net.ipv6.conf.lo.disable_ipv6.*&#34;</span> /etc/sysctl.conf <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s|^(#)?net.ipv6.conf.lo.disable_ipv6.*|net.ipv6.conf.lo.disable_ipv6 = 1|g&#34;</span> /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;net.ipv6.conf.lo.disable_ipv6 = 1&#34;</span> &gt;&gt; /etc/sysctl.conf
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?net.ipv6.conf.all.forwarding.*&#34;</span> /etc/sysctl.conf <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s|^(#)?net.ipv6.conf.all.forwarding.*|net.ipv6.conf.all.forwarding = 1|g&#34;</span> /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;net.ipv6.conf.all.forwarding = 1&#34;</span>  &gt;&gt; /etc/sysctl.conf
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^(#)?vm.max_map_count.*&#34;</span> /etc/sysctl.conf <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s|^(#)?vm.max_map_count.*|vm.max_map_count = 262144|g&#34;</span> /etc/sysctl.conf <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;vm.max_map_count = 262144&#34;</span>  &gt;&gt; /etc/sysctl.conf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">tee -a /etc/sysctl.conf <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s"># 调整提升服务器负载能力之外,还能够防御小流量的Dos、CC和SYN攻击
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_syncookies = 1
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_tw_reuse = 1
</span></span></span><span class="line"><span class="cl"><span class="s"># net.ipv4.tcp_tw_recycle = 1
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_fin_timeout = 60
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_synack_retries = 1
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_syn_retries = 1
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_fastopen = 3
</span></span></span><span class="line"><span class="cl"><span class="s"># 优化TCP的可使用端口范围及提升服务器并发能力(注意一般流量小的服务器上没必要设置如下参数)
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_keepalive_time = 7200
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_max_syn_backlog = 8192
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.tcp_max_tw_buckets = 16384
</span></span></span><span class="line"><span class="cl"><span class="s">net.ipv4.ip_local_port_range = 1024 65535
</span></span></span><span class="line"><span class="cl"><span class="s"># 优化核套接字TCP的缓存区
</span></span></span><span class="line"><span class="cl"><span class="s">net.core.netdev_max_backlog = 8192
</span></span></span><span class="line"><span class="cl"><span class="s">net.core.somaxconn = 8192
</span></span></span><span class="line"><span class="cl"><span class="s">net.core.rmem_max = 12582912
</span></span></span><span class="line"><span class="cl"><span class="s">net.core.rmem_default = 6291456
</span></span></span><span class="line"><span class="cl"><span class="s">net.core.wmem_max = 12582912
</span></span></span><span class="line"><span class="cl"><span class="s">net.core.wmem_default = 6291456
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (2) Linux 系统的最大进程数和最大文件打开数限制</span>
</span></span><span class="line"><span class="cl">log::info <span class="s2">&#34;[-] Linux 系统的最大进程数和最大文件打开数限制&#34;</span>
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*ulimit -HSn\s+\w+.*</span>$<span class="s2">&#34;</span> /etc/profile <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*ulimit -HSn\s+\w+.*</span>$<span class="s2">/ulimit -HSn 65535/&#34;</span> /etc/profile <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;ulimit -HSn 65535&#34;</span> &gt;&gt; /etc/profile
</span></span><span class="line"><span class="cl">egrep -q <span class="s2">&#34;^\s*ulimit -HSu\s+\w+.*</span>$<span class="s2">&#34;</span> /etc/profile <span class="o">&amp;&amp;</span> sed -ri <span class="s2">&#34;s/^\s*ulimit -HSu\s+\w+.*</span>$<span class="s2">/ulimit -HSu 65535/&#34;</span> /etc/profile <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;ulimit -HSu 65535&#34;</span> &gt;&gt; /etc/profile
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">tee -a /etc/security/limits.conf <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s"># ulimit -HSn 65535
</span></span></span><span class="line"><span class="cl"><span class="s"># ulimit -HSu 65535
</span></span></span><span class="line"><span class="cl"><span class="s">*  soft  nofile  65535
</span></span></span><span class="line"><span class="cl"><span class="s">*  hard  nofile  65535
</span></span></span><span class="line"><span class="cl"><span class="s">*  soft  nproc   65535
</span></span></span><span class="line"><span class="cl"><span class="s">*  hard  nproc   65535
</span></span></span><span class="line"><span class="cl"><span class="s"># End of file
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sed -i &#34;/# End/i *  soft  nproc   65535&#34; /etc/security/limits.conf</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sed -i &#34;/# End/i *  hard  nproc   65535&#34; /etc/security/limits.conf</span>
</span></span><span class="line"><span class="cl">sysctl -p
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 需重启生效</span>
</span></span><span class="line"><span class="cl">reboot
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: system::swap</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: Liunx 系统创建SWAP交换分区(默认2G)</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: $1(几G)</span>
</span></span><span class="line"><span class="cl">system::swap <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">[</span> -e <span class="nv">$1</span> <span class="o">]</span><span class="p">;</span><span class="k">then</span>
</span></span><span class="line"><span class="cl">    sudo dd <span class="k">if</span><span class="o">=</span>/dev/zero <span class="nv">of</span><span class="o">=</span>/swapfile <span class="nv">bs</span><span class="o">=</span><span class="m">1024</span> <span class="nv">count</span><span class="o">=</span><span class="m">2097152</span>   <span class="c1"># 2G Swap 分区 1024 * 1024 , centos 以 1000 为标准</span>
</span></span><span class="line"><span class="cl">  <span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nv">number</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">1</span><span class="si">}</span><span class="s2">*1024*1024&#34;</span><span class="p">|</span>bc<span class="k">)</span>
</span></span><span class="line"><span class="cl">    sudo dd <span class="k">if</span><span class="o">=</span>/dev/zero <span class="nv">of</span><span class="o">=</span>/swapfile <span class="nv">bs</span><span class="o">=</span><span class="m">1024</span> <span class="nv">count</span><span class="o">=</span><span class="si">${</span><span class="nv">number</span><span class="si">}</span>   <span class="c1"># 2G Swap 分区 1024 * 1024 , centos 以 1000 为标准</span>
</span></span><span class="line"><span class="cl">  <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  sudo mkswap /swapfile <span class="o">&amp;&amp;</span> sudo swapon /swapfile
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">[</span> <span class="k">$(</span>grep -c <span class="s2">&#34;/swapfile&#34;</span> /etc/fstab<span class="k">)</span> -eq <span class="m">0</span> <span class="o">]</span><span class="p">;</span><span class="k">then</span>
</span></span><span class="line"><span class="cl">sudo tee -a /etc/fstab <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">/swapfile swap swap default 0 0
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">sudo swapon --show <span class="o">&amp;&amp;</span> sudo free -h
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: software::Java</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: java 环境安装配置</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">software::Java <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># 基础变量</span>
</span></span><span class="line"><span class="cl">  <span class="nv">JAVA_FILE</span><span class="o">=</span><span class="s2">&#34;/root/Downloads/jdk-8u211-linux-x64.tar.gz&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nv">JAVA_SRC</span><span class="o">=</span><span class="s2">&#34;/usr/local/&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nv">JAVA_DIR</span><span class="o">=</span><span class="s2">&#34;/usr/local/jdk&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># 环境配置</span>
</span></span><span class="line"><span class="cl">  sudo tar -zxvf <span class="si">${</span><span class="nv">JAVA_FILE</span><span class="si">}</span> -C <span class="si">${</span><span class="nv">JAVA_SRC</span><span class="si">}</span>
</span></span><span class="line"><span class="cl">  sudo rm -rf /usr/local/jdk 
</span></span><span class="line"><span class="cl">  <span class="nv">JAVA_SRC</span><span class="o">=</span><span class="k">$(</span>ls /usr/local/ <span class="p">|</span> grep <span class="s2">&#34;jdk&#34;</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">  sudo ln -s <span class="si">${</span><span class="nv">JAVA_SRC</span><span class="si">}</span> <span class="si">${</span><span class="nv">JAVA_DIR</span><span class="si">}</span>
</span></span><span class="line"><span class="cl">  <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">JAVA_DIR</span><span class="si">}</span>/bin:<span class="si">${</span><span class="nv">PATH</span><span class="si">}</span>
</span></span><span class="line"><span class="cl">  sudo cp /etc/profile /etc/profile.<span class="k">$(</span>date +%Y%m%d-%H%M%S<span class="k">)</span>.bak
</span></span><span class="line"><span class="cl">  sudo tee -a /etc/profile <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">export JAVA_HOME=/usr/local/jdk
</span></span></span><span class="line"><span class="cl"><span class="s">export JRE_HOME=/usr/local/jdk/jre
</span></span></span><span class="line"><span class="cl"><span class="s">export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
</span></span></span><span class="line"><span class="cl"><span class="s">export PATH=$JAVA_HOME/bin:$PATH
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">  java -version
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: software::docker</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: 软件安装之Docker安装</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 帮助: https://docs.docker.com/engine/install/ubuntu/</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Ubuntu Focal 20.04 (LTS)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Ubuntu Bionic 18.04 (LTS)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Ubuntu Xenial 16.04 (LTS)</span>
</span></span><span class="line"><span class="cl"><span class="k">function</span> InstallDocker<span class="o">(){</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># 1.卸载旧版本 </span>
</span></span><span class="line"><span class="cl">  sudo apt-get remove docker docker-engine docker.io containerd runc
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="c1"># 2.更新apt包索引并安装包以允许apt在HTTPS上使用存储库</span>
</span></span><span class="line"><span class="cl">  sudo apt-get install -y <span class="se">\
</span></span></span><span class="line"><span class="cl">    apt-transport-https <span class="se">\
</span></span></span><span class="line"><span class="cl">    ca-certificates <span class="se">\
</span></span></span><span class="line"><span class="cl">    curl <span class="se">\
</span></span></span><span class="line"><span class="cl">    gnupg-agent <span class="se">\
</span></span></span><span class="line"><span class="cl">    software-properties-common
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># 3.添加Docker官方GPG密钥 # -fsSL</span>
</span></span><span class="line"><span class="cl">  sudo curl  https://download.docker.com/linux/ubuntu/gpg <span class="p">|</span> sudo apt-key add -
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># 4.通过搜索指纹的最后8个字符进行密钥验证</span>
</span></span><span class="line"><span class="cl">  sudo apt-key fingerprint 0EBFCD88
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># 5.设置稳定存储库</span>
</span></span><span class="line"><span class="cl">  sudo add-apt-repository <span class="se">\
</span></span></span><span class="line"><span class="cl">   <span class="s2">&#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu \
</span></span></span><span class="line"><span class="cl"><span class="s2">   </span><span class="k">$(</span>lsb_release -cs<span class="k">)</span><span class="s2"> \
</span></span></span><span class="line"><span class="cl"><span class="s2">   stable&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># 6.Install Docker Engine 默认最新版本</span>
</span></span><span class="line"><span class="cl">  sudo apt-get update <span class="o">&amp;&amp;</span> sudo apt-get install -y docker-ce<span class="o">=</span>5:20.10.7~3-0~ubuntu-focal docker-ce-cli<span class="o">=</span>5:20.10.7~3-0~ubuntu-focal containerd.io docker-compose
</span></span><span class="line"><span class="cl">  <span class="c1"># - 强制IPv4</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># sudo apt-get -o Acquire::ForceIPv4=true  install -y docker-ce=5:19.03.15~3-0~ubuntu-focal docker-ce-cli=5:19.03.15~3-0~ubuntu-focal containerd.io docker-compose</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># 7.安装特定版本的Docker引擎，请在repo中列出可用的版本</span>
</span></span><span class="line"><span class="cl">  apt-cache madison docker-ce
</span></span><span class="line"><span class="cl">  <span class="c1"># docker-ce | 5:20.10.6~3-0~ubuntu-focal| https://download.docker.com/linux/ubuntu focal/stable amd64 Packages</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># docker-ce | 5:19.03.15~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># 使用第二列中的版本字符串安装特定的版本，例如:5:18.09.1~3-0~ubuntu-xenial。</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># $sudo apt-get install docker-ce=&lt;VERSION_STRING&gt; docker-ce-cli=&lt;VERSION_STRING&gt; containerd.io</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">#8.将当前用户加入docker用户组然后重新登陆当前用户使得低权限用户</span>
</span></span><span class="line"><span class="cl">  sudo gpasswd -a <span class="si">${</span><span class="nv">USER</span><span class="si">}</span> docker
</span></span><span class="line"><span class="cl">  <span class="c1"># sudo gpasswd -a weiyigeek docker</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">#9.加速器建立</span>
</span></span><span class="line"><span class="cl">  mkdir -vp /etc/docker/
</span></span><span class="line"><span class="cl">sudo tee /etc/docker/daemon.json <span class="s">&lt;&lt;-&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">{
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;registry-mirrors&#34;: [&#34;https://xlx9erfu.mirror.aliyuncs.com&#34;],
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;exec-opts&#34;: [&#34;native.cgroupdriver=systemd&#34;],
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;storage-driver&#34;: &#34;overlay2&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;log-driver&#34;: &#34;json-file&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;log-level&#34;: &#34;warn&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;log-opts&#34;: {
</span></span></span><span class="line"><span class="cl"><span class="s">    &#34;max-size&#34;: &#34;100m&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s">    &#34;max-file&#34;: &#34;10&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">  },
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;live-restore&#34;: true,
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;dns&#34;: [&#34;192.168.12.254&#34;,&#34;223.6.6.6&#34;],
</span></span></span><span class="line"><span class="cl"><span class="s">  &#34;insecure-registries&#34;: [ &#34;harbor.weiyigeek.top&#34;,&#34;harbor.cloud&#34;]
</span></span></span><span class="line"><span class="cl"><span class="s">}
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># &#34;data-root&#34;:&#34;/monitor/container&#34;,</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># &#34;insecure-registries&#34;: [&#34;harbor.weiyigeek.top&#34;]</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># 9.自启与启动</span>
</span></span><span class="line"><span class="cl">  sudo systemctl daemon-reload
</span></span><span class="line"><span class="cl">  sudo systemctl <span class="nb">enable</span> docker 
</span></span><span class="line"><span class="cl">  sudo systemctl restart docker
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># 10.退出登陆生效</span>
</span></span><span class="line"><span class="cl">  <span class="nb">exit</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 名称: disk::Lvsmanager</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 用途: uBuntu操作系统磁盘 LVS 逻辑卷添加与配置(扩容流程)</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 参数: 无</span>
</span></span><span class="line"><span class="cl">disk::Lvsmanager <span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;\n分区信息:&#34;</span>
</span></span><span class="line"><span class="cl">  sudo df -Th
</span></span><span class="line"><span class="cl">  sudo lsblk
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;\n 磁盘信息：&#34;</span>
</span></span><span class="line"><span class="cl">  sudo fdisk -l
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;\n PV物理卷查看：&#34;</span>
</span></span><span class="line"><span class="cl">  sudo pvscan
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;\n vgs虚拟卷查看：&#34;</span>
</span></span><span class="line"><span class="cl">  sudo vgs
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;\n lvscan逻辑卷扫描:&#34;</span>
</span></span><span class="line"><span class="cl">  sudo lvscan
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;\n 分区扩展&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;Ubuntu \n lvextend -L +74G /dev/ubuntu-vg/ubuntu-lv&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;lsblk&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;ubuntu general \n # resize2fs -p -F /dev/mapper/ubuntu--vg-ubuntu--lv&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 安全加固过程临时文件清理为基线镜像做准备</span>
</span></span><span class="line"><span class="cl"><span class="nb">unalias</span> rm
</span></span><span class="line"><span class="cl">find ~/.trash/* -delete
</span></span><span class="line"><span class="cl">find /home/ -type d -name .trash -exec find <span class="o">{}</span> -delete <span class="se">\;</span>
</span></span><span class="line"><span class="cl">find /var/log -name <span class="s2">&#34;*.gz&#34;</span> -delete
</span></span><span class="line"><span class="cl">find /var/log -name <span class="s2">&#34;*log.*&#34;</span> -delete
</span></span><span class="line"><span class="cl">find /var/log -name <span class="s2">&#34;vmware-*.*.log&#34;</span> -delete
</span></span><span class="line"><span class="cl">find /var/log -name <span class="s2">&#34;*.log-*&#34;</span> -delete
</span></span><span class="line"><span class="cl">find /var/log -name <span class="s2">&#34;*.log&#34;</span> -exec truncate -s <span class="m">0</span> <span class="o">{}</span> <span class="se">\;</span>
</span></span><span class="line"><span class="cl">find /tmp/* -delete
</span></span></code></pre></div>
        
        <hr><p>本文2023-08-16首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-08-16</p>]]></description><category>Linux</category></item><item><title>使用 Linux 网络虚拟化技术探究容器网络原理</title><link>https://hugo.kkun.top/post/%E4%BD%BF%E7%94%A8-linux-%E7%BD%91%E7%BB%9C%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%A9%B6%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C%E5%8E%9F%E7%90%86/</link><pubDate>Mon, 10 Apr 2023 14:38:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/%E4%BD%BF%E7%94%A8-linux-%E7%BD%91%E7%BB%9C%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%A9%B6%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C%E5%8E%9F%E7%90%86/</guid><description>
<![CDATA[<h1>使用 Linux 网络虚拟化技术探究容器网络原理</h1><p>作者：你的名字（your@email.com）</p>
        
          <p>在 <a href="https://blog.kkun.site/2023/04/10/%E4%BD%BF%E7%94%A8%20Go%20%E5%92%8C%20Linux%20Kernel%20%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%A9%B6%E5%AE%B9%E5%99%A8%E5%8C%96%E5%8E%9F%E7%90%86/">使用 Go 和 Linux Kernel 技术探究容器化原理</a> 一文中，我们揭秘了容器的本质就是一个特殊的进程，特殊在为其创建了 NameSpace 隔离运行环境，并用 Cgroups 为其控制资源开销。</p>
<p>借助这两个底层技术，我们可以成功实现应用容器化，但如何让多个容器在网络环境不互相干扰的情况下还能互相通信，让容器可以访问外部网络，让外部网络可以访问特定容器等等的这些容器的<strong>网络问题</strong>还得再利用一些 <strong>Linux 网络虚拟化技术</strong>。</p>
        
        <hr><p>本文2023-04-10首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-04-10</p>]]></description><category>Linux</category><category>containerd</category></item><item><title>keepalived检测api心跳脚本</title><link>https://hugo.kkun.top/post/keepalived%E6%A3%80%E6%B5%8Bapi%E5%BF%83%E8%B7%B3%E8%84%9A%E6%9C%AC/</link><pubDate>Mon, 10 Apr 2023 14:38:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/keepalived%E6%A3%80%E6%B5%8Bapi%E5%BF%83%E8%B7%B3%E8%84%9A%E6%9C%AC/</guid><description>
<![CDATA[<h1>keepalived检测api心跳脚本</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="形式一">
<a class="header-anchor" href="#%e5%bd%a2%e5%bc%8f%e4%b8%80"></a>
形式一
</h2><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">err</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> k in <span class="k">$(</span>seq <span class="m">1</span> 3<span class="k">)</span>
</span></span><span class="line"><span class="cl"><span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nv">check_code</span><span class="o">=</span><span class="k">$(</span>pgrep haproxy<span class="k">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$check_code</span> <span class="o">==</span> <span class="s2">&#34;&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="nv">err</span><span class="o">=</span><span class="k">$(</span>expr <span class="nv">$err</span> + 1<span class="k">)</span>
</span></span><span class="line"><span class="cl">        sleep <span class="m">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">continue</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span>
</span></span><span class="line"><span class="cl">        <span class="nv">err</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl">        <span class="nb">break</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="nv">$err</span> !<span class="o">=</span> <span class="s2">&#34;0&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;systemctl stop keepalived&#34;</span>
</span></span><span class="line"><span class="cl">    /usr/bin/systemctl stop keepalived
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></div><h2 id="形式二">
<a class="header-anchor" href="#%e5%bd%a2%e5%bc%8f%e4%ba%8c"></a>
形式二
</h2><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/sh
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">errorExit<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl"> <span class="nb">echo</span> <span class="s2">&#34;*** </span><span class="nv">$*</span><span class="s2">&#34;</span> 1&gt;<span class="p">&amp;</span><span class="m">2</span>
</span></span><span class="line"><span class="cl"> <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">curl --silent --max-time <span class="m">2</span> --insecure https://localhost:<span class="si">${</span><span class="nv">APISERVER_DEST_PORT</span><span class="si">}</span>/ -o /dev/null <span class="o">||</span> errorExit <span class="s2">&#34;Error GET https://localhost:</span><span class="si">${</span><span class="nv">APISERVER_DEST_PORT</span><span class="si">}</span><span class="s2">/&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> ip addr <span class="p">|</span> grep -q <span class="si">${</span><span class="nv">APISERVER_VIP</span><span class="si">}</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl"> curl --silent --max-time <span class="m">2</span> --insecure https://<span class="si">${</span><span class="nv">APISERVER_VIP</span><span class="si">}</span>:<span class="si">${</span><span class="nv">APISERVER_DEST_PORT</span><span class="si">}</span>/ -o /dev/null <span class="o">||</span> errorExit <span class="s2">&#34;Error GET https://</span><span class="si">${</span><span class="nv">APISERVER_VIP</span><span class="si">}</span><span class="s2">:</span><span class="si">${</span><span class="nv">APISERVER_DEST_PORT</span><span class="si">}</span><span class="s2">/&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">&lt;!-- 它也有一些基础变量需要填充:
</span></span><span class="line"><span class="cl">• <span class="si">${</span><span class="nv">APISERVER_VIP</span><span class="si">}</span> 是 keepalive 集群主机之间协商的虚拟IP地址。
</span></span><span class="line"><span class="cl">• <span class="si">${</span><span class="nv">APISERVER_DEST_PORT</span><span class="si">}</span> 是Kubernetes与API Server通信的端口。 --&gt;
</span></span></code></pre></div>
        
        <hr><p>本文2023-04-10首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-04-10</p>]]></description><category>Linux</category><category>containerd</category></item><item><title>使用 Go 和 Linux Kernel 技术探究容器化原理</title><link>https://hugo.kkun.top/post/%E4%BD%BF%E7%94%A8-go-%E5%92%8C-linux-kernel-%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%A9%B6%E5%AE%B9%E5%99%A8%E5%8C%96%E5%8E%9F%E7%90%86/</link><pubDate>Mon, 10 Apr 2023 14:31:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/%E4%BD%BF%E7%94%A8-go-%E5%92%8C-linux-kernel-%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%A9%B6%E5%AE%B9%E5%99%A8%E5%8C%96%E5%8E%9F%E7%90%86/</guid><description>
<![CDATA[<h1>使用 Go 和 Linux Kernel 技术探究容器化原理</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="容器的优势">
<a class="header-anchor" href="#%e5%ae%b9%e5%99%a8%e7%9a%84%e4%bc%98%e5%8a%bf"></a>
容器的优势
</h2><p><img src="https://gh-proxy.com/https://raw.githubusercontent.com/Ghostpanter/tuchuang/main/img/202304040931797.png" alt="图片"></p>
<p>传统模式的部署，直接将多个应用运行在物理服务器上，如果其中一个应用占用了大部分资源，可能会导致其他应用的性能下降。</p>
<p>虚拟化部署时代，可以在单个物理服务器的 CPU 上运行多个虚拟机（VM），每个 VM 是一台完整的计算机，在虚拟化硬件之上运行所有组件（包括了操作系统）。因此，可以让不同的应用在 VM 之间安全地隔离运行，更好地利用物理服务器上的资源。</p>
        
        <hr><p>本文2023-04-10首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-04-10</p>]]></description><category>Linux</category><category>containerd</category></item><item><title>企业如何使用Harbor提高生产力？</title><link>https://hugo.kkun.top/post/%E4%BC%81%E4%B8%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8harbor%E6%8F%90%E9%AB%98%E7%94%9F%E4%BA%A7%E5%8A%9B/</link><pubDate>Mon, 10 Apr 2023 09:38:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/%E4%BC%81%E4%B8%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8harbor%E6%8F%90%E9%AB%98%E7%94%9F%E4%BA%A7%E5%8A%9B/</guid><description>
<![CDATA[<h1>企业如何使用Harbor提高生产力？</h1><p>作者：你的名字（your@email.com）</p>
        
          <p>Harbor是一款开源的企业级Docker Registry服务，它提供了一个安全、可靠、高效的Registry管理平台，支持多租户、LDAP、AD认证等特性。它主要用于管理、存储、分发Docker镜像，并提供镜像的安全性、可追溯性、可管理性等方面的支持。本文将详细介绍Harbor的架构设计、组件功能、性能特点以及使用场景等方面的内容。</p>
        
        <hr><p>本文2023-04-10首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-04-10</p>]]></description><category>Linux</category><category>Harbor</category></item><item><title>Jenkins 自动化部署实例</title><link>https://hugo.kkun.top/post/jenkins-%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2%E5%AE%9E%E4%BE%8B/</link><pubDate>Fri, 03 Mar 2023 10:43:13 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/jenkins-%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2%E5%AE%9E%E4%BE%8B/</guid><description>
<![CDATA[<h1>Jenkins 自动化部署实例</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="前言">
<a class="header-anchor" href="#%e5%89%8d%e8%a8%80"></a>
前言
</h2><p>你平常在做自己的项目时，是否有过部署项目太麻烦的想法？如果你是单体项目，可能没什么感触，但如果你是微服务项目，相信你应该是有过这种感触的。</p>
        
        <hr><p>本文2023-03-03首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-03-03</p>]]></description><category>Linux</category><category>Jenkins</category></item><item><title>Nginx高可用方案</title><link>https://hugo.kkun.top/post/nginx%E9%AB%98%E5%8F%AF%E7%94%A8%E6%96%B9%E6%A1%88/</link><pubDate>Tue, 31 Jan 2023 13:42:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/nginx%E9%AB%98%E5%8F%AF%E7%94%A8%E6%96%B9%E6%A1%88/</guid><description>
<![CDATA[<h1>Nginx高可用方案</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="准备工作">
<a class="header-anchor" href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c"></a>
准备工作
</h2><p>192.168.16.128</p>
<p>192.168.16.129</p>
<p>两台虚拟机。安装好Nginx</p>
<h2 id="安装nginx">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85nginx"></a>
安装Nginx
</h2><p>更新yum源文件：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
</span></span><span class="line"><span class="cl">wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
</span></span></code></pre></div><p>安装Nginx:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">yum -y install  nginx
</span></span></code></pre></div><p>操作命令：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl start nginx<span class="p">;</span> <span class="c1">#启动Nginx</span>
</span></span><span class="line"><span class="cl">systemctl stop nginx<span class="p">;</span> <span class="c1">#停止Nginx</span>
</span></span></code></pre></div><h2 id="什么是高可用">
<a class="header-anchor" href="#%e4%bb%80%e4%b9%88%e6%98%af%e9%ab%98%e5%8f%af%e7%94%a8"></a>
什么是高可用？
</h2><p>高可用HA（High Availability）是分布式系统架构设计中必须考虑的因素之一，它通常是指，通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务，那么这个可用性则是百分之百，但是天有不测风云。所以我们只能尽可能的去减少服务的故障。</p>
        
        <hr><p>本文2023-01-31首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-01-31</p>]]></description><category>Linux</category><category>Nginx</category></item><item><title>Linux SSH 登录错误超时次数自动加入ip黑名单</title><link>https://hugo.kkun.top/post/linux%E7%99%BB%E5%BD%95%E8%B6%85%E6%AC%A1%E6%95%B0%E8%87%AA%E5%8A%A8%E6%8B%89%E9%BB%91/</link><pubDate>Sun, 29 Jan 2023 15:36:53 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/linux%E7%99%BB%E5%BD%95%E8%B6%85%E6%AC%A1%E6%95%B0%E8%87%AA%E5%8A%A8%E6%8B%89%E9%BB%91/</guid><description>
<![CDATA[<h1>Linux SSH 登录错误超时次数自动加入ip黑名单</h1><p>作者：你的名字（your@email.com）</p>
        
          <p>Linux 系统SSH 登录失败的内容会记录到/var/log/secure文件，通过查找关键字 Failed，可以定位到这些异常的IP地址，比如：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="o">[</span>root@ghost ~<span class="o">]</span><span class="c1"># cat /var/log/secure |grep Failed               #查看所有的异常IP</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>root@ghost ~<span class="o">]</span><span class="c1"># cat /var/log/secure |grep 181.204.166.58       #查看指定的异常IP</span>
</span></span></code></pre></div><p>相关文件 ：/etc/hosts.deny 禁止哪些IP访问主机:</p>
        
        <hr><p>本文2023-01-29首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-01-29</p>]]></description><category>Linux</category></item><item><title>pdns高可用高并发部署</title><link>https://hugo.kkun.top/post/pdns%E9%AB%98%E5%8F%AF%E7%94%A8%E9%AB%98%E5%B9%B6%E5%8F%91%E9%83%A8%E7%BD%B2/</link><pubDate>Wed, 04 Jan 2023 10:14:51 +0000</pubDate><author>your@email.com (你的名字)</author><guid>https://hugo.kkun.top/post/pdns%E9%AB%98%E5%8F%AF%E7%94%A8%E9%AB%98%E5%B9%B6%E5%8F%91%E9%83%A8%E7%BD%B2/</guid><description>
<![CDATA[<h1>pdns高可用高并发部署</h1><p>作者：你的名字（your@email.com）</p>
        
          <h2 id="企业dns系列一powerdns-authoritative和recursor搭建">
<a class="header-anchor" href="#%e4%bc%81%e4%b8%9adns%e7%b3%bb%e5%88%97%e4%b8%80powerdns-authoritative%e5%92%8crecursor%e6%90%ad%e5%bb%ba"></a>
企业DNS系列一PowerDNS Authoritative和Recursor搭建
</h2><p><img src="https://gh-proxy.com/https://raw.githubusercontent.com/Ghostpanter/tuchuang/main/img/202210131012603.png" alt="img">在企业私有云和公有云环境中，DNS服务的重要性不言而喻，企业往往需要搭建一套稳定可靠的DNS系统，本系列Blog将通过开源的PowerDNS全家桶搭建基于Linux平台的、具备高性能、高可靠性的企业DNS系统。</p>
<p>2022年月8月12日更新：在企业使用GSLB（全局负载均衡）进行应用保护时，PowerDNS权威服务器CNAME和NS解析正常，但PowerDNS递归服务器无法正常工作，这是由于递归服务器默认不对私有IP地址进行二次解析，需要修改PowerDNS递归服务器的“dont-query=127.0.0.1/8”</p>
        
        <hr><p>本文2023-01-04首发于<a href='https://hugo.kkun.top/'>我的博客</a>，最后修改于2023-01-04</p>]]></description><category>Linux</category><category>DNS</category></item></channel></rss>