vsftpd 篇
vsftpd 是 Linux 中最安全、最稳定的 FTP 服务器
安装 vsftpd
vsftpd 推荐使用 apt 安装,这样更加稳定
$ apt install vsftpd
配置 vsftpd
vsftpd 主要有 3 个配置文件
主配置文件
路径: /etc/vsftpd.conf
点击查看详细内容 vsftpd.conf
监狱列表文件
作用:控制用户是否只能访问家目录,
路径:由 vsftpd 指定,当前路径为 /etc/vsftpd/chroot_list
当前作用:监狱列表文件下的用户不在家目录监狱内,其它用户全部处于家目录监狱中
用户列表文件
作用:用户哪些用户允许或不允许登录 vsftpd
路径:由 vsftpd 指定,当前路径为 /etc/vsftpd/user_list
当前作用:拒绝用户列表文件下的用户登陆
提示:虚拟用户登录,只需设置映射的系统用户
PAM 模块
libpam-mysql 通过 MariaDB + pam 的方式 来实现对 vsftpd 认证
优势:使用虚拟用户登陆,最大的好处是,我们之后可以通过 web 后台来控制! 需要在 pam 中暴露 mariadb 用户密码,所以
安装 PAM 模块
$ apt install libpam-mysql
配置 libpam-mysql
libpam-mysql 配置文件位于 /etc/pam-mysql.conf
具体内容请查看 pam-mysql.conf
-
警告:配置文件里,出现了数据库用户名及其登录密码,为了安全期间,需设置其它用户不可见
$ chown root:root /etc/pam-mysql.conf $ chmod 640 /etc/pam-mysql.conf
创建 vsftpd 的 PAM 配置文件
路径 :/etc/pam.d/vsftpd-guest
$ touch /etc/pam.d/vsftpd-guest
$ chmod 640 /etc/pam.d/vsftpd-guest
$ vim /etc/pam.d/vsftpd-guest
vsftpd-guest 内容如下:
auth required pam_mysql.so config_file=/etc/pam-mysql.conf
account required pam_mysql.so config_file=/etc/pam-mysql.conf
0.7RC1 版本之前,不支持指定配置文件,需改成:
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 认证的表
配置数据库信息
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
MariaDB [(none)]> INSERT INTO db_pam.pam_vsftpd
-> ( ftp_user, ftp_passwd )
-> VALUES
-> ( 'www', password('ftp登录用户密码') );
创建 vsftpd 登录用户 qyadmin
MariaDB [(none)]> INSERT INTO db_pam.pam_vsftpd
-> ( ftp_user, ftp_passwd )
-> VALUES
-> ( 'qyadmin', password('ftp登录用户密码') );
表 db_pam.pam_vsftpd 的结构:
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 的数据:
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
$ 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 家目录权限
$ chmod 550 /server/www
配置虚拟用户
在 /server/vsftpd 目录下,创建与虚拟用户同名的配置文件,并自定义根目录地址,具体操作如下:
$ mkdir /server/vsftpd
-
创建虚拟用户 www 的单独配置文件
$ vim /server/vsftpd/wwwwww 文件内容:
local_root=/server/www -
控制目录权限不可写
设置了 virtual_use_local_privs=yes 以后,虚拟用户的权限与本地用户完全相同,所以家目录不能有写的权限:
$ chown www:www /server/www $ chmod a-w /server/www
到此 lnmp 内容基本完结
局域网或本地虚拟机推荐使用 samba 来替代 vsftpd
samba 不在 lnmp 规划里,期待下个作品