热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UbuntuLinux系统中搭建FTP服务

Ubuntu下Ftp的软件有好多种:google一下:各种的一些大致特点:wu-Ftp:比较老牌,但针对它的攻击比较多,设置比较麻烦,但功能比较强大。proFtpd:能实现wu-Ftp以及server-U的所有功能。安全性也较高,但比起vcFtpd配置稍显复杂。vsFtpd:功能强大,配置

Ubuntu下Ftp的软件有好多种:google一下:各种的一些大致特点:
wu-Ftp:比较老牌,但针对它的攻击比较多,设置比较麻烦,但功能比较强大。
proFtpd:能实现wu-Ftp以及server-U的所有功能。安全性也较高,但比起vcFtpd配置稍显复杂。
vsFtpd:功能强大,配置也比较简单
选vsftod是因为它安全、速度快
选proFtpd偶尔看到webmin支持他,所以就用了,因为方便。
选Serv-U理由windows普遍,Serv-U方便,但最大问题是盗版,所以现在不大用了
vsFtpd是大多是linux系统下自带的Ftp软件,而且像FREEBSD等网站都是采用,而且配置起来简单很多,所以我们也采用了vsFtpd
安装:
sudo apt-get install vsftpd
配置:
备份一下源文件:
sudo cp /etc/vsFtpd.conf /etc/vsFtpd.conf.old
然后修改
sudo vi /etc/vsFtpd.conf
anonymous_enable=yes (允许匿名登陆)
dirmessage_enable=yes (切换目录时,显示目录下.message的内容)
local_umask=022 (Ftp上本地的文件权限,默认是077)
connect_form_port_20=yes (启用Ftp数据端口的数据连接)*
xferlog_enable=yes (激活上传和下传的日志)
xferlog_std_format=yes (使用标准的日志格式)
Ftpd_banner=XXXXX (欢迎信息)
pam_service_name=vsFtpd (验证方式)*
listen=yes (独立的VSFtpD服务器)*
功能:只能连接Ftp服务器,不能上传和下传
注:其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于Ftp的基本选项
开启匿名Ftp服务器上传权限
在配置文件中添加以下的信息即可:
Anon_upload_enable=yes (开放上传权限)
Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件)
Write_enable=yes (开放本地用户写的权限)
Anon_other_write_enable=yes (匿名帐号可以有删除的权限)
开启匿名服务器下传的权限
Anon_world_readable_Only=no
注:要注意文件夹的属性,匿名帐户是其它(other)用户要开启它的读写执行的权限
(R)读-----下传 (W)写----上传 (X)执行----如果不开Ftp的目录都进不去
Local_enble=yes (本地帐户能够登陆)
Write_enable=no (本地帐户登陆后无权删除和修改文件)
功能:可以用本地帐户登陆vsFtpd服务器,有下载上传的权限
注:在禁止匿名登陆的信息后匿名服务器照样可以登陆但不可以上传下传
用户登陆限制进其它的目录,只能进它的主目录
设置所有的本地用户都执行chroot
Chroot_local_user=yes (本地所有帐户都只能在自家目录)
设置指定用户执行chroot
Chroot_list_enable=yes (文件中的名单可以调用)
Chroot_list_file=/任意指定的路径/vsFtpd.chroot_list
注意:vsFtpd.chroot_list 是没有创建的需要自己添加,要想控制帐号就直接在文件中加帐号即可
限制本地用户访问Ftp
Userlist_enable=yes (用userlistlai 来限制用户访问)
Userlist_deny=no (名单中的人不允许访问)
Userlist_file=/指定文件存放的路径/ (文件放置的路径)
注:开启userlist_enable=yes匿名帐号不能登陆
安全选项
Idle_session_timeout=600(秒) (用户会话空闲后10分钟)
Data_connection_timeout=120(秒) (将数据连接空闲2分钟断)
Accept_timeout=60(秒) (将客户端空闲1分钟后断)
Connect_timeout=60(秒) (中断1分钟后又重新连接)
Local_max_rate=50000(bite) (本地用户传输率50K)
Anon_max_rate=30000(bite) (匿名用户传输率30K)
Pasv_min_port=50000 (将客户端的数据连接端口改在
Pasv_max_port=60000 50000—60000之间)
Max_clients=200 (Ftp的最大连接数)
Max_per_ip=4 (每IP的最大连接数)
Listen_port=5555 (从5555端口进行数据连接)
查看谁登陆了Ftp,并杀死它的进程
ps ?xf |grep Ftp
kill 进程号
配置的时候注意文件权限的问题,开启匿名和本地后,关键是文件权限的设置,为了给不同的用户分配不同的权限,可以生成一个组,例如Ftpuser,然后赋 予它何时的权限例如755,chroot()设置可以使得本地用户限制在登录时的目录,这对于安全很重要,可以这是local_root指定本地用户登录 时的目录,负责为/home下相应目录。

