(1) 首先安装需要的系统环境和软件
yum groupinstall -y "Development Tools" yum install -y mariadb-server vsftpd mariadb-devel pam-devel
(2) 用户的验证如果要基于mysql, 需要借助pam, 将vsftpd的认证功能托管给pam.
需要安装连接pam和mysql的模块文件pam_mysql, 下载获取pam_mysql的压缩文件,解压,编译安装
tar xf pam_mysql-0.7RC1.tar.gz #解压文件 cd pam_mysql-0.7RC1 #切换工作目录 ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security make && make install
(3)准备数据库文件
MariaDB [(none)]> CREATE DATABASE vsftpd; #首先创建需要的数据库vsftpd MariaDB [(none)]> CREATE TABLE vsftpd.users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(30) NOT NULL UNIQUE KEY,password CHAR(48));# 添加表格users, 存储授权用户的认证信息 MariaDB [(none)]> INSERT INTO vsftpd.users (name,password) VALUES ('tom',PASSWORD('mageedu')), ('jerry',PASSWORD('mageedu')); #在users表中,插入两个用户 MariaDB [(none)]> GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'mageedu';#给vsftpd授权 MariaDB [(none)]> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu'; MariaDB [(none)]> FLUSH PRIVILEGES;
(4)创建和配置vsftpd通过pam_mysql认证的配置文件
vsftpd通过pam_mysql进行认证的配置文件在/etc/pam.d/目录下, 创建一个vsftpd.mysql的配置文件, 添加如下选项:
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
上述文件中:
user : 为连接mysql服务器的用户名, 此用户要有权限访问认证vsftpd服务的数据库;
passwd : 上面用户的密码;
host : mysql服务器主机的地址, 此处为本机地址;
db : 认证vsftpd富翁2u的数据库名称;
table : 存放了用户和密码的表;
usercolumn : 用户名对应的字段;
passwdcolumn : 密码对应的字段;
crypt : 密码加密的方法.
(5)准备匿名用户映射的系统用户账号
mkdir /ftproot # 创建映射的系统账号的家目录 useradd -d /ftproot vsuser #创建用户 mkdir /ftproot/{pub,upload} #创建工作目录 setfacl -m u:vuser:rwx /ftproot/upload #为vuser用户添加对目录的权限
(6)配置vsftpd的主机配置文件vsftpd.conf
修改配置文件,如下:
anonymous_enable=NO #禁止匿名用户登录 pam_service_name=vsftpd.mysql guest_enable=YES #开始来宾用户登录 guest_username=vsuser #设置来宾用户名 user_config_dir=/etc/vsftpd/users_conf #每个来宾用户的权限设置
配置每个匿名来宾用户的单独权限设定:
mkdir /etc/vsftpd/users_conf
设定tom的权限
vim /etc/vsftpd/users_conf/tom
#添加下面的选项
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
设定jerry的权限
vim /etc/vsftpd/users_conf/tom
#添加下面的选项, 设定jerry只能上传
anon_upload_enable=YES
(7) 禁锢系统用户于自己的家目录
启用如下选项
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
默认chroot_list文件是不存在的,需要手动创建
touch /etc/vsftpd/chroot_list
awk -F: '$3<1000{print $1}' /etc/passwd > /etc/vsftpd/chroot_list
(8) 重启服务, systemctl restart vsftpd.service, 在另外一台主机上测试
[root@localhost ~]# lftp -u tom 10.1.52.44 Password: lftp tom@10.1.52.44:~> ls drwxr-xr-x 2 0 0 6 Oct 13 19:25 pub drwxrwxr-x 2 0 0 6 Oct 13 19:25 upload lftp tom@10.1.52.44:/> cd upload/ lftp tom@10.1.52.44:/upload> put /etc/issue 79 bytes transferred lftp tom@10.1.52.44:/upload> ls -rw------- 1 1000 1000 79 Oct 13 19:46 issue lftp tom@10.1.52.44:/upload> rm issue rm ok, `issue' removed lftp tom@10.1.52.44:/upload> ls lftp tom@10.1.52.44:/upload>
测试tom用户成功
然后测试ben用户, ben只有上传功能
[root@localhost ~]# lftp -u ben 10.1.52.44 Password: lftp ben@10.1.52.44:~> ls drwxr-xr-x 2 0 0 6 Oct 13 19:25 pub drwxrwxr-x 2 0 0 6 Oct 13 19:46 upload lftp ben@10.1.52.44:/> cd upload/ lftp ben@10.1.52.44:/upload> put /etc/issue 79 bytes transferred lftp ben@10.1.52.44:/upload> ls -rw------- 1 1000 1000 79 Oct 13 19:49 issue lftp ben@10.1.52.44:/upload> rm issue rm: Access failed: 550 Permission denied. (issue) lftp ben@10.1.52.44:/upload>
禁锢系统用户于自己的家目录, 且没有任何权限
[root@localhost ~]# lftp -u root 10.1.52.44 Password: lftp root@10.1.52.44:~> ls ls: Login failed: 530 Permission denied. lftp root@10.1.52.44:~> pwd ftp://root@10.1.52.44 lftp root@10.1.52.44:~>