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
转载于:https://blog.51cto.com/seneagle/1171318