首页
Linux常用
docker常用
关于
Search
1
docker安装MDCX
286 阅读
2
iStoreOS上使用WireGuard
234 阅读
3
麒麟KylinV10离线下载安装包及安装
223 阅读
4
麒麟v10系统openssh升级OpenSSH_10.0p2-OpenSSL 3.4.2
93 阅读
5
UNRAID增加和缩小虚拟机虚拟磁盘大小
73 阅读
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
Tomcat
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
硬件
登录
Search
标签搜索
nginx
数据库
unraid
PVE
麒麟
dockerfile
同步
wow服务器
装机硬件
宏
v2ray
直通
电视盒子
相册
黑裙7.0.1
远程穿透
定时
ssh
emby
symlink
奥黛丽·逐爱者
累计撰写
136
篇文章
累计收到
7
条评论
首页
栏目
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
Tomcat
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
硬件
页面
Linux常用
docker常用
关于
搜索到
136
篇与
奥黛丽·逐爱者
的结果
2026-05-27
SSLH端口复用+SSH隧道
数据库工具 → 本地端口3306 → SSH隧道 → 服务器443端口 → sslh识别为SSH → sshd → 转发到MySQLsslh的配置version: '3.3' services: sslh: image: ghcr.io/yrutschle/sslh:latest container_name: sslh restart: always network_mode: "host" command: --listen 0.0.0.0:38888 --ssh 127.0.0.1:22 --http 127.0.0.1:8888 --foreground一条命令建立隧道在终端执行(保持运行,不要关闭):ssh -L 3306:localhost:3306 -p 443 用户名@服务器IP -N建立好隧道就能直接用工具连接了。
2026年05月27日
10 阅读
0 评论
0 点赞
2026-05-22
【第23期】Linux系统初始化脚本:从裸机到生产级的一键方案
做运维这么多年,我见过太多这样的场景:新服务器到货,上架装好系统,丢那儿就不管了。等到业务跑上去,三天两头出状况——SSH被爆破、OOM被杀进程、磁盘写满没人管、连接数爆了服务直接挂。回过头一问:系统装完之后,你做了什么初始化?对方一脸茫然:装完不就用了么? 这就是问题所在。一个裸装的 Linux 系统,说白了就是一间毛坯房——能住人,但住得不舒服,也不安全。今天这篇,我就把这套压箱底的初始化脚本完整分享出来。从安全加固到性能调优,再到常用软件的自动化部署,一键跑完,你的系统就直接达到生产标准。 适用范围:CentOS 7/8/9、Rocky Linux、AlmaLinux、Ubuntu 20.04/22.04/24.04、Debian 11/12。脚本里会自动识别发行版,不用你操心。一、安全加固:别让服务器裸奔 安全这事儿,怎么强调都不为过。我见过一台新服务器,从装好系统到被黑客拿下,只用了不到48小时。攻击者扫到了默认22端口,用弱口令字典暴力破解,进去之后直接装了挖矿程序。等我们发现的时候,CPU已经满载跑了一个星期。 所以第一步,先把门焊死。 1.1 SSH 加固 SSH 是服务器的第一道门,也是最容易被盯上的一扇门。默认配置下,它几乎就是在向攻击者招手:端口22、允许root登录、密码认证。改起来其实很简单: # 备份原始配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 修改关键参数 sed -i 's/^#\?Port 22/Port 2222/' /etc/ssh/sshd_config sed -i 's/^#\?PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/^#\?X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config sed -i 's/^#\?MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config sed -i 's/^#\?LoginGraceTime 2m/LoginGraceTime 30/' /etc/ssh/sshd_config # 追加禁止空密码 echo 'PermitEmptyPasswords no' >> /etc/ssh/sshd_config # 重启生效 systemctl restart sshd 几个要点挨个说: • 改端口:把22改成2222(或者随便一个高位端口)。这不是什么高级安全手段,但能挡住90%以上的自动化扫描。那些扫22端口的脚本,可不会傻到从1扫到65535。 • 禁止 root 直登:这是铁律。先用普通用户登录,再 su 或 sudo 提权。就算密码泄露了,攻击者拿到的也是个低权限账号。 • 关闭密码认证:改用密钥登录。密钥的强度远比密码靠谱,而且丢了可以立刻吊销。 • 最大尝试次数:从6降到3,减少暴力破解的时间窗口。配合后面的 fail2ban,基本就把SSH爆破这条路堵死了。 1.2 配置密钥登录 禁用密码之前,得先配好密钥。不然把自己锁在外面,那可真叫一个尴尬: # 生成密钥对(本地电脑执行) ssh-keygen -t ed25519 -C "admin@company.com" # 复制公钥到服务器 ssh-copy-id -p 2222 user@server_ip # 验证密钥登录(关闭密码认证前务必测试!) ssh -p 2222 user@server_ip 这里推荐用 ed25519 算法,比传统的 RSA 更快更安全,密钥也更短。RSA 当然也能用,但已经是上一代方案了。 1.3 防火墙配置 防火墙不是万能的,但没有防火墙是万万不能的。很多人觉得云服务器有安全组就够了,这话没错,但主机层面的防火墙是最后一道防线。安全组是云厂商层面的,万一配置出错呢?多层防御总归更靠谱。 CentOS/RHEL 系列用 firewalld,Ubuntu/Debian 用 ufw: # CentOS/RHEL - firewalld systemctl enable firewalld systemctl start firewalld firewall-cmd --permanent --remove-service=ssh firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" accept' firewall-cmd --reload # Ubuntu/Debian - ufw apt install -y ufw ufw default deny incoming ufw default allow outgoing ufw allow 2222/tcp ufw allow 80/tcp ufw allow 443/tcp ufw allow from 10.0.0.0/8 ufw --force enable 这里有个很实用的技巧:允许内网段(比如 10.0.0.0/8)的全部流量。这样内网服务器之间通信不受限制,但来自外网的访问只能走开放的几个端口。 1.4 用户与权限管理 一个新系统,第一件事就是创建管理用户。永远不要用 root 跑业务,这不是建议,是规定: # 创建管理用户 useradd -m -s /bin/bash admin # 设置强密码(16位以上,包含大小写、数字、特殊字符) passwd admin # 添加到 wheel/sudo 组 usermod -aG wheel admin # CentOS/RHEL usermod -aG sudo admin # Ubuntu/Debian # 配置 sudo 免密码(可选,仅限密钥登录场景) echo 'admin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin # 锁定不需要的系统账号 for user in games lp news uucp proxy list irc gnats; do usermod -L $user 2>/dev/null done 密码策略也得配上。别指望用户自觉设置强密码,用 pam_pwquality 模块强制要求: # 密码复杂度策略 echo 'minlen=12' >> /etc/security/pwquality.conf echo 'minclass=3' >> /etc/security/pwquality.conf echo 'maxrepeat=3' >> /etc/security/pwquality.conf echo 'difok=5' >> /etc/security/pwquality.conf # 密码过期策略 sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/' /etc/login.defs sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN 12/' /etc/login.defs sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 14/' /etc/login.defs • minlen=12:密码最少12位 • minclass=3:至少包含3种字符类型(大写、小写、数字、特殊字符) • maxrepeat=3:不允许同一个字符连续出现3次以上 • difok=5:新密码必须与旧密码至少5个字符不同 • PASS_MAX_DAYS=90:密码90天强制更换 1.5 安装 fail2ban fail2ban 是个好东西。它监控日志文件,发现某个 IP 在短时间内多次认证失败,就直接把它拉进防火墙黑名单。简单、粗暴、有效: # CentOS/RHEL yum install -y epel-release yum install -y fail2ban # Ubuntu/Debian apt install -y fail2ban # 配置 cat > /etc/fail2ban/jail.local << 'EOF' [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 banaction = firewallcmd-ipset [sshd] enabled = true port = 2222 maxretry = 3 bantime = 86400 findtime = 300 EOF systemctl enable fail2ban systemctl start fail2ban 配置里的参数含义很简单:600秒内失败3次,封禁24小时。这招对付SSH爆破特别管用,日志里能看到大量被ban的IP,心里踏实。 1.6 系统安全基线 还有一些系统级别的安全设置,不起眼但很关键: # 禁止 Ctrl+Alt+Del 重启 systemctl mask ctrl-alt-del.target # 限制 su 命令只能被 wheel 组使用 sed -i 's/^#\?auth.*pam_wheel.so/\auth\trequired\tpam_wheel.so use_uid/' /etc/pam.d/su # 设置 umask echo 'umask 027' >> /etc/profile echo 'umask 027' >> /etc/bashrc # 锁定关键文件防止篡改 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 注意:如果需要添加用户,需要先 chattr -i 解锁 # 历史命令记录增强 echo 'export HISTSIZE=10000' >> /etc/profile echo 'export HISTFILESIZE=20000' >> /etc/profile echo 'export HISTTIMEFORMAT="%F %T "' >> /etc/profile echo 'export PROMPT_COMMAND="history -a"' >> /etc/profile # 禁用不用的文件系统模块 echo 'install cramfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install freevxfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install jffs2 /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install hfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install hfsplus /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install squashfs /bin/true' >> /etc/modprobe.d/disablefs.conf echo 'install udf /bin/true' >> /etc/modprobe.d/disablefs.conf 那个 chattr +i 要注意,锁定之后连 root 都不能修改这些文件。需要添加用户的时候,记得先 chattr -i 解锁,改完再锁回去。我一开始用这个功能的时候,就把自己坑过好几次。 二、内核参数调优:让系统跑得更快更稳 安全搞定了,接下来是性能。Linux 内核的参数默认值偏向保守,什么场景都能用,但什么场景都不是最优。调优的核心思路就一条:根据实际业务需求,把系统资源的利用效率拉到最高。 所有内核参数都写在 /etc/sysctl.conf 里,一条 sysctl -p 就能生效。下面是我经过多次实战打磨后的参数组合: cat >> /etc/sysctl.conf << 'EOF' # ===== 网络优化 ===== # 开启SYN Cookie,防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # SYN队列大小,默认128太小,调到1024 net.ipv4.tcp_max_syn_backlog = 1024 # 已建立连接队列 net.core.somaxconn = 2048 # TIME_WAIT状态的连接最大数量 net.ipv4.tcp_max_tw_buckets = 6000 # 快速回收TIME_WAIT连接(NAT环境下不建议开启) net.ipv4.tcp_tw_recycle = 0 # 允许重用TIME_WAIT连接 net.ipv4.tcp_tw_reuse = 1 # TCP keepalive时间,默认7200秒太长,改为600秒 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 # 启用TCP快速打开 net.ipv4.tcp_fastopen = 3 # 连接跟踪表大小(根据内存调整,公式:CONNTRACK_SIZE=内存GB*200000) net.netfilter.nf_conntrack_max = 655360 # 本地端口范围,默认32768-60999太窄 net.ipv4.ip_local_port_range = 1024 65535 # ===== 内存优化 ===== # 减少swap使用倾向(0=尽量不用,100=积极使用) vm.swappiness = 10 # 允许超量分配内存 vm.overcommit_memory = 1 # 内存溢出时杀死进程的策略 vm.overcommit_ratio = 90 # OOM时保护系统进程 vm.panic_on_oom = 0 # ===== 文件系统优化 ===== # 单进程最大文件打开数 fs.file-max = 1048576 # inode缓存最大数量 fs.inotify.max_user_watches = 524288 # ===== 其他 ===== # 核心转储 kernel.core_pattern = /var/crash/core-%e-%p-%t # 禁止普通用户访问内核日志 kernel.dmesg_restrict = 1 # 限制ptrace(防止进程调试注入) kernel.yama.ptrace_scope = 1 EOF sysctl -p 挑几个重点参数解释一下: • net.core.somaxconn = 2048:这个参数控制每个监听端口能排队的最大连接数。默认128在高并发场景下根本不够用。Nginx、Redis 这类服务,一旦连接数上来,超出这个值的请求直接就被内核丢掉了,你的应用层甚至收不到这些请求。 • vm.swappiness = 10:告诉内核尽量用物理内存,少用swap。对于跑数据库或缓存服务的机器,swap一上来性能就断崖式下跌。设成10意味着只有内存用到90%以上才会考虑swap。 • vm.overcommit_memory = 1:允许超量分配内存。很多应用(比如Redis fork子进程做RDB快照)需要短时间内申请大量内存,实际上并不会全部用完。默认策略0会在某些情况下拒绝合理的内存申请,导致进程启动失败。 • net.ipv4.tcp_tw_reuse = 1:高并发短连接场景下,大量连接会进入 TIME_WAIT 状态。开启复用可以让这些端口尽快被新连接使用,避免端口耗尽。 配合 sysctl 调优,用户级别的资源限制也得配上: cat >> /etc/security/limits.conf << 'EOF' * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 * soft core unlimited * hard core unlimited root soft nofile 65535 root hard nofile 65535 EOF nofile 是最大打开文件数,nproc 是最大进程数。这两个值对高并发服务影响巨大。我之前调过一个电商系统,峰值QPS上到2万的时候,Nginx 疯狂报错 "too many open files",查了一下发现默认的 nofile 只有1024。改到65535之后,问题立消失。 三、系统优化与清理 系统跑久了,日志文件越来越大、临时文件堆成山、无用服务占用资源。这些事儿不处理,再好的硬件也扛不住。 3.1 日志管理 日志是排查问题的利器,但不加限制地记录日志,磁盘分分钟被撑爆。见过一台生产服务器,/var/log 占了50GB,系统盘一共才40GB,直接导致磁盘写满服务全挂: # 配置 journald 日志限制 mkdir -p /etc/systemd/journald.conf.d cat > /etc/systemd/journald.conf.d/limit.conf << 'EOF' [Journal] SystemMaxUse=500M SystemMaxFileSize=100M MaxRetentionSec=30day ForwardToSyslog=no EOF systemctl restart systemd-journald # 配置 logrotate cat > /etc/logrotate.d/custom << 'EOF' /var/log/messages /var/log/secure /var/log/cron { daily rotate 7 compress delaycompress missingok notifempty create 0640 root root sharedscripts postrotate /bin/kill -HUP $(cat /var/run/syslogd.pid 2>/dev/null) 2>/dev/null || true endscript } EOF 核心思路:系统日志最多保留500MB,单文件不超过100MB,超过30天自动清理。业务日志用 logrotate 按天切割,保留7天压缩存档。 3.2 禁用无用服务 新装系统通常会启动一堆你用不到的服务。每个服务都是潜在的攻击面,也是资源消耗者: # 禁用无用服务 for svc in avahi-daemon cups bluetooth postfix \ ModemManager accounts-daemon; do systemctl stop $svc 2>/dev/null systemctl disable $svc 2>/dev/null done # 关闭图形界面(服务器不需要) systemctl set-default multi-user.target # 关闭IPv6(如果内网不用) echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf sysctl -p3.3 NTP 时间同步 时间不同步,认证会失败、日志对不上、分布式系统会出问题。这事儿必须配: # 安装并配置 chrony yum install -y chrony 2>/dev/null || apt install -y chrony systemctl enable chronyd systemctl start chronyd # 或者用 ntpdate 快速同步一次 ntpdate ntp.aliyun.com3.4 系统更新 新装系统的第一件事就是打补丁。安全漏洞的修复等不起: # CentOS/RHEL yum update -y --exclude=kernel* yum clean all # Ubuntu/Debian apt update && apt upgrade -y apt autoremove -y apt clean 注意我加了 --exclude=kernel*。为什么?因为内核升级需要重启,我们先把用户空间的包更新完,内核单独处理,避免更新过程中服务中断。 四、常用软件自动化部署 每台服务器都应该有一套标准工具集。运维人员登上去,基本的排查工具得随手可用,不能临时去装。 # 系统工具 yum install -y vim wget curl net-tools lsof tree \ htop iotop iftop nmon ncdu bash-completion \ lrzsz bind-utils tcpdump strace sysstat \ lsof telnet rsync unzip bzip2 xz psmisc 2>/dev/null # 或者 Ubuntu/Debian apt install -y vim wget curl net-tools lsof tree \ htop iotop iftop nmon ncdu bash-completion \ lrzsz dnsutils tcpdump strace sysstat \ telnet rsync unzip bzip2 xz psmisc -y 几个常用工具说一下用途: • htop:比 top 好看100倍,进程树、CPU/内存柱状图一目了然 • iftop:实时网络流量监控,哪个 IP 占带宽一目了然 • iotop:IO 占用排行,排查磁盘瓶颈必备 • ncdu:交互式磁盘占用分析,比 du -sh 好用太多 • strace:系统调用追踪,进程卡住、报错时用它跟踪到底 • tcpdump:抓包分析,网络问题的终极武器 4.1 配置 Vim 默认的 Vim 配置很难用,花一分钟调一下,编辑效率高不少: cat > /etc/vimrc.local << 'EOF' set number set tabstop=4 set shiftwidth=4 set expandtab set autoindent set smartindent set ruler set showmode set showcmd set hlsearch set incsearch set ignorecase set smartcase syntax on EOF # 让所有用户的 vim 加载这个配置 echo 'source /etc/vimrc.local' >> /etc/vimrc4.2 配置 bash 增强 让终端用起来更舒服: cat >> /etc/profile.d/custom.sh << 'EOF' # 彩色 ls alias ls='ls --color=auto' alias ll='ls -lh' alias la='ls -lha' # 常用快捷 alias grep='grep --color=auto' alias df='df -h' alias du='du -h' alias free='free -h' alias netstat='netstat -tlnp' # 中文支持 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # 退出时清屏(防止敏感信息残留) # trap 'history -w' EXIT EOF4.3 安装 Docker(可选) 现在的服务器,不装 Docker 都不好意思说自己是运维。当然,不是所有场景都需要,但装上总没错: # 一键安装 Docker curl -fsSL https://get.docker.com | sh -s docker --mirror Aliyun # 配置 Docker 镜像加速 mkdir -p /etc/docker cat > /etc/docker/daemon.json << 'EOF' { "registry-mirrors": [ "https://mirror.baidubce.com", "https://docker.1ms.run" ], "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" }, "storage-driver": "overlay2", "live-restore": true } EOF systemctl enable docker systemctl start docker # 添加当前用户到 docker 组 usermod -aG docker admin五、完整初始化脚本 把上面所有操作整合到一个脚本里,新服务器到手,传上去跑一遍就完事。脚本自动识别发行版,不用手动切换命令: #!/bin/bash # ============================================ # Linux 服务器初始化脚本 v2.0 # 适用于: CentOS/RHEL 7+, Ubuntu 20.04+, Debian 11+ # 用法: bash init_server.sh # ============================================ set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' info() { echo -e "${GREEN}[+] $1${NC}"; } warn() { echo -e "${YELLOW}[!] $1${NC}"; } error() { echo -e "${RED}[-] $1${NC}"; exit 1; } # 检测发行版 if [ -f /etc/redhat-release ]; then OS="centos" elif [ -f /etc/debian_version ]; then OS="debian" else error "不支持的系统" fi info "检测到系统: $OS" # 检查 root 权限 if [ "$(id -u)" -ne 0 ]; then error "请使用 root 权限运行此脚本" fi # ---- 1. SSH加固 ---- info "正在加固 SSH 配置..." cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^#\?Port 22/Port 2222/' /etc/ssh/sshd_config sed -i 's/^#\?PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/^#\?X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config sed -i 's/^#\?MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config echo 'PermitEmptyPasswords no' >> /etc/ssh/sshd_config # ---- 2. 创建管理用户 ---- info "创建管理用户..." if ! id admin &>/dev/null; then useradd -m -s /bin/bash admin echo "请为 admin 用户设置密码:" passwd admin if [ "$OS" = "centos" ]; then usermod -aG wheel admin else usermod -aG sudo admin fi echo 'admin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin fi # ---- 3. 防火墙 ---- info "配置防火墙..." if [ "$OS" = "centos" ]; then systemctl enable firewalld systemctl start firewalld firewall-cmd --permanent --remove-service=ssh firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload else apt install -y ufw ufw default deny incoming ufw allow 2222/tcp ufw allow 80/tcp ufw allow 443/tcp ufw --force enable fi # ---- 4. 内核调优 ---- info "优化内核参数..." cat >> /etc/sysctl.conf << 'SYSCTL' net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 2048 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_fastopen = 3 net.ipv4.ip_local_port_range = 1024 65535 vm.swappiness = 10 vm.overcommit_memory = 1 fs.file-max = 1048576 kernel.dmesg_restrict = 1 kernel.yama.ptrace_scope = 1 SYSCTL sysctl -p # 文件描述符限制 cat >> /etc/security/limits.conf << 'LIMITS' * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 LIMITS # ---- 5. 日志管理 ---- info "配置日志管理..." mkdir -p /etc/systemd/journald.conf.d cat > /etc/systemd/journald.conf.d/limit.conf << 'JOURNAL' [Journal] SystemMaxUse=500M SystemMaxFileSize=100M MaxRetentionSec=30day ForwardToSyslog=no JOURNAL systemctl restart systemd-journald # ---- 6. 时间同步 ---- info "配置时间同步..." if [ "$OS" = "centos" ]; then yum install -y chrony systemctl enable chronyd systemctl start chronyd else apt install -y chrony systemctl enable chrony systemctl start chrony fi # ---- 7. 安装常用工具 ---- info "安装常用工具..." if [ "$OS" = "centos" ]; then yum install -y epel-release yum install -y vim wget curl net-tools lsof tree \ htop iotop iftop nmon ncdu bash-completion \ lrzsz bind-utils tcpdump strace sysstat \ rsync unzip bzip2 xz psmisc fail2ban else apt install -y vim wget curl net-tools lsof tree \ htop iotop iftop nmon ncdu bash-completion \ lrzsz dnsutils tcpdump strace sysstat \ rsync unzip bzip2 xz psmisc fail2ban fi # ---- 8. 禁用无用服务 ---- info "禁用无用服务..." for svc in avahi-daemon cups bluetooth; do systemctl stop $svc 2>/dev/null systemctl disable $svc 2>/dev/null done systemctl set-default multi-user.target # ---- 9. Vim配置 ---- info "配置 Vim..." cat > /etc/vimrc.local << 'VIM' set number set tabstop=4 set shiftwidth=4 set expandtab set autoindent set hlsearch set incsearch syntax on VIM grep -q "vimrc.local" /etc/vimrc 2>/dev/null || echo 'source /etc/vimrc.local' >> /etc/vimrc # ---- 10. 系统更新 ---- info "正在更新系统..." if [ "$OS" = "centos" ]; then yum update -y --exclude=kernel* yum clean all else apt update && apt upgrade -y apt autoremove -y apt clean fi info "==========================================" info "服务器初始化完成!" info "请执行以下操作:" info "1. 测试密钥登录: ssh -p 2222 admin@IP" info "2. 确认密钥登录正常后重启: reboot" info "3. 重启后验证服务状态" info "=========================================="六、验证清单:跑完脚本之后做什么 脚本跑完不是结束,验证才是关键。以下清单建议逐一过一遍: • SSH验证:新开一个终端窗口,用密钥 + 2222 端口登录 admin 用户,确认能正常进入。这一步必须在关闭当前root会话之前完成! • 防火墙验证:firewall-cmd --list-all 或 ufw status,确认端口规则正确 • 内核参数验证:sysctl -a | grep somaxconn 确认值已生效 • fail2ban验证:fail2ban-client status sshd • 时间同步验证:chronyc tracking • 服务验证:systemctl list-units --type=service --state=running 查看运行中的服务 • 磁盘验证:df -h 确认磁盘正常 • 重启验证:reboot 之后确认所有配置仍然生效(尤其是 sysctl 和 limits.conf 是否持久化) 总结一下 系统初始化这事儿,说白了就是把"毛坯房"变成"精装房"。安全加固是门锁和防盗窗,内核调优是水电改造,常用工具是家具家电。一套脚本跑完,新服务器直接达到生产标准,不用每次手动折腾。 这套脚本在我手里迭代了好几个版本,每台新机器都用它。最开始是几行命令,后来发现漏了日志管理,补上;又发现 fail2ban 没装,再加;内核参数也是踩过坑才调到最优。现在这套算是比较完整了,直接拿去用就行。 当然,不同业务场景可能还需要额外调整。比如跑数据库的机器,IO 调度器和内存参数要再细调;跑容器的机器,cgroup 和网络配置要额外关注。这些咱们后面慢慢聊。 下期预告: 系统初始化搞定了,下一篇咱们来讲讲——如何搭建一套完整的监控告警体系。Prometheus + Grafana + Alertmanager,从安装到配置到自定义告警规则,让你的服务器永远处在你的掌控之中。
2026年05月22日
5 阅读
0 评论
0 点赞
2026-05-13
群晖套件,无损迁移攻略!白群、黑群都可使用,终于不用担心丢数据了~
点个黄星及时收到文章,回复【微信群】可加群QQ 2群:938231761| 前言作为全球NAS市场占有率最高的系统——群晖,其存在一个比较遗憾的缺点,就是官方不支持对套件进行直接迁移,需要我们删除套件并且重新选择安装位置才可以。这个就很麻烦了,特别是对于Container Manager、Virtual Machine Manager这种核心生产力套件,一旦迁移意味着数据、设置全部需要重新来过,一个不小心说不定还会丢失、损坏。今天,Cherry给大家带来一款无损迁移群晖套件的工具Synology_app_mover。该工具又是我们的老熟人@007revad开发的,之前群晖的HDD数据库、M2存储等功能都是这位大佬开发的。项目地址:https://github.com/007revad/Synology_app_mover项目特性:新功能现在包括备份和恢复模式。支持 DSM 7。未使用 DSM 6 进行全面测试。如果备份到 USB 驱动器,分区的文件系统应该是 btrfs 的 ext3、ext4。工具以SSH操作为主要功能,支持套件的备份、迁移、还原。官方套件基本是100%支持的,还有一些社区套件待测试,具体名单如下。🔻完成测试,实际可行或99%可行的套件列表。🔻待测试套件列表| 如何使用Synology_app_mover?1、下载并解压程序包首先我们需要下载相应的程序,如果可以访问github的可以直接从github下载最新的v3.0.59(7月18日更新)https://github.com/007revad/Synology_app_mover/releases/tag/v3.0.59如果网络不好无法访问的,也可以从cherry提供的离线网盘里下载。阿里云盘:https://www.alipan.com/s/kK4M9gHgFz7提取码: tr40下载以后,我们将压缩包上传到群晖的任意目录,然后右键解压,解压以后的格式是这样的。2、修改配置文件(可选)我们需要修改文件里的syno_app_mover.conf这个文件,主要是设置备份套件的路径,默认路径为【/volume1/backups】。如果安装了文本编辑器套件,直接双击文件就可以编辑了。3、登录SSH并开始迁移首先打开群晖的【控制面板】,选择【终端机和SNMP】,开启【启动SSH功能】利用SSH工具,比如finalshell,点击文件夹,新建一个SSH链接,输入群晖的IP、账号、密码登录即可。然后我们切换到root权限sudo -i>输入登录密码,回车切换到程序所在的路径,现在群晖里找到解压后的压缩包,右键属性,复制位置里的路径然后在ssh页面输入以下指令,文件夹路径粘贴为刚才复制的内容cd 文件夹路径启动迁移,输入以下指令./syno_app_mover.sh三个选项分别是1)迁移,2)备份,3)还原。我们选择1)迁移,会自动识别所有套件并展示其所在盘符。这里以迁移Video Station为例,选择36,然后会弹出所有的盘符,这里volume4是SSD盘,所以选择volume4,之后是放错误操作的确认按钮,输入Y即可。迁移过程是完全透明的,我们可以看到迁移了@appdata和@appconf里的所有文件。迁移完成以后输入y启动套件。回到群晖套件页面,看到Video Station已经被顺利迁移到volume4里了,而且正常打开使用。| 写在最后这里需要注意的是,如果我们迁移Container Manager,无论如何,我们都需要先备份一下compose文件以防万一。如果是单独的容器,那么建议使用群晖自带的配置导出功能。
2026年05月13日
5 阅读
0 评论
0 点赞
2026-05-13
黑群晖DSM7.2激活Active Backup for Business套件的方法
https://192.168.0.144:7500/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=用户&passwd=密码&format=cookie输出类似{"data":{"did":"PIF2Gd1M^OZEy95kI4yKSL8rRPs5ZTxWdeCQWdonqBwrY-JuTUd7o-eW78U57oDOCAagEZhChg","sid":"KSd^M"},"success":true}https://192.168.0.144:7501/webapi/auth.cgi?api=SYNO.ActiveBackup.Activation&method=set&version=1&activated=true&serial_number=SN系列号输出类似{"data":{"activated":true},"success":true}
2026年05月13日
5 阅读
0 评论
0 点赞
2026-04-16
单容器更新
假设你的 docker-compose.yml 结构如下(3个服务):services: moviepilot-v2: image: jxxghp/moviepilot-v2:latest # ... 其他配置 service-b: # 其他服务 service-c: # 其他服务进入目录cd /mnt/user/appdata/compose.manager/projects/moviepilot-v2/只更新 moviepilot 服务docker compose pull moviepilot docker compose up -d moviepilot
2026年04月16日
9 阅读
0 评论
0 点赞
1
2
...
28