第 04 章 - 建立網路服務 (http, https, SMB)
上次更新日期 2022/10/13
樹莓派就是個 Linux 系統,你也可以讓它變成一部相當輕量級的伺服器!我們這裡會用 Apache 軟體做介紹來讓大家了解! 這個 apache 越來越胖~所以,如果非必要,不要啟用它!我們這裡只是做個測試而已!大家就來玩一玩~
學習目標:
- 了解伺服器建立的過程口訣
- 建立 WWW 伺服器,並建立首頁資料
- 了解網路磁碟機 (SMB) 以及使用 Samba 服務
4.1: 使用 Apache 軟體建立 Web server
要讓你的 Linux 系統建立網際網路服務,其實有個簡易的口訣要注意!在不改變任何設定值的情況下,你可以這樣建立網路服務;
- 安裝:
- 啟動:
- 開機啟動:
- 防火牆:
- 測試:
上面 5 個步驟背下來~下次要建立網路服務,你就不會忘記某些流程了!唯一要知道的是,你的網路服務軟體是那一隻而已。 假設你知道 Web server 的達成軟體是 apache2,那麼如何完成上面說的 5 個步驟來讓你的樹莓派變成 Web server 呢? 就讓我們看下去:
# 1. 找到這個軟體後,安裝起來: $ sudo apt-cache search --names-only apache ..... libapache2-mod-upload-progress - upload progress support for the Apache web server apache2 - Apache HTTP Server apache2-bin - Apache HTTP Server (modules and other binary files) ..... $ sudo apt-get install apache2 # 2, 3. 啟動與開機啟動這個服務 $ sudo systemctl restart apache2 $ sudo systemctl enable apache2 $ sudo systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-10-13 12:04:21 CST; 15s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 17365 (apache2) Tasks: 55 (limit: 779) CPU: 135ms CGroup: /system.slice/apache2.service ├─17365 /usr/sbin/apache2 -k start ├─17366 /usr/sbin/apache2 -k start └─17367 /usr/sbin/apache2 -k start # 4. 防火牆,記得要放行 80 埠口!我們前一章放行過!這裡觀察就好: $ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 80/tcp ALLOW IN Anywhere Anywhere ALLOW IN 192.168.0.0/16 22/tcp ALLOW IN 172.31.0.0/16 80/tcp (v6) ALLOW IN Anywhere (v6) # 如果沒有看到上面那一行,就得要再次進行: $ sudo ufw allow http # 5. 開始測試: $ curl http://localhost/
如果只是想要建好服務,那麼,這時候的服務已經建立妥當了!如果還想要測試首頁到底能不能生效, 就這樣處理看看!將首頁檔案變更一下囉!
$ sudo vim /var/www/html/index.html Your Name: XXX OOO Your ID: 4090CXXX $ curl http://localhost Your Name: XXX OOO Your ID: 4090CXXX
這樣,你就知道首頁放置在哪裡了!
- 增加 SSL 模組
現在,大家都希望資料在網路上面跑是安全的,所以,可能會需要使用到 https 瀏覽網頁。 我們的樹莓派其實很多模組已經加入系統了,只是,在 Apache 裡面,我們需要將該模組加入才行! 這裡不談怎麼建立自己的憑證,只用系統預設的憑證來啟動,就得要這樣:
# 1. 先看看 apache 的設定檔裡面,有沒有包含 ssl 相關的設定? $ ll /etc/apache2/sites-available/ -rw-r--r-- 1 root root 1332 6月 9 12:22 000-default.conf -rw-r--r-- 1 root root 6338 6月 9 12:26 default-ssl.conf <==這就是我們要的! # 2. 檢查看看上面的檔案是否已經加入 apache 了? $ a2query -s default-ssl No site matches default-ssl (disabled by site administrator) # 3. 看看 ssl 模組有沒有加入系統中? $ a2query -m ssl No module matches ssl (disabled by site administrator) # 4. 加入上面兩個資料 $ sudo a2ensite default-ssl.conf Enabling site default-ssl. To activate the new configuration, you need to run: systemctl reload apache2 $ sudo a2enmod ssl Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Module socache_shmcb already enabled Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2 # 5. 最終重新啟動 apache2 $ sudo systemctl restart apache2 $ sudo netstat -tlunp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 13516/cupsd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 584/sshd: /usr/sbin tcp6 0 0 :::443 :::* LISTEN 18343/apache2 tcp6 0 0 :::80 :::* LISTEN 18343/apache2 tcp6 0 0 ::1:631 :::* LISTEN 13516/cupsd tcp6 0 0 :::22 :::* LISTEN 584/sshd: /usr/sbin tcp6 0 0 :::21 :::* LISTEN 572/vsftpd udp 0 0 0.0.0.0:5353 0.0.0.0:* 311/avahi-daemon: r udp 0 0 0.0.0.0:39916 0.0.0.0:* 311/avahi-daemon: r udp 0 0 0.0.0.0:631 0.0.0.0:* 13518/cups-browsed udp6 0 0 :::5353 :::* 311/avahi-daemon: r udp6 0 0 :::48573 :::* 311/avahi-daemon: r
最終使用你的瀏覽器來瀏覽你的網站,就能看到確實使用 https 進行連線的功能了!
4.2: 使用網路磁碟機
http 是讓用戶來瀏覽,那麼如果要進行檔案傳輸呢?最好使用 sftp 亦即是 ssh 相關服務來處理較佳, 不要使用 ftp 或 ftps 了。那麼如果是需要類似 windows 的網路磁碟機呢?那就需要 Samba 服務了。
- CIFS 與 SMB 及 Samba
windows 系統的網路磁碟機,使用的是一種名為 Common Internet Filesystem (CIFS) 的協定, 而 Linux 加入 CIFS 的協定,就是使用 SMB (server message block) 的服務!而要達成這個 SMB 的協定, 就需要使用 Samba 的軟體支援才行!為了方便 Server/client 的分別設計,所以我們得要安裝的軟體有這些:
$ sudo apt-get install samba samba-common samba-client
樹莓派很好玩,安裝完畢之後,SMB 服務就自動啟動了!不過,Samba 除了提供 smbd 之外,同時提供了 nmbd 服務! 實際用在檔案分享的,是 smbd,而 nmbd 只是用在提供網路搜尋的回應而已,事實上不太需要啟動!因此, 我們可以在安裝完畢後,先將 nmbd 關閉即可!
$ sudo systemctl stop nmbd $ sudo systemctl disable nmbd
- 建立可以使用 SMB 的用戶
要實際使用 Samba 的話,得要有帳號才行!而這個帳號必須要是 Linux 的實體帳號才行!假設我要讓 rasppi 這個用戶可以使用 Samba, 那就得要提供密碼~實際操作這樣處理看看:
# 1. 先看看有沒有任何用戶在 Linux 以及 Samba 系統上 $ id rasppi 使用者id=1000(rasppi) id群組=1000(rasppi) 組=1000(rasppi),4(adm),... $ sudo pdbedit -L # 2. 開始建立可操作 Samba 的用戶: $ sudo pdbedit -a -u rasppi new password: <==建立使用 samba 的密碼,可與 Linux 密碼不同 retype new password: <==再次輸入 Unix username: rasppi NT username: Account Flags: [U ] User SID: S-1-5-21-2020641071-3948558050-1374403643-1000 Primary Group SID: S-1-5-21-2020641071-3948558050-1374403643-513 Full Name: Home Directory: \\RASPBERRYPI\rasppi HomeDir Drive: Logon Script: Profile Path: \\RASPBERRYPI\rasppi\profile Domain: RASPBERRYPI Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: 三, 06 2月 2036 23:06:39 CST Kickoff time: 三, 06 2月 2036 23:06:39 CST Password last set: 四, 13 10月 2022 15:20:35 CST Password can change: 四, 13 10月 2022 15:20:35 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $ sudo pdbedit -L rasppi:1000:
最終你會發現有個 rasppi 的帳號輸出了!那就是代表建立成功!
- 在 windows 端登入網路磁碟機
在 windows 系統上面連線到樹莓派網路磁碟機的方法也很簡單,先打開檔案總管,然後在網址列輸入如下的方式即可:
- \\樹莓派IP\你的帳號
在跳出的視窗中,輸入正確的帳號與密碼,那就可以登入到你樹莓派的用戶家目錄了! 未來,你就可以透過網路磁碟機,直接跟你的樹莓派互動!如果你有興趣,還能放行大量的磁碟空間, 你的樹莓派,就變成一個家用很便宜的 NAS 了!
- 防火牆議題
基本上,網路磁碟機不要對 Internet 放行,只對內部網路放行,而我們已經使用 ufw 對整個區域網路做放行, 因此,無須處理防火牆。不過,如果你要針對某個特定的來源做放行,假設 10.0.0.0/8 可以使用我們的網路磁碟機好了, 那麼你的防火牆還是得要額外處置:
$ sudo ufw allow from 10.0.0.0/8 to any app samba Rule added $ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 80/tcp ALLOW IN Anywhere Anywhere ALLOW IN 192.168.0.0/16 22/tcp ALLOW IN 172.31.0.0/16 137,138/udp (Samba) ALLOW IN 10.0.0.0/8 139,445/tcp (Samba) ALLOW IN 10.0.0.0/8 80/tcp (v6) ALLOW IN Anywhere (v6)
4.3: 當週實做
- 有個名為 vsftpd 的軟體,這個軟體可以啟動 FTP 協定,讓你的樹莓派可以提供 FTP 的服務。
請依據上面介紹的五大處理流程步驟,讓你的樹莓派可以成為 FTP 伺服器最終使用 curl ftp://localhost 時,
可以順利的提供檔案資料下載。
- 需要編輯 /etc/vsftpd.conf 檔案內容,檔案內需要將底下的設定變更成為 YES 才行:
anonymous_enable=YES
- 需要加入 ftp 服務的埠口在防火牆放行的行列中
- 將 /etc/hosts 複製到 /srv/ftp 目錄下
- 使用 curl ftp://localhost 時,會出現 hosts 檔名,而 curl ftp://localhost/hosts 時,會列出該內容
- 需要編輯 /etc/vsftpd.conf 檔案內容,檔案內需要將底下的設定變更成為 YES 才行:
...