FTP服务器搭建及虚拟用户登录
如果用户很多,创建太多的系统账户显然是不明智,这时候我们就需要利用虚拟账户,vsftpd虚拟账户的数据保存在Berkeley DB格式的数据文件中,所以需要安装db4-utils工具来创建这样的数据文件。
1、安装vsftpd
yum -y install vsftpd ##安装vsftpd服务
yum -y install db4 db4-utils db4-devel ##安装虚拟用户数据库相关文件
2、添加Linux本地用户及虚拟用户名和密码
useradd -d /data/ftp -s /sbin/nologin ftpuser
vi /etc/vsftpd/logins.txt
添加以下信息 ( 单数行为用户名 , 偶数
行为口令 ) :
test # 用户名
test23 # 密码
3、生成vsftpd认证口令
db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db 设置文件只有root可读,即600
说明:使用db_load 命令生成认证文件
-T: 允许应用程序能够将文本文件转译载入进数据库
-t: 子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型
hash: hash就是使用hash码加密
-f: 命令选项设置的值是虚拟用户的口令库文件,即上面创建的logins.txt,文件的内容是:奇数行用户名、偶数行密码
4、修改vsftpd的PAM验证配置文件
Linux一般都通过PAM设置账户的验证机制,修改login认证配置文件,在文件中的db选项指定并验证账户和密码的数据库文件,注意数据库文件无须.db名称后缀(注意系统版本,如果你是64bit系统,是调用/lib64目录下的模块,如果你是32bit系统,是调用/lib32目录下的模块)
vi /etc/pam.d/vsftpd.vu
#32位的添加以下内容
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
#64位的添加以下内容
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
5、修改vsftpd配置文件
1、先备份一下,防止修改失误
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
2、vi /etc/vsftpd/vsftpd.conf 在最下面添加
dual_log_enable=YES #启用/var/log/vsftpd.log和/var/log/xferlog双份日志
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
vsftpd_log_file=/var/log/vsftpd.log
chroot_local_user=YES #允许本地用户登录
guest_enable=YES #支持虚拟用户
guest_username=ftpuser #映射为ftpuesr
pam_service_name=vsftpd.vu #修改为ftp.vu为验证文件
#注意:pam_server_name=vsftpd.vu与/etc/pam.d/vsftpd.vu两个文件名一定要相同
user_config_dir=/etc/vsftpd/vsftpd_user_conf #虚拟用户配置文件的保存目录
port_enable=NO #关闭主动模式
connect_from_port_20=NO
pasv_enable=YES #启用被动模式
pasv_min_port=1113 #最小端口
pasv_max_port=1113 #最大端口
6、对不同的虚拟用户设置不同的权限
1、建立用户配置文件目录
mkdir /etc/vsftpd/vsftpd_user_conf
2、为虚拟用户建立单独的配置文件
在/etc/vsftpd/vsftpd_user_conf/目录中可以为每个虚拟用户建立独立的配置文件,配置文件名称和用户名相同。
anon_world_readable_only=NO #表示用户可以浏览FTP目录和下载文件
anon_upload_enable=YES #表示用户可以上传文件
anon_mkdir_write_enable=YES #表示用户具有建立和删除目录的权利
anon_other_write_enable=YES #表示用户具有文件改名和删除文件的权限
local_root=/data/ftp #虚拟用户登录目录
7、ftp主动模式月被动模式
1、PORT(主动模式)
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
2、PASV(被动模式)
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
在 FTP服务器部署的时候,其默认采用的是主动操作模式。如果企业FTP服务器的用户都是在内部网络中的,即不用像外部网络的用户提供FTP连接的需求,那 么采用这个默认操作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器,而此时出于安全的考虑或者公网IP 地址数量的限制,企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面,此时这个主动操作模式就不行了。如果企业中通过互联网来访问企业内部 FTP服务器的员工比较多的时候,那么最好能够一劳永逸的解决这个问题,即在FTP服务器上进行设置,强制客户端在连接的时候采用被动操作模式。
总之,在FTP服务器部署的时候考虑是要采用主动操作模式还是被动操作模式,只需要记住一个原则,即如果把FTP服务器部署在防火墙或者NAT服务器的背 后,则采用主动操作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后,系统管理员发现用户可以连接上FTP服务器,可以查看 目录下的文件,但是却无法下载或者上传文件,如果排除权限方面的限制外,那么很有可能就是这个操作模式选择错误。系统管理员告诉用户选择合适的操作模式, 基本上就可以解决文件传输的问题了。
分析xferlog日志:
Thu Jun 26 10:43:15 2014 :时间
1:传输文件所用时间
192.168.1.60:客户端ip
12:文件大小,单位为byte
/test.txt:文件名,传输到的路径
a:文件传输类型:a为ASCII传输,b为二进制传输
i:传输方向:i为从客户端到服务器(上传); o为从服务器到客户端(下载)
r:访问用户类型:a为匿名用户;g来宾用户;r真实本地用户;
www:用户名
ftp:服务名
0:认证方式:0为无; 1为RFC931认证
*:认证用户的id; *为未获取到
c:传输状态; c表示传输完成,i表示没完成