# vsftpd 篇
vsftpd 是 Linux 中最安全、最穩定的 FTP 服務器
## 安裝 vsftpd
vsftpd 推薦使用 apt 安裝,這樣更加穩定
```sh
$ apt install vsftpd -y
```
## 配置 vsftpd
vsftpd 主要有 3 個配置文件
### 主配置文件
路徑: /etc/vsftpd.conf
點擊查看詳細內容 [vsftpd.conf](./vsftpd/vsftpd.conf.md)
### 監獄列表文件
作用:控制用戶是否只能訪問家目錄,
路徑:由 vsftpd 指定,當前路徑為 /etc/vsftpd/chroot_list
當前作用:監獄列表文件下的用戶不在家目錄監獄內,其它用戶全部處于家目錄監獄中
### 用戶列表文件
作用:用戶哪些用戶允許或不允許登錄 vsftpd
路徑:由 vsftpd 指定,當前路徑為 /etc/vsftpd/user_list
當前作用:拒絕用戶列表文件下的用戶登陸
> 提示:虛擬用戶登錄,只需設置映射的系統用戶
## PAM 模塊
libpam-mysql 通過 MariaDB + pam 的方式 來實現對 vsftpd 認證
- 優勢:使用虛擬用戶登陸,最大的好處是,我們之后可以通過 web 后臺來控制!
- 注意:需要在 pam 中暴露 mariadb 用戶密碼
### 安裝 PAM 模塊
```sh
$ apt install libpam-mysql -y
```
### 配置 libpam-mysql
libpam-mysql 配置文件位于 /etc/pam-mysql.conf
具體內容請查看 [pam-mysql.conf](./vsftpd/pam-mysql.conf.md)
- 警告:配置文件里,出現了數據庫用戶名及其登錄密碼,為了安全期間,需設置其它用戶不可見
```sh
$ chown root:root /etc/pam-mysql.conf
$ chmod 640 /etc/pam-mysql.conf
```
### 創建 vsftpd 的 PAM 配置文件
路徑 :/etc/pam.d/vsftpd-guest
```sh
$ touch /etc/pam.d/vsftpd-guest
$ chmod 640 /etc/pam.d/vsftpd-guest
$ vim /etc/pam.d/vsftpd-guest
```
vsftpd-guest 內容如下:
```conf
auth required pam_mysql.so config_file=/etc/pam-mysql.conf
account required pam_mysql.so config_file=/etc/pam-mysql.conf
```
0.7RC1 版本之前,不支持指定配置文件,需改成:
```conf
auth required pam_mysql.so user=數據庫用戶名 passwd=數據庫用戶密碼 host=127.0.0.1 db=數據庫名 table=數據庫表 usercolumn=用戶字段 passwdcolumn=密碼字段 crypt=2
account required pam_mysql.so user=數據庫用戶名 passwd=數據庫用戶密碼 host=127.0.0.1 db=數據庫名 table=數據庫表 usercolumn=用戶字段 passwdcolumn=密碼字段 crypt=2
```
## 數據庫管理
在 MariaDB 創建用于管理 pam 認證的數據庫,并創建針對 vsftpd 認證的表
### 配置數據庫信息
```sh
MariaDB [(none)]> CREATE DATABASE db_pam;
MariaDB [(none)]> CREATE TABLE db_pam.pam_vsftpd (
-> id int AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> ftp_user varchar(255) BINARY NOT NULL,
-> ftp_passwd char(41) BINARY NOT NULL,
-> ftp_dir varchar(255) BINARY
-> );
MariaDB [(none)]> CREATE USER 'pam_vsftpd'@'localhost' IDENTIFIED BY '數據庫用戶密碼';
MariaDB [(none)]> GRANT SELECT ON db_pam.pam_vsftpd TO 'pam_vsftpd'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
```
### vsftpd 登錄用戶
創建 vsftpd 登錄用戶 www
```sh
MariaDB [(none)]> INSERT INTO db_pam.pam_vsftpd
-> ( ftp_user, ftp_passwd )
-> VALUES
-> ( 'www', password('ftp登錄用戶密碼') );
```
創建 vsftpd 登錄用戶 qyadmin
```sh
MariaDB [(none)]> INSERT INTO db_pam.pam_vsftpd
-> ( ftp_user, ftp_passwd )
-> VALUES
-> ( 'qyadmin', password('ftp登錄用戶密碼') );
```
表 db_pam.pam_vsftpd 的結構:
```sh
MariaDB [(none)]> DESCRIBE db_pam.pam_vsftpd;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ftp_user | varchar(255) | NO | | NULL | |
| ftp_passwd | char(41) | NO | | NULL | |
| ftp_dir | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.001 sec)
```
表 db_pam.pam_vsftpd 的數據:
```sh
MariaDB [(none)]> select * from db_pam.pam_vsftpd;
+----+----------+-------------------------------------------+---------+
| id | ftp_user | ftp_passwd | ftp_dir |
+----+----------+-------------------------------------------+---------+
| 1 | www | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | NULL |
| 2 | qyadmin | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | NULL |
+----+----------+-------------------------------------------+---------+
2 rows in set (0.001 sec)
```
## 用戶配置
### 創建映射用戶
使用 pam 認證需要創建一個本地用戶,用于虛擬用戶授權
創建系統用戶 www
```sh
$ useradd -c 'This Linux user is used to map VSFTPD virtual users' -u 2001 -s /usr/sbin/nologin -d /server/default -M -U www
```
修改 www 家目錄權限
```sh
$ chmod 550 /server/www
```
### 配置虛擬用戶
在 /server/vsftpd 目錄下,創建與虛擬用戶同名的配置文件,并自定義根目錄地址,具體操作如下:
```sh
$ mkdir /server/vsftpd
```
- 創建虛擬用戶 www 的單獨配置文件
```sh
$ vim /server/vsftpd/www
```
www 文件內容:
```conf
local_root=/server/www
```
- 控制目錄權限不可寫
設置了 virtual_use_local_privs=yes 以后,虛擬用戶的權限與本地用戶完全相同,所以家目錄不能有寫的權限:
```sh
$ chown www:www /server/www
$ chmod a-w /server/www
```
到此 lnmp 內容基本完結
局域網或本地虛擬機推薦使用 samba 來替代 vsftpd
samba 不在 lnmp 規劃里,期待下個作品
- Nginx 篇
- php 多版本
- 主配置文件
- 靜態站點配置模版
- tp6 站點的模版
- php 單版本
- 主配置文件
- 靜態站點配置模版
- tp6 站點的模版
- 靜態文件啟用壓縮
- 限制請求-http 塊
- 限制請求-server 塊
- 緩存配置文件
- tp6 站點的 fastcgi 模版
- MariaDB 篇
- MariaDB 主配置文件
- MariaDB 服務端子配置文件
- MariaDB 密鑰
- redis 篇
- sqlite3 篇
- php
- PHP 單版本篇
- PHP 多版本篇(new)
- php-fpm 主配置文件(php 單版本)
- php-fpm 工作池配置文件(php 單版本)
- '8.0(php 多版本)'
- php-fpm 主配置文件
- php-fpm 工作池進程配置文件
- '8.1(php 多版本)'
- php-fpm 主配置文件
- php-fpm 工作池進程配置文件
- service
- Nginx 系統單元文件
- MariaDB 系統單元文件
- redis 系統單元文件
- php-fpm 系統單元文件(php 單版本)
- phpfpm-8.0 系統單元文件(php 多版本)
- phpfpm-8.1 系統單元文件(php 多版本)
- vsftpd 篇
- pam-mysql 配置文件
- vsftpd 配置文件
- sh
- 刪除 lnmp 目錄腳本
- 創建 lnmp 目錄腳本
- 解壓 lnmp 安裝包腳本