近来,我的服务器被撑爆了,因为服务器磁盘空间不足(其实这个问题已经存在很久了,一直没有下定决心整改)。这次一不留神备份服务时撑爆了,我就顺便重装系统,认真调教一些配置,将一些过程进行记录,以备查用。
一、更新组件,包管理
要在Ubuntu系统上更新软件包,可以使用以下命令:
1
| apt update && apt upgrade -y
|
1 2
| sudo apt update #这个命令会更新软件包列表,让系统知道有哪些软件包可以更新。 sudo apt upgrade --only-upgrade #这个命令会安装所有可用的软件包更新。
|
1
| sudo apt update && sudo apt upgrade --only-upgrade
|
二、常用工具
1、VIM编辑器
- 检查有没有安装VIM(主要是我习惯用vim编辑器了,Ubuntu是默认自带nano的)
- 配置VIM为默认的系统编辑器。
- 很简单,执行这条命令,选择 Vim,以后凡是自动调用编辑器的地方,都会用 Vim 啦。
1
| sudo update-alternatives --config editor
|
2、安装 command-not-found
很多服务器提供商可能会提供精简版本的 Ubuntu,于是一些实用的命令行工具并不会预装。比如command-not-found
,它可以当你在打命令时,提示对应的但没有安装的 package。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/bin/bash
# 更新软件包列表并升级系统 sudo apt update && sudo apt upgrade -y
# 安装常用工具 sudo apt install -y \ curl \ wget \ git \ vim \ htop \ tree \ net-tools \ build-essential \ zip \ unzip \ ufw \ tmux
# Optional: 安装其他实用工具 # sudo apt install -y \
echo "常用工具安装完成。"
|
安装完后,就可以在使用命令行的过程中更加方便了。
3、修改时区默认语言
1 2 3 4
| sudo update-locale LANG=en_US.UTF-8 sudo timedatectl set-timezone Asia/Shanghai
reboot
|
三、添加普通用户
1 2
| adduser {your-username} visudo
|
在 User Privilege Specification
下加入一行 {your-username} ALL=(ALL) NOPASSWD: ALL
即可。
1 2 3 4
| su - newuser #切换到新用户 ls /root #列出/root目录下的文件(没有root权限是看不了的) sudo ls /root #然后用给普通用户授予root权限(这样就有权限可以看到了,只要没有报错即成功,因为/root目录下可能没有东西) exit #退出
|
四、防火墙配置
要在 Ubuntu 上使用 ufw
(Uncomplicated Firewall)开启端口 22、80 和 443,你可以按照以下步骤进行配置:
检查 ufw
是否安装:
- 如果尚未安装
ufw
,你可以使用以下命令安装:sudo apt install ufw
开启端口:
- 开启端口 22:
sudo ufw allow 22
- 开启端口 80:
sudo ufw allow 80
- 开启端口 443:
sudo ufw allow 443
启用防火墙:
- 启用
ufw
防火墙:sudo ufw enable
检查配置:
- 可以运行
sudo ufw status
来查看防火墙的状态和已开启的端口。
参考文章
五、配置 SSH 登录及 SSH Server 安全设定
这里有个注意点!如果你想禁用root密码登录,并用普通用户 {your-username} ssh登录服务器,这里SSH登录配置部分一定要用普通用户{your-username}配置,不然配置出来的文件权限和拥有者不对,ssh不能正确读取公钥!
1
| ssh-keygen -t rsa -f ~/.ssh/id_rsa_xxxx
|
- 在用户目录下创建
authorized_keys
文件,并将公钥(pub结尾)的内容粘入authorized_keys
文件中
1 2 3 4 5 6 7 8
| su - {your-username} #不要在root身份下配置
mkdir -p ~/.ssh touch ~/.ssh/authorized_keys #并将公钥(pub结尾)的内容粘入`authorized_keys`文件中 vim ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
|
~
是指在当前用户的主目录下(如果是root,就是在/root/
下;如果是{your-username}则在/home/{your-username}/
)。
如果配置在root目录下,那用ssh 密钥对登录时就要选择root用户登录!
- 禁用root身份登录
- 找到
PermitRootLogin Yes
这一项,然后把它后面的设定值改为no
即可。
1
| sudo vim /etc/ssh/sshd_config
|
如下:
1 2 3
| PermitRootLogin no
PubkeyAuthentication yes
|
- 把 PasswordAuthentication 设置成 no,禁止密码登录,更安全:
1
| PasswordAuthentication no
|
- SSH端口号改为其他数字,注意了,改成其他端口后,记得防火墙设置也要更新。
1
| Port {SSH端口号,最好在10000以上}
|
最后重启 SSH Server 生效:
1
| sudo systemctl restart sshd.service
|
六、自定义shell 界面安装
1
| sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
|
七、Docker配置
1、安装 Docker 和 docker-compose
1 2 3 4 5 6 7 8 9 10
| #国内一键安装 sudo curl -sSL https://get.daocloud.io/docker | sh
#国外一键安装 sudo curl -sSL get.docker.com | sh
#docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
|
- 安装好 Docker 以后,记得将当前用户加到 docker 用户组里去(如果你不想每次都用 sudo 用 Docker 的话)
1
| sudo gpasswd docker -a username
|
2、Docker日志管理
全局配置日志大小限制
- 创建或修改文件
sudo vim /etc/docker/daemon.json
,并增加以下配置(3份日志、每份10M)。
1 2 3 4 5 6 7
| { "log-driver": "json-file", "log-opts": { "max-file": "3", "max-size": "10m" } }
|
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
不过已存在的容器不会生效,需要重建才可以!
单个容器日志大小限制
1 2 3 4 5
| logging: driver: json-file options: max-size: "100m" max-file: "3"
|
八、swap配置
1 2 3 4 5 6
| sudo swapoff -a #删除原分区 sudo dd if=/dev/zero of=/root/swapfile bs=1M count=1024 #配置新分区大小 sudo mkswap /root/swapfile sudo swapon /root/swapfile sudo vim /etc/fstab #最后设置开机启动:可以编辑 /etc/fstab 文件,把最后一行改成:`/root/swapfile swap swap defaults 0 0`
|
参考文章:
九、logrotate日志大小限制
1 2
| sudo apt install logrotate sudo apt install cron
|
配置文件目录:/etc/logrotate.d/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| /var/log/syslog /var/log/mail.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/cron.log { weekly rotate 3 maxsize 100M missingok notifempty compress delaycompress sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }
|
查看服务状态
1 2
| sudo systemctl status logrotate.service sudo systemctl status logrotate.timer
|
参考文章:
十、Fail2ban 封禁 IP
一、正常安装
1
| sudo apt install fail2ban
|
二、Debian 12 安装失败
1 2
| sudo apt install rsyslog -y sudo apt install python3-systemd -y
|
1 2 3 4 5
| sudo echo -e "[sshd]\nbackend=systemd\nenabled=true\nbantime=-1" | sudo tee /etc/fail2ban/jail.d/defaults-debian.conf && sudo systemctl restart fail2ban
#检测是否配置成功 systemctl status fail2ban
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [DEFAULT] bantime = 600 findtime = 300 maxretry = 5 banaction = firewallcmd-ipset action = %(action_mwl)s
[sshd] ignoreip = 127.0.0.1/8 backend=systemd enabled = true filter = sshd port = 22 maxretry = 2 findtime = 300 bantime = 600 action = %(action_mwl)s banaction = iptables-multiport logpath = /var/log/secure
|
十一、面板安装——1panel
1 2 3 4
| #apt install curl sudo curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
#sudo apt autoremove docker-compose
|
参考文章:
十二、常规安全更新
- 安装 unattended-upgrades 来自动更新 security upgrade
通过 unattended-upgrades,可以使 Ubuntu 系统自动进行常规的安全相关更新,使系统一直保持 security。
1 2
| sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades
|
参考资料: