通過Imager刷入Ubuntu Pi
sudo apt install rpi-imager

記得用ubuntu 自帶的磁盤工具擴展樹莓派writable磁盤空間。

安全配置

登錄並更改賬戶

ssh ubuntu@192.168.0.xxx #ip在你的路由器->設備管理
# 初始密碼是 ubuntu

增加root用戶

sudo passwd root

配置ssh安全登錄

添加ssh登錄的密鑰

sudo vi /root/.ssh/authorized_keys # 將你的公鑰複製進去
sudo vi /etc/ssh/sshd_config # 配置ssh登錄

sshd_config 中分別修改下面幾句

LoginGraceTime 10m                 #afk達10min自動登出
PermitRootLogin prohibit-password  #只允許root用ssh登錄
MaxAuthTries 3                     #最多允許三次錯誤登錄嘗試
MaxSessions 3                      #最多允許三個client同時登錄

PubkeyAuthentication yes           #開啓公鑰登錄

AuthorizedKeysFile      .ssh/authorized_keys #開啓公鑰

PasswordAuthentication no          #不允許任何用戶使用密碼登錄
PermitEmptyPasswords no            #不允許任何空密碼用戶登錄

Esc, :wq 保存退出

sudo service ssh restart
exit

登錄,刪除 默認的ubuntu 用戶

userdel ubuntu
cat /etc/passwd

注意:以下配置僅適用於局域網

添加sshd白名單

vi /etc/hosts.allow
ALL:192.168.10.1:allow      #允许網關訪問所有服務
ALL:192.168.10.1/24:allow   #允许192.168.10.1-255这段IP的用户訪問所有服務
#上面一行等價與 ALL:192.168.x.*:allow

保存退出,添加sshd黑名單(優先級低於白名單)

vi /etc/hosts.deny
sshd:ALL:deny    #拒绝全部的ssh登录

配置完這步再登錄出現問題,關閉樹莓派卡拔下來插電腦上改。(清空hosts.deny 文件)

防火牆配置

ubuntu pi是自帶ufw的,如果沒有,就

apt install ufw

然後,

ufw allow ssh #如果自定義了ssh端口,用 ufw allow [port]
ufw default deny
#以下命令視使用場景酌情使用
ufw allow http
ufw allow https
我的设置

我的设置

如果你像我一样,不直接从外网访问树莓派(如做wp等等),而是把树莓派运行在局域网,反代到路由器然后通过局域网访问树莓派,你可以使用上图这个方案。 我个人是强烈推荐这个方案的,这减小攻击面到网关/旁路由一个设备上面,只要配置得当,安全性不亚于所谓的华为路由器。(我的路由的wan也是默认reject,至于反向代理方案,如果你问我,我就说zerotier~)

ufw allow from 192.168.10.1/24
ufw default deny

剩下的只有启动ufw了!

ufw enable

基礎配置

Wifi配置(可省略)

之前都是用網線的,現在可以改用wifi.

apt install network-manager -y
nmtui

可以連接wifi,更改主機名

更改hostname

更改hostname

reboot #重啓,網線拔了

時間配置

直到這一步之前都沒有 apt update基操,是因爲時間還沒校準,跑不起來。 樹莓派沒有板載時鐘芯片,需要每次開機校準時間。

先調整時區設置。

dpkg-reconfigure tzdata

選擇 asia/Shanghai

然後全球時間(universal time)對齊。

apt install ntp
vi /etc/ntp.conf

這裏爲了響應及時,我把我在跑ntp服務的openwrt作爲一個低延遲的ntp服務器,放在自定義ntp裏面。

# Specify one or more NTP servers.
pool 192.168.10.1

然後

ntpd -gq
timedatectl

可以看到時間已經ok了,可以 apt update了。(看着進度條不斷滾動真的是一鍵很治癒的事情

我會在下文中的定期執行任務中將同步時間給加上去。

配置 apt 源

首先先備份

cp /etc/apt/sources.list /etc/apt/sources.list.bak

然後修改 sources.list 文件中的hosts爲阿里雲。

sed -i 's/ports.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

現在運行apt update,看看有沒有404情況的出現

apt update
apt upgrade -y

定期執行任務

作爲服務器,樹莓派當然需要定期執行一些清理之類的任務。 可以使用下列命令打开定期执行任务.

crontab -e

开机同步时间

@reboot /usr/sbin/ntpdate -u 192.168.10.1

开机挂载网络硬盘

@reboot curlftpfs -o rw,allow_other ftp://username:password@192.168.10.1/ /media/ftpdrive

定期同步时间

以下的设置是从宝塔搞过来的

echo "|-正在尝试从192.168.10.1同步时间..";
/usr/sbin/ntpdate -u 192.168.10.1
if [ $? = 1 ];then
	echo "|-正在尝试从0.asia.pool.ntp.org同步时间..";
	/usr/sbin/ntpdate -u 0.asia.pool.ntp.org
fi
if [ $? = 1 ];then
	echo "|-正在尝试从www.bt.cn同步时间..";
	getBtTime=$(curl -sS --connect-timeout 3 -m 60 http://www.bt.cn/api/index/get_time)
	if [ "${getBtTime}" ];then	
		date -s "$(date -d @$getBtTime +"%Y-%m-%d %H:%M:%S")"
	fi
fi
echo "|-正在尝试将当前系统时间写入硬件..";
date
echo "|-时间同步完成!";

定期Apt更新

echo "|-正在更新软件包列表..";
apt update
echo "|-正在下载并安装新的软件包..";
apt upgrade -y
echo "|-软件更新执行完毕!..";

配置完成!

配置完的树莓派,我个人的方案是保持24小时运行,跑一些docker镜像,从另一块硬盘执行一下备份任务之类的,总体来说还是算蛮佛的。