Ubuntu 自定义配置
针对新安装或新购买的 Ubuntu 系统,可参考如下步骤完成系统加固或前期规范操作。
交付前期
1. 配置ip地址及网络
- 针对不同的ubuntu系统,配置静态ip
#.针对不同版本的ubuntu,配置静态ip可参考如下范本
curl http://iso.sqlfans.cn/config/ubuntu/netplan_apply.txt
#.启用网卡
netplan apply
- 配置阿里云的nameserver,不可直接添加到 /etc/resolv.conf 否则重启会被覆盖
cat /etc/systemd/resolved.conf | grep "223.5.5.5" || echo "DNS=223.5.5.5" >> /etc/systemd/resolved.conf
systemctl restart systemd-resolved
mv /etc/resolv.conf /tmp/resolv.conf.bak
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
cat /etc/resolv.conf
2. 开启root登录并配置强密码
- 开启root登录并更改强密码,示例 root 密码
Admin_147
#.安装openssh
# apt install -y openssh-server
# systemctl start ssh
#.开启root登录
sed -i "s/#PermitRootLogin/PermitRootLogin/" /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin.*$/PermitRootLogin yes/g' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep PermitRootLogin
systemctl restart ssh
#.修改root密码
echo "root":"Admin_147" | chpasswd
3. 替换为阿里云的镜像源
- 针对不同的ubuntu系统,配置阿里云的apt源
注:目前没有任何Linux发行版官方宣布弃用 apt-get;日常操作,推荐 apt;编写脚本,推荐 apt-get
#.针对不同版本的ubuntu,配置apt源可参考如下范本
curl http://iso.sqlfans.cn/config/ubuntu/apt_update.txt
#.更新apt源
apt-get -y update
4. 安装基础软件
apt-get -y install lrzsz telnet zip unzip net-tools make
5. 设置时区及时间同步
- 设置时区及24小时时间制(重连生效)
#.设置时区为上海
timedatectl set-timezone "Asia/Shanghai"
timedatectl status | grep Time
#.设置时间为24小时制,比如 01:02 PM 改为 13:02
echo "LANG=en_US.UTF-8" > /etc/default/locale
echo "LC_TIME=en_DK.UTF-8" >> /etc/default/locale
source /etc/default/locale
date
- 配置ntp时间同步,并加入crontab
#apt-get autoremove -y tzdata-legacy
apt-get remove --purge systemd-timesyncd ntpsec
apt-get install -y ntp ntpdate
/usr/sbin/ntpdate -u ntp.aliyun.com
6. 修改ssh端口
- 修改ssh端口(重连生效),示例ssh端口 23245
sed -i "s/#Port/Port/" /etc/ssh/sshd_config
sed -i '/^Port/c Port 23245' /etc/ssh/sshd_config
grep "^Port" /etc/ssh/sshd_config
systemctl daemon-reload
systemctl restart ssh
7. 更改机器名
- 更改机器名(重连生效),示例机器名
u-4227-app
newhost="u-4227-app"
hostnamectl set-hostname $newhost
cat /etc/hosts | grep `cat /etc/hostname` || echo 127.0.0.1 `cat /etc/hostname` >> /etc/hosts
cat /etc/hosts | grep "127.0.0.1"
8. 配置iptables
- 从模板文件获取并启用iptables,限制敏感端口访问,并加入开机启动
#.获取iptables模板
touch /bin/iptables.sh
curl http://iso.sqlfans.cn/linux/iptables.sh > /bin/iptables.sh
chmod +x /bin/iptables.sh
#.添加到开机启动
touch /etc/rc.local
cat /etc/rc.local | grep bin || echo '#!/bin/bash' >> /etc/rc.local
sed -i '1c #!/bin/bash' /etc/rc.local
cat /etc/rc.local | grep iptables || echo "bash /bin/iptables.sh" >> /etc/rc.local
sed -i '/exit/d' /etc/rc.local
echo 'exit 0' >> /etc/rc.local
chmod +x /etc/rc.local
- ubuntu 系统,除了 iptables,还可以通过 /etc/hosts.allow 来限制ssh登录
cat /etc/hosts.allow
- ubuntu 系统,除了 iptables,还可以通过 ufw 来配置防火墙策略,执行 ufw reload 加载配置(重启不会丢失策略),示例允许访问 3306 端口
#.查看状态
ufw status
#.添加策略
ufw allow 3306/tcp
ufw reload
#.根据编号删除策略
ufw status numbered
ufw delete 16
9. 调整服务
- 启用必要的服务,比如审计
#.更新apt源
apt -y update
#.安装必要的服务
apt -y install net-tools lrzsz auditd dmidecode acct
dpkg --get-selections | egrep "(^auditd|^chrony|^acct|^dmidecode)"
- 关闭不必要的服务
if [ `systemctl list-unit-files | grep "^bluetooth.target" | wc -l` -eq 1 ]; then systemctl mask -q bluetooth.target; fi
if [ `systemctl list-unit-files | grep "^telnet.socket" | wc -l` -eq 1 ]; then systemctl mask -q telnet.socket; fi
if [ `systemctl list-unit-files | grep "^xinetd.service" | wc -l` -eq 1 ]; then systemctl stop -q xinetd; systemctl disable -q xinetd; fi
if [ `systemctl list-unit-files | grep "^snmpd.service" | wc -l` -gt 0 ]; then systemctl stop -q snmpd; systemctl disable -q snmpd; fi
systemctl list-unit-files | egrep "(^bluetooth.target|^telnet.socket|^xinetd.service|^snmpd.service)"
10. 内核优化
- 以下只是部分的内核优化脚本,仅供参考
echo "* - nofile 65536" >> /etc/security/limits.conf
ulimit -n 65536
11. 批量创建初始账号
- 创建普通用户,示例用户
appadmin密码Admin_258
#.创建appadmin供开发使用
cat /etc/group | grep appadmin || groupadd appadmin
cat /etc/passwd | grep appadmin || useradd -g appadmin -s /bin/bash -m appadmin
echo "appadmin":"Admin_258" | chpasswd
- 配置ubuntu无密码切换root账户
cat /etc/sudoers | grep ubuntu || echo "ubuntu ALL=NOPASSWD:ALL" >> /etc/sudoers
12. 重启服务器
- 交付使用前,建议重启一下服务器,确认开机启动等无异常
reboot
13. 安装软件
- 安装软件可以参考如下2种方式:
#.推荐使用 apt 命令
apt install ./xxx.deb
#.备选使用 dpkg 命令
dpkg -i xxx.deb
#.若dpkg安装过程中提示缺少dependency依赖错误,可以接着运行下面的命令来修复(它会尝试自动下载并安装所有缺失的依赖)
apt --fix-broken install
遇到的问题
问题1:执行 apt install 报错 Unable to locate package xxx
- 问题:新装的ubuntu系统,第一次执行
apt install lrzsz报错 Unable to locate package lrzsz - 解决:可尝试 apt update 更新apt源
apt -y update
apt -y install lrzsz
问题2:rc.local 开机启动不执行
- 原因1:与 centos 不同,ubuntu 新增开机启动项,需要添加在 exit 0 上面,添加到下面则不会执行,比如
bash /bin/iptables.sh
root@ubuntu:# chmod +x /etc/rc.local
root@ubuntu:# cat /etc/rc.local
bash /bin/iptables.sh
exit 0
- 原因2:将 /bin/sh 重新链接到 /bin/bash,并将 /etc/rc.local 的命令改成更加兼容的模式,将 #!/bin/sh 改为 #!/bin/bash(亲测有效)
rm /bin/sh && ln -s /bin/bash /bin/sh
sed -i '1c #!/bin/bash' /etc/rc.local
附:如何快速添加一个开机启动项,比如
bash /bin/iptables.sh,思路如下:
#.先添加开机项,然后删除 exit 0,再在结尾添加 exit 0
cat /etc/rc.local | grep iptables || echo "bash /bin/iptables.sh" >> /etc/rc.local
sed -i '/exit/d' /etc/rc.local
echo 'exit 0' >> /etc/rc.local
问题3:执行系统命令报错 Unable to resolve host xxx
- 问题:执行
cat /etc/rc.local | grep "ulimit"报错 Unable to resolve host xxx - 解决:/etc/hosts 和 /etc/hostname 下的主机名不一致所导致的错误
cat /etc/hosts | grep `cat /etc/hostname` || echo 127.0.0.1 `cat /etc/hostname` >> /etc/hosts
问题4:reboot之后手动添加的nameserver记录丢失
- 问题:针对 ubuntu 24.04 执行 reboot 之后手动添加的nameserver会被覆盖
- 原因:/etc/resolv.conf 其实是 /run/systemd/resolve/stub-resolv.conf 的Link软链,每次重启resolvconf服务会覆盖 /etc/resolv.conf
- 解决:修改 /etc/systemd/resolved.conf 然后重启网络服务,再重新配置 /etc/resolv.conf 软链,这样重启就不会被覆盖了
cat /etc/systemd/resolved.conf | grep "223.5.5.5" || echo "DNS=223.5.5.5" >> /etc/systemd/resolved.conf
systemctl restart systemd-resolved
mv /etc/resolv.conf /tmp/resolv.conf.bak
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
cat /etc/resolv.conf