linux中的文件传输应用最典型的是ftp服务,其中最常见的fpt有vsftp,profpt.现在来了解相关内容,本文主要介绍vsftpd的认证与mysql连用。

一 安装软件包

[root@master ~]# yum install vsftpd ftp

二 vsftpd开启本地系统用户配置

1.安装完vsftpd,开启的ftpd服务,是非常不安全的,存在安全隐患。如只开启local_enable选项。local_enable与chroot_list_enable、chroot_list_file连用。如果开启了系统用户访问ftp服务器,请将其固定在家目录中。参考如下

local_enable=YES                                                     
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list                             
pam_service_name=vsftpd


 如果单单开户local_enable,会出现如下情况

[root@master ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): tvm
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /etc/
250 Directory successfully changed.

2.在pam文件中加入认证

 2.1 其/etc/pam.d/vsftd中加入如下一行

auth       required     pam_listfile.so item=user sense=allow file=/etc/vsftpd/allowusers onerr=succeed

 2.2在/etc/vsfptd/allowusers,/etc/vsftpd/chroot_list加tvm用户

[root@master vsftpd]# echo "tvm" >> allowusers
[root@master vsftpd]# echo "tvm" >> chroot_list


三  虚拟用户配置-独立数据文件

1.创建虚拟用户的数据库文件


[root@master vsftpd]# mkdir virtual
[root@master vsftpd]# vim virtual/vuser
john
123
tom
123
[root@master vsftpd]# db_load -T -t hash -f virtual/vuser vuser.db

2.创建虚拟用户的对应系统的用户  

[root@master vsftpd]# mkdir /data/192.168.4.44/upload
[root@master vsftpd]# useradd -d /data/192.168.4.44/upload/ -s /sbin/nologin ftplong

3.在vsftpd.conf中加入如下配置选项

anonymous_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
guest_enable=YES                                                    
guest_username=ftplong                                               
pam_service_name=vsftpduser

注:如果要为每个虚拟用户创建一个配置文件需要在vsftpd.conf加入user_conf_dir选项,如user_config_dir=/etc/vsftpd/virtual,即可在其目录下为虚拟用户创建配置文件了,文件名必须与虚拟用户名一致。

4.独立配置文件示例


[root@TvmYunYing virtualuserdir]# cat admin 
anon_root=/data/ftproot/                          //虚拟用户默认根目录
download_enable = yes
anon_mkdir_write_enable=YES                //虚拟用户创建目录文件权限
anon_other_write_enable=YES                //虚拟用户删除重命名权限
anon_upload_enable=YES                       //上传权限
anon_world_readable_only=NO             //下载权限
anon_umask=022
file_open_mode=0777

5.创建pam认证。

5.1在/etc/pam.d/vsftpduser中加入

auth  required pam_userdb.so db=/etc/vsftpd/virtual/vuser             
account required pam_userdb.so db=/etc/vsftpd/virtual/vuser
x86_64位如下
auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vftpUser
account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vftpUser


5.2 更改系统目录权限

[root@master virtual]# chown ftplong:ftplong /data/192.168.4.44/upload/
[root@master virtual]# chmod 755 /data/192.168.4.44/upload/
[root@master virtual]# ls -al /data/192.168.4.44/upload/
总用量 8
drwxr-xr-x. 2 ftplong ftplong 4096  4月  5 08:39 .
drwxr-xr-x. 3 root    root    4096  4月  5 08:39 ..

四 基于mysql的虚拟用户应用

1.安装pam_msyql包

[root@master ~]#rpm -ivh pam_mysql-0.7-0.12.rc1.el6.i686

注:pam_mysql包用于vsftpd与mysql的应用实例,mysql用于存储用户名与密码。

2.在vsftpd.conf配置如下

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES                                           
local_enable=NO                                                       
aonymoun_enable=NO                                                   
guest_enable=YES                                                     
guest_username=ftplong                                               
pam_service_name=vsftpmy

                   

3.创建msyql需要的pam认证文件

在/etc/pam.d/vsftpdmy加入

auth required /lib/security/pam_mysql.so host=localhost user=vsftpd passwd=123456 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so host=localhost user=vsftpd passwd=123456 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=0


4.在mysql中创建数据库,并授予用户权限

mysql> create database vsftpd;
 Query OK, 1 row affected (0.00 sec)
mysql> use vsftpd Database changed 
mysql> create table user ( -> name CHAR(30), -> password CHAR(48)); 
Query OK, 0 rows affected (0.07 sec)                            
mysql> insert into user (name,password) values ('admin','123456');
Query OK, 1 row affected (0.06 sec) 
mysql> grant select on vsftpd.* to vsftpd@localhost identified by  '123456'; Query OK, 0 rows affected (0.01 sec)



5 连接ftp验证

[root@master ~]# ftp 192.168.4.44
Connected to 192.168.4.44 (192.168.4.44).
220 (vsFTPd 2.2.2)
Name (192.168.4.44:root): admin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir admin
257 "/admin" created
ftp> ls
227 Entering Passive Mode (192,168,4,44,132,67).
150 Here comes the directory listing.
drwx------    2 503      504          4096 Apr 05 02:11 admin
drwx------    2 503      504          4096 Apr 05 01:20 tom
226 Directory send OK.

注:在调试时如出现failed,请追寻日志记录tail -f /var/log/secure.

错误案例:

现象:

[root@pythonServer ~]# ftp 192.168.0.170
Connected to 192.168.0.170 (192.168.0.170).
220 (vsFTPd 3.0.2)
Name (192.168.0.170:root): tvmupload
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection

原因:

    新版本的软件不允许ftp用户的根目录有写权限,解决办法 chmod a-w /var/ftp/uploads。


关闭被动关系

 lftp关闭被动模式:set passive-mode off

 ftp关闭被动模式:passive off