vsftp linux
查看是否安装 rpm -qa|grep vsftpd yum -y install vsftpd
/etc/vsftpd/vsftpd.conf #主配置文件
/usr/sbin/vsftpd #主程序
/etc/vsftpd/ftpusers #FTP用户黑名单
/etc/vsftpd/user_list #控制用户登录
/var/ftp #匿名用户主目录
anonymous_enable=YES #是否启用匿名用户
anon_upload_enable=NO #是否允许匿名用户上传文件
anon_mkdir_write_enable=NO #是否允许匿名用户创建文件夹
local_enable=YES #是否允许本地用户
write_enable=YES #是否允许本地用户具有写权限
local_umask=022 #本地用户掩码 777-022 755默认权限
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ftpd_banner=Welcome to blah FTP service. dongyanming
chroot_local_user=YES
chroot_list_enable=YES #锁定用户在自己的家目录
chroot_list_file=/etc/vsftpd/chroot_list #此文件中的用户将启用chroot!
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_enable=YES #NO时, user_list文件不生效
#YES时 userlist_deny=YES时: user_list 和 ftpusers 同为黑名单
# user_list文件中的用户不能登录FTP,列表外的用户可以登录。
# userlist_deny=NO时: user_list中用户可以登录,列表外不可以登录
userlist_deny=YES
#userlist_file=/etc/vsftpd/vsftpd.user_list
======================================================================
这里是用CentOS7.0来进行配置的,和其他不同的版本号大同小异,仅仅是在此做一个记录,方便自己查看的同时也能够分享出来给有需要的人看看
1、配置防火墙,开启所需端口
7.0使用的防火墙是firewall,我改成用iptables作为防火墙
(1)关闭firewall:
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall开机启动
(2)安装iptables防火墙
yum install iptables-services
#安装
vi /etc/sysconfig/iptables
#编辑防火墙配置文件
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq!
#保存退出
systemctl restart iptables.service
#最后重启防火墙使配置生效
systemctl enable iptables.service
#设置防火墙开机启动
说明:21端口是ftp服务端口;10060到10090是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口。
2、关闭selinux
vi /etc/selinux/config
#SELINUX=enforcing
#注释掉
#SELINUXTYPE=targeted
#注释掉
SELINUX=disabled
#增加
:wq! #保存退出
setenforce 0 #使配置立即生效
3、安装vsftp
yum install -y vsftpd
#安装vsftpd
yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI
#安装vsftpd虚拟用户配置依赖包
systemctl start vsftpd.service
#启动
systemctl enable vsftpd.service
#设置vsftpd开机启动
4、配置vsftp
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak
#备份默认配置文件
执行以下命令进行设置
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'
echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300
\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsftpd
\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES
\npasv_min_port=10060\npasv_max_port=10090
\naccept_timeout=5\nconnect_timeout=1" >> /etc/vsftpd/vsftpd.conf
5、建立虚拟用户文件
touch /etc/vsftpd/virtusers
编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)
vi /etc/vsftpd/virtusers
web1
123456
web2
123456
web3
123456
:wq!
#保存退出
6、生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
chmod 600 /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
7、在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)
修改前先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak
vi /etc/pam.d/vsftpd
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
注意:如果系统为32位,上面改为lib,否则配置失败
8、新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)
useradd vsftpd -d /home/wwwroot -s /bin/false
chown vsftpd:vsftpd /home/wwwroot -R
chown www:www /home/wwwroot -R
#如果虚拟用户的宿主用户为www,需要这样设置。
9、建立虚拟用户个人Vsftp的配置文件
mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
touch web1 web2 web3
#这里创建三个虚拟用户配置文件
mkdir -p /home/wwwroot/web1/http/
vi web1
#编辑用户web1配置文件,其他的跟这个配置文件类似
local_root=/home/wwwroot/web1/http/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
10、最后重启vsftpd服务器
systemctl restart vsftpd.service
备注:
guest_username=vsftpd #指定虚拟用户的宿主用户(就是我们前面新建的用户)
guest_username=www
#如果ftp目录是指向网站根目录,用来上传网站程序,可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题
========================================================================
这里是对vsftp配置文件的详细解释,主要参考了《RedHat8.0网络服务》一书中《使用vsftpd架设FTP服务器》一节的内容。
除了安全、高速、稳定之外,vsftpd还具有如下的特性:
支持虚拟用户
支持PAM或xinetd / tcp_wrappers的认证方式
支持两种运行方式:独立和Xinetd
支持每个虚拟用具有独立的配置
支持带宽限制等
/etc/vsftpd.ftpusers
/etc/vsftpd.user_list
anonymous_enable=YES
//允许本地用户登录
local_enable=YES
//开放本地用户的写权限
write_enable=YES
//设置本地用户的文件生成掩码为022,默认值为077
local_umask=022
//当切换到目录时,显示该目录下的.message隐含文件的内容
//这是由于默认情况下有message_file=.message的 设置
dirmessage_enable=YES
//激活上传和下载日志
xferlog_enable=YES
//启用FTP数据端口的连接请求
connect_from_port_20=YES
//使用标准的ftpd xferlog日志格式
xferlog_std_format=YES
//设置PAM认证服务的配置文件名称,该文件存放 在/etc/pam.d/目录下
#pam_service_name=vsftpd
为了使匿名用户能够上传,需要在/etc/vsftpd中激活两个配置选项,分别是:
//允许匿名用户上传
anon_mkdir_write_enable=YES
//开 启匿名用户的写和创建目录的权限
若要以上两项设置生效,同时还要求:
//匿名用户对文件系统的上传目录具有写权限
//上面的配置语句用于放开匿名用户的浏览权限
默认情况下,vsftpd为了安全,禁止了ASCII传输方式。虽然在ftp客户软件中可以使用asc命 令,但是传输文件时仍然使用二进制传输方式。可以分别启用上传和下载的ASCII传输方式,方法是编辑/etc/vsftpd配置文件,将如下两 行前的#去掉即可 启用:
#ascii_download_enable=YES
为了使用户连接服务器后显示信息,vsftpd提供了两个选项,分别是:
banner_file
也可以设置如下的banner_file选项的值:
注意:(1)如果设置了ftpd_banner的值,将覆盖vsftpd默认的服务器连接后的信息。
(2)如果ftpd_banner和banner_file同时设置,那么banner_file将覆盖ftpd_banner的设置。
//设置空闲的用户会话的中断时间
例如下面的配置:
例如下面的配置:
例如下面的配置:
connect_timeout=60
例如下面的配置:
anon_max_rate=30000
例如下面的配置:
pasv_max_port=60000
在 默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot选项,涉及如下选项:
chroot_list_enable
chroot_list_file
(1)设置对所有的本地用户执行chroot(即活动范围限制在自家目录)只要将chroot_local_user的值设 为YES即可, 即:
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list
注意 :上面所提及的文件/etc/vsftpd.chroot_list和下面将要提及的文件 /etc/vsftpd.user_list的格式要求均为每个 用户名占一行。
要配置基于本地用户的访问控制,可以通过修改vsftpd的主配置文件/etc/vsftpd.conf来进行, 有两种限制方法:
例如下面的设置:
userlist_deny=YES
userlist_file= /etc/vsftpd.user_list
例如下面的设置:
userlist_deny= NO
userlist_file= /etc/vsftpd.user_list
注意:对于userlist_enable可以这样理解:
如 果userlist_enable=YES,表示vsftpd将从userlist_file选项给出的文件名中装载一个含有用户名的清单。然后再读取 userlist_deny的值来确定vsftpd.user_list中的用户是否允许访问FTP服 务器。如果用户不能访问,将在输入用户口令前被拒绝。
由于vsftpd有两种运行方式,即:由inetd启动和独立启动。 这两种运行方式的主机访问控制配置是不同的,下面介绍的是由xinetd启动的vsftpd的主机访问控制的配置。显然,要配置这种主机访问控制,需要修 改配置文件/etc/xinetd.d/vsftpd。
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
表示只允许192.168.1.0网段内的主机访问。
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
表示只有192.168.1.0网段内的主机不能访问。
访问控制表时主机表的书写语法
选项值 含义
Hostname 可解析的主机名
IP Address 十进制表示的IP地址
Net_name 在/etc/networks中定义的网络名
x.x.x.0 x.x.0.0 x.0.0.0 0.0.0.0 0作为通配符看待。如:191.72.61.0匹配从191.72.61.0到191.72.61.255的所有IP地址。0.0.0.0表示匹配所有的IP地址
x.x.x.{a,b,.} x.x.{a,b,.} x.{a,b,.} 指定主机表。如:191.72.61.{1,3,123}表示包含地址191.72.61.1、191.72.61.2和191.72.61.123
IPAddress/netmask 定义要匹配的网络或子网。如:172.19.16/20匹配从172.19.16.0到172.19.31.255
//在置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
又如:access_time = 8:30-11:30 13:00-18:00 表示只有在上午8点半到11点半和下午1点到下午6点才能访问此FTP服务器。
在配置文件/etc/xinetd.d/vsftpd的 {}中添加如下的配置语句:
可以用下面的命令生成文件/etc/vsftpd.busy_banner:
高安全级别匿名FTP服务器的配置要求:
不允许本地用户访问
关闭所有写权限
不允许匿名用户上传
设置客户端连接时的端口范围
设置匿名用户的最大传输速率限制
设置空闲的数据连接的中断时间
设置客户端空闲时的自动中断和激活连接的时间
配置每个主机的最大连接数
配置总的并发连接数
配置禁止访问的主机
配置安全日志
# cd /usr/local/src/vsftpd-1.1.3/EXAMPLE/INTERNET_SITE
# cp vsftpd.conf /etc
# cp vsftpd.xinetd /etc/xinetd.d/vsftpd
//修改主配置文件/etc/vsftpd.conf,添加一 个连接后的信息
# cat >>/etc/vsftpd.conf < > ftpd_banner=This FTP server is anonymous only.
> !
//显示主配置文件的内容如下:
# cat /etc/vsftpd.conf
# Access rights
anonymous_enable=YES
local_enable=NO
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# Security
anon_world_readable_only=YES
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
# Features
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
# Performance
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
ftpd_banner=This FTP server is anonymous only.
# cat /etc/xinetd.d/vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
per_source = 5
instances = 200
no_access = 192.168.1.3
banner_fail = /etc/vsftpd.busy_banner
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
//重新启动xinetd
建立虚拟FTP的服务器目录并设置适当的权限
建立虚拟FTP的服务器的xinetd配置文件
建立虚拟FTP的服务器的主配置文件
chroot_local_user=NO时 能,其值为YES时不能
不能激活此类用户的命令
local_enable=YES
guest_enable=YES
anonymous_enable=YES
生成虚拟用户口令库文件
配置生成vsftpd的认证文件
建立虚拟用户所要访问的目录并设置相应权限
建立配置文件
//生成虚拟用户口令库文件,以mysql数据库为例:
//修改口令库 文件的权限
# chmod 600 /etc/vsftpd_login.db
# vi /etc/pam.d/ftp
//插入如下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
//保存后退出vi
// cd /usr/local/src/vsftpd-1.1.3/EXAMPLE/
// cp VIRTUAL_USERS/vsftpd.pam /etc/pam.d/ftp
//建立虚拟用户所要访问的目录并设置仅virtual用户访问的权限
# chmod 700 /home/ftpsite/
# vi /etc/vsftpd.standalone.vu.conf
//在此文件中插入下面的配置语句
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES 启用虚拟用户
guest_username=virtual 将虚拟用户映射为本地virtual用户
pasv_min_port=30000
pasv_max_port=30999
ftpd_banner=This FTP server is virtual user only.
pam_service_name=ftp 指定PAM配置文件为ftp.vu
//插入完毕,保存退出。
# killall vsftpd
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone.vu.conf &
//配置结束
/etc/vsftpd.standalone.vu.conf中添加配置语句anon_world_readable_only=NO
配置好后,新的口令库中的所有用户就都可以登录此FTP服务器了。
虚拟用户valid具有浏览目录、上传和下载的权限
虚拟用户dede具有浏览目录、上传、下载、文件改 名和删除的权限
虚拟用户tom和fred具有浏览目录和下载的权限
//激活对不同的虚拟用户进行不同权限配置的配置语句
user_config_dir=/etc/vsftpd_user_conf
//添加后保存退出vi
//接下来创建此目录
# mkdir /etc/vsftpd_user_conf
#echo "anon_world_readable_only=NO">/etc/vsftpd_user_conf/tom
#echo "anon_world_readable_only=NO">/etc/vsftpd_user_conf/fred
//开放valid和dede的读写权限
> write_enable=YES
> anon_upload_enable=YES
> !
# kill -HUP `pidof vsftpd`
#
xinetd启动的FTP服务器,同时也可以将虚拟用户的FTP服务器配置为基于IP的虚拟FTP服务器
vsftp linux的更多相关文章
- 从Linux服务器下载网站文件
最近公司迁来一个新客户,该客户的网站是别的网络服务商做的,放在linux主机上,因为客户跟之前的网络服务商合作的不愉快 所以就把网站迁到我们公司,经理让我把网站文件和数据库download下来并在我们 ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- Linux系统Vsftp 传文件出现 553 Could Not Create File错误的解决方法
解决方法: 登录出现了这个错误提示:553 Could not create file SELinux设置如下 查看SELinux设置 [root@localhost ~]# getsebool -a ...
- Linux之VSFTP服务
一 .文件服务器简介 ftp:在内网和公网使用. 服务器:windows,linux 客户端:windows,linux samba:只能在内网使用(文件共享服务) 服务器:windows,linux ...
- linux上配置网络/安装vsftp服务器
1 准备用yum方式安装,小红帽linux原版不注册无法适用,只好安装centos系统 2 安装好centos系统注意事项: 硬盘得是IDE 配置好网络必须通,eth0的配置文件设置一下,联网启用 c ...
- linux 安装jdk,tomcat 配置vsftp 远程连接
不知不觉入行也有一年了,这两天在公司上班有空了就自己装了个vmware虚拟机,装了个红帽6.1完全命令行的操作系统,想着搭个公司现在在用的测试环境,没想到中间碰到了很多问题,不过大部分都解决了,现在可 ...
- linux下安装vsftp
1. yum安装vsftp # yum install vsftpd 2. 配置Vsftpd 安装完之后我们要对它进行配置,才能正常使用.编辑vsftpd的配置文件vi /etc/vsftpd/vsf ...
- linux用VSFTP搭建FTP服务器
一般在各种linux的发行版中,默认带有的ftp软件是vsftp,从各个linux发行版对vsftp的认可可以看出,vsftp应该是一款不错的ftp软件. sudo apt-get install v ...
- Linux vsftp
本机环境CentOS-6.6-i386-bin-DVD1.iso安装盘.安装时选择minimal模式.本机IP地址配置为192.168.0.211. 1.查询系统是否已安装了vsftpd [root@ ...
随机推荐
- SQL数据库与excel表格之间的数据 导入
- git命令解析
一 常用命令 1..gitignore 文件为git忽略文件,例*.[oa] *.~ 为忽略.a或.o或.~结尾的文件./表示忽略目录,!表示反取, *表示匹配零个或者多个字符.?表示匹配一个字符. ...
- java中 sleep 与 wait 的区别
1.所属类不同 sleep是Thread类的方法: wait是Object类的方法: 2.功能不同 sleep是线程用来控制自身流程的,在调用sleep()方法的过程中,线程不会释放对象锁: wait ...
- js 下载图片与下载文件的方式一样;保存至本地 ASP.NET 方式
<asp:Button ID="btnDownLoad" runat="server" style="display: none" T ...
- oracle+ibatis 批量插入-支持序列自增
首先请先看我前面一篇帖子了解oracle批量插入的sql:[oracle 批量插入-支持序列自增] 我用的ibatis2.0,sqlMap文件引入的标签如下: <!DOCTYPE sqlMap ...
- curd 里url传输汉字验证错误问题解决方法
在url汉字转换的部分用base64_encode转化 base64_encode 将字符串以 BASE64 编码. 语法: string base64_encode(string data); 返回 ...
- oracle 模糊查询中的转义字符用法
drop view aaa; create view aaa as select '_BCDE' A FROM DUAL UNION ALL SELECT 'ABCDE' FROM DUAL UNIO ...
- ORACLE分区--表分区
.love_flying_snow Oracle表分区 Oracle . 废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库 ...
- Angularjs学习笔记(二)----模块
一.定义 如何将全局定义的控制器模块化 先看下全局定义的控制器 var HelloCtrl=function($scope){ $scope.name='World'; } 模块化后代码 angula ...
- Android Studio开发基础之自定义View组件
一般情况下,不直接使用View和ViewGroup类,而是使用使用其子类.例如要显示一张图片可以用View类的子类ImageView,开发自定义View组件可分为两个主要步骤: 一.创建一个继承自an ...