测试vsftp服务器
# telnet 127.0.0.1 21
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220

5、vsftp相关配置文件说明
/etc/vsftpd/vsftpd.conf
/etc/vsftpd.ftpusers
/etc/vsftpd.user_list
其中,/etc/vsftpd/vsftpd.conf 是主配置文件。/etc/vsftpd.ftpusers 中指定了哪些用户不能访问FTP服务器。/etc/vsftpd.user_list 中指定的用户默认情况( 即在/etc/vsftpd/vsftpd.con中设置了userlist_deny=YES)下也不能访问FTP 服务器,当在/etc/vsftpd/vsftpd.con中设置了userlist_deny=NO时,仅仅允许/etc/vsftpd.user_list 中指定的用户访问FTP 服务器。

让我们来看看/etc/vsftp/vsftpd.conf,用你喜欢的编辑器打开。(注意首先要把这个文件做好备份,这样来个安全第一,万一出错了还可以恢复)
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are very paranoid. This sample
# file
# loosens things up a bit, to make the ftp daemon more usable.
#
# Allow anonymous FTP?
anonymous_enable=YES??????????? ->是否允许匿名登入
#
# Uncomment this to allow local users to log in.
local_enable=YES??????????????? ->是否允许本地用户登入
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES??????????????? ->是否允许用户在FTP服务器文件中有写的权限
#Default umask for local users is 077. You may wish to change this #to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022??????????? ->设置本地用户的文件生成掩码为022
#
# Uncomment this to allow the anonymous FTP user to upload files.
# This only
# has an effect if the above global write enable isactivated.
# Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES????? ->是否允许匿名上传文件
#
# Uncomment this if you want the anonymous FTP user to be able to? # create
# new directories.
anon_mkdir_write_enable=YES?? ->是否允许匿名用户创建目录
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES?? ->激活目录信息,当远程用户更改目录的时候,出现提示
#
# Activate logging of uploads/downloads.
xferlog_enable=YES?? ->启动上传和下载的日志功能
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES?? ->启用FTP数据的端口的连接请求
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES?????? ->改变上传文件的所有者为root
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log? ->设置日志文件的路径和文件名
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES? ->是否使用标准的ftp xferlog日志文件格式
#
# You may change the default value for timing out an idle session.
idle_session_timeout=60? ->设置空闲用户会话中断时间
#
# You may change the default value for timing out a data connection.
data_connection_timeout=120?? ->设置数据连接超时时间
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES??? ->是否允许使用ASCII格式来上传和下载
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service. ->设置欢迎信息
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES ->是否允许禁止匿名用户使用某些邮件地址
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES? ->本地所有帐户都只能在自家目录
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
pam_service_name=vsftpd?? ->设置pam人证服务的配置文件名称
userlist_enable=YES?????? ->用户列表中的用户是否允许登入FTP
#enable for standalone mode
listen=YES????????? -> 使用FTP处于独立模式
tcp_wrappers=YES??? ->使用tcp_wrappers作为主机访问控制方式

默认配置:
(1)允许匿名用户和本地用户登录;
(2)匿名用户的登录名为ftp 或anonymous,口令为一个Email地址;
(3)匿名用户不能离开匿名服务器目录/var/ftp,且只能下载不能上传;
(4)本地用户的登录名为本地用户名,口令为此本地用户的口令;
(5)本地用户可以离开自家目录切换至有权访问的其他目录,并在权限允许的情况下进行上传/下载;
(6)写在文件/etc/vsftpd.ftpusers 中的本地用户禁止登录。
在win下用ftp工具,或在浏览器也行ftp://192.168.0.2,因为可以匿名登入,当然就可以不用密码和用户名噢,匿名登入的目录是在/var/ftp。现在因为没有什么东西,所以看到是个空目录。

默认配置当然不能满足我们需要,下面我们来进一步配置
允许匿名用户上传(一个人始终是能力有限,好东西是要靠大家的,这个设置很重要噢)
//修改vsftpd 的主配置文件/etc/vsftp/vsftpd.conf
# vi /etc/vsftpd.conf
//将如下两行前的#删除
//① #anon_upload_enable=YES 允许匿名用户上传
//②#anon_mkdir_write_enable=YES 开启匿名用户的写和创建目录的权限
//若要以上两项设置生效,同时还要求:
//(1) write_enable=YES
//(2) 匿名用户对文件系统的上传目录具有写权限
//添加如下的配置语句
// anon_world_readable_Only=NO
//上面的配置语句用于放开匿名用户的浏览权限
//修改后存盘退出vi
//
//创建匿名上传目录
# mkdir /var/ftp/incoming
# 修改上传目录的权限
# chmod o+w /var/ftp/incoming/
重启动服务器
#/etc/rc.d/init.d/vsftpd restart
注意(1)匿名用户对/var/ftp/incoming 目录而言是其他用户,所以
必须为此目录添加对其他用户的可写权限才可上传,即此目录
权限的数字表示是707。
(2)只有设置anon_world_readable_Only=NO 后,才能开放匿
名用户的读权限,即:浏览此服务器中全部的内容。

配置基本的性能和安全选项
1. 设置空闲的用户会话的中断时间
例如下面的配置:
idle_session_timeout=600
将在用户会话空闲10 分钟后被中断。
2. 设置空闲的数据连接的的中断时间
例如下面的配置:
data_connection_timeout=120
将在数据连接空闲2 分钟后被中断。
3. 设置客户端空闲时的自动中断和激活连接的时间
例如下面的配置:
accept_timeout=60
connect_timeout=60
将使客户端空闲1 分钟后自动中断连接,并在中断1 分钟后自动激活连接。
4. 设置最大传输速率限制
例如下面的配置:
local_max_rate=50000
anon_max_rate=30000
将使本地用户的最大传输速率为50kkbytes / sec,匿名用户的传输速率为30 kbytes / sec。
5. 设置客户端连接时的端口范围
例如下面的配置:
pasv_min_port=50000
pasv_max_port=60000
将使客户端连接时的端口范围在50000 和60000 之间。这提高了系统的安全性。
6. 设置chroot
在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围
内进行下载和上传。这样的设置对于一个FTP 服务器来说是不安全的。
如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot 选项,涉及如
下选项:
chroot_local_user
chroot_list_enable
chroot_list_file
有两种设置chroot 的方法:
(1)设置所有的本地用户执行chroot
只要将chroot_local_user 的值设为YES 即可,即:
chroot_local_user=YES
(2)设置指定的用户执行chroot
需要如下的设置:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list
这样,只有/etc/vsftpd.chroot_list 文件中指定的用户才执行chroot。

配置基于本地用户的访问控制
要配置基于本地用户的访问控制,可以通过修改vsftpd 的主配置文件/etc/vsftp/vsftpd.conf 来进
行,有如下两种限制方法:
1. 限制指定的本地用户不能访问,而其他本地用户可访问
例如下面的设置:
userlist_enable=NO
userlist_deny=YES
userlist_file= /etc/vsftpd.user_list
使文件/etc/vsftpd.user_list 中指定的本地用户不能访问FTP 服务器,而其他本地用户可访
问FTP 服务器。
2. 限制指定的本地用户可以访问,而其他本地用户不可访问
例如下面的设置:
userlist_enable= YES
userlist_deny= NO
userlist_file= /etc/vsftpd.user_list
使文件/etc/vsftpd.user_list 中指定的本地用户可以访问FTP 服务器,而其他本地用户不可
以访问FTP 服务器。

下面来个例子
高安全级别匿名FTP 服务器的配置要求
仅仅允许匿名用户访问
不允许本地用户访问
关闭所有写权限
不允许匿名用户上传
设置客户端连接时的端口范围
设置 匿名用户的最大传输速率限制
设置空闲的数据连接的的中断时间
设置客户端空闲时的自动中断和激活连接的时间
配置每个主机的最大连接数
配置总的并发连接数
配置禁止访问的主机
配置安全日志
# cat /etc/vsftp/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
service ftp
{
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
}
重启动服务器
#/etc/rc.d/init.d/vsftpd restart
完成了,现在你可以试试看是不是和上面说的限制一样了。

很多FTP服务器都要密码和用户才能下到你要的好东西,你是不是也想要过下这个隐呢?给别人一个用户名和密码,这个配置其实也很简单。
虚拟用户(virtual users)的FTP 服务器的配置。虚拟用户只能访问为其提供的FTP 服务,虚拟用户不能像本地的实用户那样登录系统而访问系统的其他资源。若用户对FTP
服务器站内具有写权限并且不允许访问系统的其他资源,则该用户应该使用虚拟用户才能提高系统的安全性。传统的FTP 服务器采用如下的方法实现虚拟用户:
1、 在本地建立普通用户账号并设置密码
2、将其登录shell 设为不可登录
3、由passwd/shadow 口令系统进行认证
vsftpd 的虚拟用户采用了不与系统账户口令文件合二为一的方法,也就是说,为了认证这
些虚拟用户vsftpd 使用单独的口令库文件(pam_userdb),由可插拔认证模块(PAM)进行认证。使用这种方式更加安全,并且配置更灵活。

配置简单的虚拟用户FTP 服务器
1、生成虚拟用户口令库文件
2、配置生成vsftpd 的认证文件
3、建立虚拟用户所要访问的目录并设置相应权限
4、建立配置文件
//生成虚拟用户口令库文件,为了建立此口令库文件,先要生成一个文本文件
# cat > tom
> foo
> fred
> bar
> valid
> lwd
> dede
> jy
> !
#
//此文本文件的格式是:
//单数行为用户名,偶数行为口令,
//即:用户tom 的口令为foo;用户fred 的口令为bar
//
//下面使用db_load 命令生成口令库文件
# db_load -T -t hash -f ~/logins.txt /etc/vsftpd_login.db
//修改口令库文件的权限
# chmod 600 /etc/vsftpd_login.db
//下面编辑生成虚拟用户所需的PAM 配置文件
# vi /etc/pam.d/ftp.vu
//插入如下两行
//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.vu
#
//下面建立虚拟用户所要访问的目录并设置仅virtual 用户访问的权限
# useradd -d /home/ftpsite virtual
# chmod 700 /home/ftpsite/
#
//在目录中生成测试文件
# su - virtual -c "echo hello>/home/ftpsite/test_file"
#
//下面生成主配置文件
# 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 用户
// 这样虚拟用户登录后才能进入本地用户virtual 的目录/home/ftpsite/
//pasv_min_port=30000
//pasv_max_port=30999
//ftpd_banner=This FTP server is virtual user only.
//pam_service_name=ftp.vu 指定PAM 配置文件为ftp.vu
//插入完毕,保存退出。
#
//下面先关闭原来的服务,而后启动新的服务
# killall vsftpd
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone.vu.conf &
//配置结束


推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 如何在Mozilla Firefox中调整GIF动画的循环次数
    本文介绍了如何通过调整Mozilla Firefox的高级设置来控制GIF动画的播放次数,帮助用户根据个人喜好自定义浏览体验。 ... [详细]
author-avatar
LucifinilC_925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有