centos6.5 搭建ftp服务
1、rpm -qa|grep ftp(如果有需要,可以先卸载)
2、安装vsftpd服务
yum install vsftpd
3、创建虚拟用户数据库
首先需要创建明文文件,明文文件奇数行为用户名,偶数行为密码。
使用db_load工具将其转换为数据库文件,db_load工具需要通过安装db4-utils软件获得
最后通过修改文件权限以增强资料的安全性
(1)yum install db4-utils
(2)vim /etc/vsftpd/vlogin
在文件中写入用户名和密码
test
123456
(3)生成虚拟数据库
db_load -T -t hash -f /etc/vsftpd/vlogin /etc/vsftpd/vlogin.db
chmod 600 /etc/vsftpd/{vlogin,vlogin.db}
3、创建PAM文件,设置虚拟账号验证
Linux一般通过PAM文件设置账号的验证机制,然后通过创建PAM文件,使用新的数据文件进行登录验证,PAM文件中的db选项指定为需要验证的账号和密码的数据库文件
vim /etc/pam.d/vsftpd.pam
写入:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
4、设置虚拟账户共享目录
因为所有的虚拟账号需要映射到一个真实的系统账户,所以系统需要添加一个系统账户并设置家目录
useradd -s /sbin/nologin -d /home/ftp virtual
(注:/home/ftp为要存放文件的目录 )
5、修改主配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名登录,默认开启
local_enable=YES #启动本机账户ftp
write_enable=YES #允许写操作
anon_upload_enable=YES #允许匿名用户上传,默认禁止
anon_mkdir_write_enable=NO #禁止匿名用户创建目录
anon_other_write_enable=NO #禁止匿名用户进行其他写操作
guest_enable=YES #开启,则所用非匿名用户登录都指定到guest_username的指定账号
guest_username=virtual #设置来宾账号,即我们刚刚创建的账号
listen_port=21
pasv_enable=YES #启动被动模式连接
pasv_min_port=30000
pasv_max_port=30999
user_config_dir=/etc/vsftpd_user_conf
pam_service_name=vsftpd.pam #指定pam文件
user_sub_token=$USER
5、为每个用户设置独立的共享路径
通过在主配置文件中使用user_config_dir选项,设置一个基于账户的配置目录,在该目录下可创建若干个与账户名称相同的文件,并在文件中为此账户设置独立的配置选项,包括权限与共享路径等设置,本文仅以test为列,如果你还需要对权限,限速,并发量等选项进行设置,可以参考匿名账户的设置账户的设置选项添加至账户独立的配置文件中
mkdir /etc/vsftpd_user_conf
mkdir -p /home/ftp/test
vim /etc/vsftpd_user_conf/test
写入:
local_root=/home/ftp/$USER
6、将21号端口写入防火墙
vim /etc/sysconfig/iptables
写入:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT #添加这一行
7、重启服务
service vsftpd restart
常见问题
1、530 Login incorrect
pam验证失败,可能是因为你使用的64位操作系统,而pam文件中库文件的调用却使用的是/lib/security/pam_userdb.so。或者是用户名或密码输入错误,也有可能是vsftpd主配置文件中pam_service_name设置的pam文件名称与/etc/pam.d中创建的pam文件不一致
2、500 oops:cannot change directory:/home/ftp/$USER
selinux未关闭导致
setsebool -P ftp_home_dir 1
3、上传文件失败
chmod 777 /home/ftp/test
4、更改上传文件的权限
local_umask=xxx
上传文件的权限=用户权限-umask
5、不可访问上级目录
1)、所有用户均不能切换到上级目录
chroot_list_enable=NO
chroot_local_user=YES
2)、所有用户都可以切换到上级目录
chroot_list_enable=NO
chroot_local_user=NO