1、FTP服务器的一些基本概念
(1)FTP连接方式
控制连接:标准端口为21,用于发送FTP命令信息。
数据连接:标准端口为20,用于上传、下载数据。
(2)数据连接的建立类型
主动模式:服务端从20端口主动向客户端发起连接。
被动模式:服务端在指定范围内的某个端口被动等待客户端发起连接。
一般都采用被动模式。主动模式存在安全隐患,客户机很容易发起DdoS攻击。
(3)FTP传输模式
文本模式:ASCII模式,以文本序列传输数据。
二进制模式:Binary模式,以二进制序列(比特流)传输数据。
ASCII模式一般只用于纯文本文件传输,而Binary模式更适合传输程序、图片等文件。尤其是对于可执行文件,如果把可执行文件以文本模式传输,则下载下来的文件将无法正常使用。
在rhel6中默认采用二进制模式,在rhel6以前的版本中默认采用文本模式,为了提高可靠性,rhel6不再支持文本模式。
(4)FTP用户的类型
匿名用户:anonymous或ftp,这两个其实是同一个用户。
本地用户:帐号名称、密码等信息保存在passwd、shadow文件中。但是系统用户在访问时默认只能访问自己的主目录,而不是vsftpd的主目录/var/ftp
虚拟用户:使用独立的帐号/密码数据文件。
2、vdftpd服务
后台进程:vsftpd
启动脚本:/etc/init.d/vsftpd
类型:System V 服务
使用端口:20(ftp-data),21(ftp)
所需RPM包:vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
查看配置文件帮助:man vsftpd.conf
默认主目录是:/var/ftp
3、配置匿名用户下载和上传
[root@test ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
3.1安装FTP软件包,客户端和服务器端:
tftp-server-0.49-7.el6.i686
ftp-0.17-51.1.el6.i686
tftp-0.49-7.el6.i686
vsftpd-2.2.2-6.el6_0.1.i686
lftp-4.0.9-1.el6.i686
gvfs-obexftp-1.4.3-12.el6.i686
启动服务,并设为开机自动
service vsftpd start
chkconfig vsftpd on
编辑主配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 表示允许匿名用户访问。
local_enable=YES 表示允许使用系统用户访问,
write_enable=YES 表示允许允许匿名用户或系统用户具有写入权限
将“/var/ftp/pub”目录的属主改为ftp,即可赋予匿名用户写入权限
[root@test ~]# chown ftp /var/ftp/pub/
同时在配置文件/etc/vsftpd/vsftpd.conf中增加以下几行:
anon_upload_enable=YES #表示允许匿名用户上传
anon_mkdir_write_enable=YES #表示允许匿名用户创建目录
anon_umask=022 #表示设置匿名用户的umask值
anon_max_rate=500000 #表示对匿名用户的传输速率进行限制,单位为字节。
重启服务:service vsftpd restart(reload)
3.2、在客户端使用匿名用户访问测试
此时匿名用户可以新建文件夹,可以上传文件,如下图:

4、配置本地用户上传和下载
(1)vsftpd可以直接使用Linux系统的本地用户作为FTP用户。
使用本地用户登录FTP服务器后,默认将位于用户自己的主目录中,且具有读写权限。
如利用test用户访问ftp,那么默认将进入到的目录是/home/test。
创建系统用户,并设置密码,并在主目录中放置一个测试文件:
useradd ftptest
passwd ftptest
echo ‘ftp test’ > /home/ftptest/ftptest.txt
创建系统用户test,并设置密码:
useradd test
passwd test
(2)实现的场景一:允许用户test登录,且登录成功后位于自己的家目录中。不允许ftptest用户登录
配置参数:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user =YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
local_umask=022
userlist_enable=YES
userlist_deny=NO
将test用户加入到 /etc/vsftpd/user_list文件。
[root@test vsftpd]# vi /etc/vsftpd/user_list
test
[root@test ~]# cd /home/test/
[root@test test]# ls
test.txt 新建文件夹
测试:
(3)实现场景二:允许ftptest用户登录,登录成功后位于/data目录,禁止test用户登录。
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user =YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
local_umask=022
userlist_enable=YES
userlist_deny=NO
local_root=/data
将ftptest用户加入到 /etc/vsftpd/user_list文件。从此文件中删除test用户。
[root@test vsftpd]# vi /etc/vsftpd/user_list
ftptest
.png)

