本文共 8262 字,大约阅读时间需要 27 分钟。
vsftpd是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。
vsftd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。FTP服务器配置完yum仓库后,安装vsftpd服务程序
yum install vsftpd -y
vsftpd服务程序默认开启了匿名开放模式,需要开启匿名用户的上传、下载权限,以及让匿名用户创建、删除、更名文件的权限。真实环境不建议这样配置。FTP服务器匿名用户对应的系统用户是ftp。
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES / /允许匿名访问
anon_upload_enable=YES //允许匿名用户上传文件anon_mkdir_write_enable=YES //允许匿名用户创建目录anon_other_write_enable=YES//允许匿名用户修改或删除目录anon_umask=022 //设置匿名用户上传数据的权限掩码
service vsftpd start //启动vsftpd服务service iptables stop //关闭防火墙setenforce 0 //关闭安全性策略
在客户端执行ftp命令连接到ftp服务器,默认访问FTP根目录/var/ftp。基于安全性考虑,FTP根目录的权限不允许匿名用户或其他用户有写入权限(否则访问时会报500错误)
/var/ftp目录下默认创建了一个子文件夹pub,可以在匿名访问时供上传文件使用,那就要确保匿名用户ftp对该目录拥有写入权限。
[root@RedHat6-2 ~]# chown ftp /var/ftp/pub/[root@RedHat6-2 ~]# ls -ld /var/ftp/pubdrwxr-xr-x. 2 ftp root 4096 2月 13 2013 /var/ftp/pub
客户端测试:
rpm -q ftp //查看ftp是否安装yum install ftp -y //如果没有安装,用yum形式安装
[root@RedHat6-1 ~]# ftp 192.168.10.50Connected to 192.168.10.50 (192.168.10.50).220 (vsFTPd 2.2.2)Name (192.168.10.50:root): ftp //用户名为ftp331 Please specify the password.Password: //直接回车即可230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls //查看FTP服务器的内容227 Entering Passive Mode (192,168,10,50,114,54).150 Here comes the directory listing.-rw-r--r-- 1 0 0 7 Mar 26 02:42 ftp.txtdrwxr-xr-x 2 14 0 4096 Feb 12 2013 pub226 Directory send OK.ftp> get ftp.txt //下载服务器的内容到本地local: ftp.txt remote: ftp.txt227 Entering Passive Mode (192,168,10,50,225,227).150 Opening BINARY mode data connection for ftp.txt (7 bytes).226 Transfer complete.7 bytes received in 6.3e-05 secs (111.11 Kbytes/sec)ftp> cd pub //将ftp根目录切换到pub目录下250 Directory successfully changed.ftp> put 123.txt //上传文件到服务器pub目录下local: 123.txt remote: 123.txt227 Entering Passive Mode (192,168,10,50,230,232).150 Ok to send data.226 Transfer complete.7 bytes sent in 0.000126 secs (55.56 Kbytes/sec)ftp> ls //查看服务器pub目录下内容227 Entering Passive Mode (192,168,10,50,58,233).150 Here comes the directory listing.-rw------- 1 14 50 7 Mar 26 02:44 123.txt226 Directory send OK.ftp> mkdir data //在服务器pub目录下创建data目录257 "/pub/data" createdftp> quit //断开ftp连接并退出221 Goodbye.
之前用的是匿名开放模式,现在关了,然后开启本地用户模式。创建一个本地用户zhangsan进行测试。
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名访问
local_enable=YES //允许本地用户模式write_enable=YES //设置可写权限local_umask=022 //设置本地用户模式创建文件的umask值
service vsftpd restart
在客户端执行ftp命令连接到ftp服务器,默认访问的是该用户的家目录,而且该目录的默认所有者、所属组都是该用户自己。
客户端测试:
[root@RedHat6-1 ~]# ftp 192.168.10.50Connected to 192.168.10.50 (192.168.10.50).220 (vsFTPd 2.2.2)Name (192.168.10.50:root): zhangsan //zhangsan用户登入331 Please specify the password.Password: //输入用户的密码230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> mkdir files //创建文件夹,存放在/home/zhangsan目录下257 "/files" createdftp> ls227 Entering Passive Mode (192,168,10,50,117,63).150 Here comes the directory listing.drwxr-xr-x 2 500 500 4096 Mar 26 03:03 files226 Directory send OK.ftp> rename files database //更改文件夹名字350 Ready for RNTO.250 Rename successful.ftp> ls227 Entering Passive Mode (192,168,10,50,147,228).150 Here comes the directory listing.drwxr-xr-x 2 500 500 4096 Mar 26 03:03 database226 Directory send OK.ftp> rmdir database //删掉文件夹250 Remove directory operation successful.ftp> ls227 Entering Passive Mode (192,168,10,50,123,117).150 Here comes the directory listing.226 Directory send OK.ftp> quit //断开ftp并退出221 Goodbye.
需要注意的是7版本需要在配置文件添加“allow_writeable_chroot=YES”参数才允许本地用户登录。 //允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
若还希望将所有的宿主目录禁锢在其宿主目录中,可以添加chroot_local_user配置项,否则用户将能够任意切换到服务器的/var/、/etc/、/boot/等宿主目录以外的文件夹,这样一来便存在安全隐患。
chroot_local_user=YES //禁锢宿主目录
service vsftpd restart
客户端测试:
ftp> cd /opt //切换到opt目录下550 Failed to change directory.ftp> cd /etc //切换到etc目录下550 Failed to change directory.ftp> quit221 Goodbye.
然而当使用root管理员登录后,系统提示如下错误信息:
[root@RedHat6-1 ~]# ftp 192.168.10.50Connected to 192.168.10.50 (192.168.10.50).220 (vsFTPd 2.2.2)Name (192.168.10.50:root): root //以root用户登录530 Permission denied.Login failed.
这是因为vsftpd服务程序所在的目录中默认存放着一个名为“用户名单”的文件user_list,默认userlist_deny=YES,所以这个名单上出现的名字将不允许登陆到ftp服务器,也就是黑名单。
[root@RedHat6-2 ~]# cd /etc/vsftpd/[root@RedHat6-2 vsftpd]# lsftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh[root@RedHat6-2 vsftpd]# vim user_list //查看user_list文件# vsftpd userlist# If userlist_deny=NO, only allow users in this file# If userlist_deny=YES(default), never allow users in this file, and# do not even prompt for a password.# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers# for users that are denied.rootbindaemonadmlpsync //这些用户默认不允许登录ftp服务器shutdownhaltmailnewsuucpoperatorgamesnobody
创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。
[root@RedHat6-2 ~]# cd /etc/vsftpd/[root@RedHat6-2 vsftpd]# vim vuser.listroseabc123jackabc123
[root@RedHat6-2 vsftpd]# db_load -T -t hash -f vuser.list vuser.db //将明文信息文件转换成数据库文件[root@RedHat6-2 vsftpd]# file vuser.db vuser.db: Berkeley DB (Hash, version 9, native byte-order)[root@RedHat6-2 vsftpd]# chmod 600 vuser.db //降低权限,避免其他人看到数据库文件[root@RedHat6-2 vsftpd]# rm -rf vuser.list //删除原始文件
创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用语存储文件的根目录指的是,当虚拟用户登录后访问的默认位置。
[root@RedHat6-2 vsftpd]# useradd -d /opt/vuser -s /sbin/nologin virtual //创建virtual用户
建立用于支持虚拟用户的PAM文件vfstpd.vu,其中“db=”参数是使用db_load命令生成的账户密码数据库文件的路径。
[root@RedHat6-2 vsftpd]# vim /etc/pam.d/vsftpd.vuauth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
在vsftpd服务程序的主配置文件中通过pam_service_name参数将pam认证文件的名称修改为vsftpd.vu,再添加 guest_enable、guest_username参数。
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名访问
guest_enable=YES //开启虚拟用户模式guest_username=virtual //指定虚拟用户账户pam_service_name=vsftpd.vu //指定PAM文件
为虚拟用户设置不同的权限。先创建虚拟用户不同权限的配置文件的存放路径,在这个路径下再分别创建rose和jack命名的文件。
[root@RedHat6-2 ~]# mkdir /etc/vsftpd/vu_dir[root@RedHat6-2 ~]# cd /etc/vsftpd/vu_dir/[root@RedHat6-2 vu_dir]# vim rose //创建rose虚拟用户的配置文件anon_umask=022 //指定上传文件的权限
再次修改vsftpd主配置文件,通过添加user_config_dir参数定义这两个虚拟用户不同权限的配置文件所存放的路径,重启vsftpd服务。
user_config_dir=/etc/vsftpd/vu_dir //单独用户配置文件
service vsftpd restart //重启vsftpd服务
客户端测试:
[root@RedHat6-1 ~]# ftp 192.168.10.50Connected to 192.168.10.50 (192.168.10.50).220 (vsFTPd 2.2.2)Name (192.168.10.50:root): rose //虚拟用户rose331 Please specify the password.Password: //输入rose的密码230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> put anaconda-ks.cfg //上传文件local: anaconda-ks.cfg remote: anaconda-ks.cfg227 Entering Passive Mode (192,168,10,50,32,170).150 Ok to send data.226 Transfer complete.1498 bytes sent in 0.000194 secs (7721.65 Kbytes/sec)ftp> quit221 Goodbye.
[root@RedHat6-2 ~]# cd /opt/vuser/[root@RedHat6-2 vuser]# ll 总用量 4-rw-r--r--. 1 virtual virtual 1498 3月 26 12:16 anaconda-ks.cfg //上传权限是644
转载于:https://blog.51cto.com/11134648/2128555