ftp服务器搭建
在搭建linux下的ftp服务器之前,大家要清楚服务器搭建流程:
- 检查并安装ftp程序
- 对配置文件进行修改,完成用户需求(尤为重要)
- 对防火墙iptable进行操作,添加模块以及21号端口,对ftp服务进行支持
- 添加系统用户,以及虚拟用户
- 登录测试,是否可以登录服务器
- 检查并安装ftp程序
vsftpd-2.2.2-24.el6.i686
如未安装此程序,则用yum语句对其进行安装:
[[email protected] ~]$ yum -y install vsftpd
安装完成后并设置为开机启动项目(开始的时候是被禁止的):
[[email protected] ~]$ chkconfig vsftpd on
以上为止,最基本的安装操作已经完成。
我们可以用绝对路径[[email protected] /]# cd /etc/vsftpd打开此文件夹
有三个主文件:
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd/ftpusers 指定哪些用户不能访问FTP服务器
/etc/vsftpd/user_list 文件中指定的用户是否可以访问ftp服务器由vsftpd.conf文件中的userlist_deny的取值来决定。
- 对配置文件进行修改
- 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous
- 本地用户登录:使用系统用户登录,在/etc/passwd中
- 虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器
一般情况下,会有以下项目要进行修改
anonymous_enable=YES/no 是否允许匿名用户登录
anonymous_enable=yes/no 是否允许匿名上传文件
local_enable= YES/no 是否允许本地用户登录
write_enable= YES/no 是否允许本地用户上传
local_mask=022 设置本地用户的文件生成掩码为022,默认值为077
guest_enable=yes/no 是否允许虚拟用户登录
dirmessage_enable= YES 设置切换到目录时显示.message隐含文件的内容
xferlog_enable= YES **上传和下载日志
connect_from_port_20=YES 启用FTP数据端口连接
pam_service_name=vsftpd 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下
userlist_enable= YES 允许vsftpd.user_list文件中的用户访问服务器
userlist_deny= YES 拒绝vsftpd.user_list文件中的用户访问服务器
userlist_file=/etc/vsftpd/user_list 存储用户名的文件,显式指定的用户才允许登录
listen= YES/no 是否使用独占启动方式(这一项比较重要)
tcp_wrappers= YES/no 是否使用tcp_wrappers作为主机访问控制方式
chroot_local_user=YES/no 是否可以让ftp用户跳出自己的家目录,(yes是禁止跳出,no是可以)
以下是我的配置:
为了提高服务器的安全性以及减少服务器承载量,我们设置anonymous_enable=no,禁止匿名登录
在上图中以下是设置本地用户登录权限
local_enable= YES 允许本地用户登录
write_enable= YES 允许本地用户上传
local_mask=022 设置本地用户的文件生成掩码为022
dirmessage_enable= YES 设置切换到目录时显示.message隐含文件的内容
其余为默认值,在不知道具体使用情况下没要修改。
虚拟用户配置:
chroot_local_user=no
chroot_list_enable=YES (对以下路径权限进行限制)
chroot_list_file=/etc/vsftpd/xunipasswd.file (限制用户目录)
#chroot_list_file=/etc/vsftpd/chroot_list (我注释掉它默认的选项,因为chroot_list 它的功能与我自己创建的xunipasswd.file文件夹功能一样:虚拟用户账号及密码列表,文件夹名字自拟,之后详解)
listlisten=YES 允许ftp运行在独立模式之下
guest_enable=YES (允许虚拟用户)
guest_username=zbq (虚拟用户映射的系统用户)
pam_service_name=vsftpd (pam证明模块)
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/xuniuser_config (虚拟用户配置文件,配置的是以上提到的xunipasswd.file文件夹中的用户)
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list (用户总表列,虚拟用户名也需要加入)
userlist_deny=NO
tcp_wrappers=YES
chroot_local_user 是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外
chroot_list_enable 是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁
chroot_list_file=/etc/vsftpd/chroot_list (xunipasswd.file) 是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些,所以我们这里做的是局部调整,把chroot_list_file=/etc/vsftpd/xunipasswd.file 此路径中的用户做限制,禁止切换到上级目录。
基于用户列表文件 /etc/vsftpd/user_list来配置 FTP 来允许/拒绝用户的访问,默认情况下,如果设置了 userlist_enable=YES ,当 userlist_deny选项设置为 YES 的时候列出的用户被拒绝登录,然而, 更改配置为 userlist_deny=NO,意味着只有在/etc/vsftpd/user_list显式指定的用户才允许登录。
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list (用户总表列,虚拟用户名也需要加入)
userlist_deny=NO
完成以上配置后重启ftp使其生效[[email protected] vsftpd]# service vsftpd restart
- 对防火墙iptable进行操作,添加模块以及21号端口,对ftp服务进行支持
添加tcp模块 IPTABLES_MODULES="ip_conntrack_ftp"
[[email protected] vsftpd]#vi /etc/sysconfig/iptables
添加端口 -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
然后重启iptable使其生效[[email protected] vsftpd]# service iptables restart
- 添加系统用户,以及虚拟用户(这里着重讲虚拟用户)
- 添加虚拟用户口令文件vi /etc/vsftpd/xunipasswd.file
zhubaiqing #用户名
123456789 #密码
- 生成虚拟用户口令认证文件
首先查看系统有没有安装生成口令认证文件所需的软件db4-utils
[[email protected] vsftpd]# rpm -q db4-utils
db4-utils-4.7.25-19.el6_6.i686
使用db_load命令生成虚拟用户口令认证文件
db_load –T –t hash –f /etc/vsftpd/xunipasswd.file /etc/vsftpd/vftpuser_passwd.db
- 编辑vsftpd的PAM认证文件
vi /etc/pam.d/vsftpd
将里面其他的都注释掉,修改下面这两行(告诉系统生成的db文件的路径以及文件名):
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser 修改为auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser_passwd
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser 修改为account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser_passwd
- 建立本地映射用户并设置宿主目录权限
[[email protected] vsftpd]# #useradd –d /home/zbq –s /sbin/nologin zbq
用root账户创建的此系统用户,我们要给它相应的权限:
[[email protected] vsftpd]#chmod 700 /home/zbq
FTP 用户所映射到的系统帐户必须对 FTP 用户主目录拥有相应的读/写权限。仍然以zhubaiqing用户为例,本文中zhubaiqing虚拟用户是被映射到zbq系统帐户的,所以 zbq系统帐户必须拥有对zhubaiqing 的 FTP 主目录/data/FTP/zhubaiqing 的读/写权限
[[email protected] vsftpd]#chown -R zbq:zbq /data/FTP/zhubaiqing/
之后我们需要将我们创建的用户加入到/etc/vsftpd/user_list中,
以满足我们之前的设置
userlist_enable=YES
用以下命令对账户进行添加:
# echo "zhubaiqing" | tee -a /etc/vsftpd/user_list
# echo "zbq" | tee -a /etc/vsftpd/user_list
# cat /etc/vsftpd/user_list
- 配置xuniuser.conf(设置虚拟用户配置项)
此xuniuser_config是手动创建的文件夹,里面包含了对xunipasswd.file中账户的配置,而我们之前提到过xunipasswd.file中是虚拟用户的账户和密码信息,有它生成的db文件。现在我们理清一条线:passwd.file虚拟用户信息,xuniuser_config控制着每一个虚拟用户的权限。这两个文件在主配置文件中都必须有路径存在指导系统进行操作
/etc/vsftpd/xuniuser_config 下给每个用户创建个权限文件,这个文件要和虚拟用户名称相
例:vi/etc/vsftpd/xuniuser_config/zhubaiqing
local_root=/data/FTP/zhubaiqing 虚拟用户的登录后的目录路径(必须存在,自己创建)
local_root=/data/FTP/zhubaiqing
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
pam_service_name=vsftpd
- 重启vsftpd服务
- 测试虚拟用户登录FTP
如果用浏览器无法登录查看
vi /etc/selinux/config
把此项修改为SELINUX=disable
命令行使用lftp命令:
lftp [email protected] 回车
123456789
成功