.png)
配置参数解释:
anonymous_enable=NO //禁止匿名用户登录
local_enable=YES //是否允许本地系统用户访问
write_enable=YES // 表示允许允许匿名用户或系统用户具有写入权限
chroot_local_user =YES // 本地用户在访问时只能访问自己家目录
chroot_list_enable=NO //指定一些用户访问限止在自己的home目录下,就是只能访问自己的家目录
chroot_list_file=/etc/vsftpd/chroot_list //在/etc/vsftpd/chroot_list文件中中列出的是被限制的用户的列表,文件不存在得新建
local_umask=022 // 设定本地用户上传文件所用的掩码。
local_root=/data //设置用户登陆时是访问ftp服务的主目录/data
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
|
|
chroot_local_user=YES
|
chroot_local_user=NO
|
|
chroot_list_enable=YES
|
1、所有用户都被限制在其主目录下; 2、使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制
|
1、所有用户都不被限制其主目录下;
2、使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
|
|
chroot_list_enable=NO
|
1、所有用户都被限制在其主目录下; 2、不使用chroot_list_file指定的用户列表,没有任何“例外”用户
|
1、所有用户都不被限制其主目录下;
2、不使用chroot_list_file指定的用户列表,没有任何“例外”用户
|
(4)关于用户访问控制
vsftpd中提供了2个与本地用户相关的配置文件:
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/ftpusers,包含的用户账号将被禁止登录vsftpd服务器,不管该用户是否在/etc/vsftpd/user_list文件中出现。
通常将root、bin、daemon等特殊用户列在该文件中,禁止用于登录FTP服务。
/etc/vsftpd/user_list,该文件中包含的用户账户可能被禁止登录,也可能被允许登录,具体在主配置文件vsftpd.conf中决定。
当存在“userlist_enable=YES”的配置项时,/etc/vsftpd/user_list文件生效。如果配置“userlist_deny=YES”,则
仅禁止列表中的用户账户登录,如果配置“userlist_deny=NO”,则仅允许列表中的用户账户登录。
userlist_enable=YES 是系统的默认设置,表示启用userlist用户列表。
userlist_deny=NO 是我们后来添加的,表示只允许列表中的用户登录。
5、配置FTP虚拟用户下载和上传(多个虚拟用户通过本地用户进行登录)
所谓虚拟账户是指:存放于独立数据库文件中的FTP用户账户,可以将他们映射到某个不能登录的系统用户账号上,进一步增强FTP服务器的安全性
(1)、创建虚拟用户数据库文件
使用db_load命令工具创建Berkeley DB格式的数据库文件。db_load工具由db4-utils软件包提供。安装db4_utils组件。
.png)
建立一个文本格式的用户名/密码 列表文件,用于存放虚拟用户账号。文件名可以随意,文件一般保存在/etc/vsftpd目录
[root@test ~]# vim /etc/vsftpd/login.txt
harry
123
natasha
123 # 文件中的奇数行表示用户名,偶数行为上一行用户所对用的密码。
以此文件为数据源通过db_load工具创建出Berkeley DB格式的数据库文件:
[root@test ~]# cd /etc/vsftpd/
[root@test ~]# db_load -T -t hash -f logins.txt logins.db
db_load命令是一种固定用法,其中的“-T”选项表示允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件,“-t hash”选项指定读取数据文件的基本方法,“-f”选项用于指定数据的源文件。
最后为了提高虚拟用户账号的安全性,最好将这两个存放虚拟用户账号的文件的权限都设为600,即只有root用户具有读取和写入权限。
chmod 600 logins.txt
chmod 600 logins.db
(2)创建虚拟用户的映射账号
vsftpd服务对虚拟用户其实是采用了映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户账号上,并将这个系统用户的主目录作为所有虚拟用户登录后共用的FTP根目录。
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot
在useradd命令中,利用-d选项指定了用户的主目录,利用-s选项禁止用户登录。然后再修改目录权限,使得其他用户可以访问。
(3)创建PAM认证文件
对虚拟用户的身份认证是通过PAM机制来实现的,PAM是Linux系统中的一个独立API(应用程序接口),它提供了各种验证模块以供其它程序调用。
当这些程序需要进行用户身份验证的操作时,就可以直接调用PAM的相应模块,而无需由自己来提供验证功能。所以PAM在Linux系统中提供了统一的身份验证机制。
PAM的认证文件都统一存放在/etc/pam.d/目录中,下面我们在这个目录中创建一个FTP虚拟用户的认证文件:
vim /etc/pam.d/vsftpd.vu【新建文件】
auth required pam_userdb.so db=/etc/vsftpd/logins
account required pam_userdb.so db=/etc/vsftpd/logins
在文件中,通过“db=/etc/vaftpd/logins”参数指定了要使用的虚拟用户数据库文件的位置,注意这里不需要写“.db” 的扩展名。
(4)修改vsftp配置,添加虚拟用户支持
原有配置:
anonymous_enable=NO
local_enable=YES * #由于需要映射本地用户,所以此项必须启用
write_enable=YES * #表示允许写入。
local_umask=022
pam_service_name=vdftpd
tcp_wrappers=YES
userlist_enable=YES
anon_umask=022 * #在vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限 ,因此对应的配置项通常以anon_开头
anon_max_rate=500000
添加:
guest_enable=YES #表示启用虚拟用户映射功能
guest_username=virtual #表示指定所映射的系统用户名称
pam_service_name=vsftpd.vu #表示指定PAM认证文件
user_config_dir=/etc/vsftpd/vuser #表示虚拟用户配置文件的存放目录。
(5)创建虚拟用户配置文件
为了对虚拟用户进行精确控制,实现不同用户拥有不同的权限,还需要为每个虚拟用户建立独立的配置文件,在vsftpd.conf配置文件中我们已经指定了虚拟用户配置文件的存放位置/etc/vsftpd/vuser。
下面我们首先创建虚拟用户配置文件存放目录,然后为harry用户创建配置文件,文件名即是用户名:
mkdir /etc/vsftpd/vuser
cd /etc/vsftpd/vuser
vim harry
然后设置允许harry用户上传,设置方法同匿名用户:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
再为natasha也创建一个配置文件,如果natasha只允许下载,那么只需要有一个配置文件即可,文件内容保持空白。
touch natasha
重启服务:service vsftpd restart
这样虚拟用户便全部设置好了,harry用户具有下载和上传的权限,而natasha只能下载不能上传。
(6)登录测试
.png)
防火墙的配置:
添加规则:
iptables -t filter -A INPUT -s 192.168.0.0/16 -p tcp --dport 21 -j ACCEPT
SElinux配置
set -P allow_ftpd_anon_write on
set -P allow_ftpd_full_access on
set -P ftp_home_dir on
- Linux中ftp不能上传文件/目录的解决办法
在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引 ...
- linux中FTP自动备份VPS脚本
服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...
- linux中ftp中文名乱码问题
问题触发环境 1. java中使用org.apache.commons.net.ftp.FTPClient包 2. 通过chrome浏览器的file标签上传文件 3. 在windows上部署的File ...
- Linux中ftp服务器搭建
一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...
- Linux中ftp的常用命令
转自:https://www.jb51.net/article/103904.htm FTP命令 ftp> ascii # 设定以ASCII方式传送文件(缺省值) ftp> bell # ...
- Linux中FTP远程传输,SSH远程连接,以及SCP远程拷贝
常用服务器ftp.ssh 1. Linux常用服务器构建-ftp服务器 ftp服务器 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”. 用于 ...
- linux中ftp配置文件详解
vsftpd配置文件采用"#"作为注释符,以"#"开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的"="两边不要留 ...
- Linux中ftp服务器的安装与部署
一.ftp简介FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP ...
- Linux中FTP服务器的搭建
vmware12上安装的CentOs6.8,最终实现物理机上的windows10能正常访问CentOs上的FTP服务器. 一.查看是否安装有ftp相关的安装包. # rpm -qa | grep vs ...
随机推荐
- Java Web开发中路径问题小结(getRequestUrl getContextUrl getServletUrl)
看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设 ...
- 重启 hdfs and yarn datanode
1- start-all.sh and stop-all.sh: Used to start and stop hadoop daemons all at once. Issuing it on th ...
- BOM Summary P268-P269
The Browser Object Model(BOM) is based on the window object, which represents the browser window and ...
- CentOS 安装jdk 1.8
方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java [root@localhost ~ ...
- 反爬虫2(代理ip)
在进行爬虫访问时,被访问主机除了会校验访问身份,还会校验访问者的ip, 当短时间同ip大量访问时,主机有可能会拒绝 返回,所以就现需要代理ip, 百度中可以获取到大量的免费的代理ip(ps:注意在访问 ...
- Swool的安装与使用
1.swoole的安装 //php最好用7.2以上的.直接去网站下载下来,然后与php一样编译安装. git下来后,因为没有config文件,故先在swool下载目录下执行: /.../php/bin ...
- Git和Github的使用
Git和Github的基本操作 一.了解Git和Github 1.什么是GIT? Git是一个免费.开源的版本控制软件 2.什么是版本控制系统? 版本控制是一种记录一个或若干个文件内容变化,以便将来查 ...
- php aes加解密,mcrypt_encrypt 和openssl_encrypt
php7.1以下版本使用 /* * mcrypt_encrypt 加密 * php7.1开始被丢弃 可以使用openssl_encrypt * */ function aes_encrypt($con ...
- python协程gevent案例:爬取斗鱼美女图片
分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...
- CSS(下)
目录 CSS(下) CSS属性相关 宽和高 字体属性 背景属性 边框 border-radius display属性 CSS盒子模型 margin外边距 padding内填充 浮动(float) 限制 ...