大家好,关于ubuntu搭建ftp服务器很多朋友都还不太明白,今天小编就来为大家分享关于如何在ubuntu中安装设置ftp服务器的知识,希望对各位有所帮助!
一、ubuntu下ftp服务器有哪些
1.VSFTPD
这个应该是最常用的FTP服务器之一,号称是最安全的。文件传输速度快(在一份评测报告中看到的,比其余两种快很多),搭建也比较容易。但是在使用过程中我感觉它在目录权限控制上不如proftpd方便。配置文件也相对复杂。在这三个服务器中,我将它排在第二名。
2.PROFTPD
这个我比较喜欢,配置问价很容易看懂,对目录的权限控制功能比较强大。很容易上手。在这三个里面我将它排在第一名、
3.PUREFTPD
之所以使用这个是因为它能够在配置文件里指定客户端使用的编码方式,对于windows和linux之间的上传非常方便。但是在实际使用过程中发现,它的这个功能仍然有缺陷,就是当传输的文件很多,目录层次也比较深的时候,它不能够将所有的名称都做正确的字符集转换,仍然会出现一些乱码。只能说它部分的解决了乱码问题。另外它的配置方式也比较独特,每一个选项是一个文件。我感觉比较繁琐,不太习惯。因此将它排在最后一名。
二、如何在ubuntu中安装设置ftp服务器
FTP服务器是平时应用最为广泛的服务之一。VSFTP是Very Secure
FTP的缩写,意指非常安全的FTP服务。VSFTP功能强大,通过结合本地系统的用户认证模块及其多功能的配置项目,可以快速有效的搭建强大的多用户FTP服务。
首先我们考虑搭建FTP服务需要关注的都有哪些方面?比如我们最经常关注的有:
1、如何添加FTP用户?
2、如何临时冻结某FTP用户?
3、FTP用户登入后的默认目录?是否可以改变?
4、如何锁定FTP用户可访问的目录范围?
5、FTP用户可以有哪些访问权限?可否上传文件?
我们将带着这些问题来探讨如何配置VSFTP以达到预定目标。
一、主要配置选项
VSFTP的主配置文件是/etc/vsftpd.conf
。由于可配置的选项实在太多,无法一一详谈,只能截取比较常用的功能配置选项来加以说明。完整说明可参考man
vsftpd.conf。
这里需要注意的是,每个配置选项都是由“配置项目名称=配置值“所定义。在每个配置变量后,要紧跟等号,再紧跟设置的变量值。中间不允许出现空格之类的分隔符,否则导致配置错误,无法生效!
另外,如果需要开通上传功能,则应注意用来登录FTP的本地系统用户对要操作的目录需要具备写权限,否则无法上传文件!
版本vsftpd: version 2.0.6
启动VSFTPD:sudo/etc/init.d/vsftpd start
停止VSFTPD:sudo/etc/init.d/vsftpd stop
重启VSFTPD:sudo/etc/init.d/vsftpd restart
以下为常用的配置选项:
1、listen=YES
若设置为YES,开启监听网络。
2、anonymous_enable
若设置为YES,则允许匿名用户访问;若设置为NO则拒绝匿名用户访问。
如果开启的话,则可以通过用户名ftp或者anonymous来访问,密码随便。
3、local_enable
若设置为YES,则允许通过本地用户帐号访问;若设置为NO,则拒绝本地用户帐号访问。如果你拒绝了陌生人访问,那么这个必须设置为YES吧,否则谁能访问你的FTP呢?
4、write_enable
若设置为YES,则开启FTP全局的写权限;若设置为NO,则不开。
若为NO则所有FTP用户都无法写入,包括无法新建、修改、删除文件、目录等操作,也就是说用户都没办法上传文件!!
5、anon_upload_enable
若设置为YES,开启匿名用户的上传权限。前提是write_enable有开启,并且用户具有对当前目录的可写权限。
若设置为NO,则关闭匿名用户的上传权限。
6、anon_mkdir_write_enable
若设置为YES,开启匿名用户新建目录的权限。前提是write_enable有开启,并且用户具有对当前目录的可写权限。
若设置为NO,则关闭匿名用户新建目录的权限。
7、dirmessage_enable
若设置为YES,则可开启目录信息推送,也就是用户登录FTP后可以列出当前目录底下的文件、目录。这个应该要开启吧!
8、xferlog_enable
若设置为YES,则开启登录、上传、等事件的日志功能。应开启!
9、xferlog_file=/var/log/vsftpd.log
指定默认的日志文件,可指定为其他文件。
10、xferlog_std_format
若设置为YES,则启用标准的ftpd日志格式。可以不启用。
11、connect_from_port_20
若设置为YES,则服务器的端口设为20。
如果不想用端口20,可以另外通过ftp_data_port来指定端口号。
12、chown_uploads
若设置为YES,则匿名用户上传文件后系统将自动修改文件的所有者。
若要开启,则chown_username=whoever也需指定具体的某个用户,用来作为匿名用户上传文件后的所有者。
13、idle_session_timeout=600
不活动用户的超时时间,超过这个时间则中断连接。
14、data_connection_timeout=120
数据连接超时时间。
15、ftpd_banner=Wele to blah FTP
service.
FTP用户登入时显示的信息。
16、local_root=/home/ftp
指定一个目录,用做在每个本地系统用户登录后的默认目录。
17、anon_root=/home/ftp
指定一个目录,用做匿名用户登录后的默认目录。
18、chroot_local_user、 chroot_list_enable、chroot_list_file
这个组合用于指示用户可否切换到默认目录以外的目录。
其中,chroot_list_file默认是/etc/vsftpd.chroot_list,该文件定义一个用户列表。
若chroot_local_user
设置为NO,chroot_list_enable设置为NO,则所有用户都是可以切换到默认目录以外的。
若chroot_local_user
设置为YES,chroot_list_enable设置为NO,则锁定FTP登录用户只能在其默认目录活动,不允许切换到默认目录以外。
若chroot_local_user
设置为YES,chroot_list_enable设置为YES,则chroot_list_file所指定的文件里面的用户列表都可以访问默认目录以外的目录,而列表以外的用户则被限定在各自的默认目录活动。
若chroot_local_user设置为NO,chroot_list_enable设置为YES,则chroot_list_file所指定的文件里面的用户列表都被限定在各自的默认目录活动,而列表以外的用户则可以访问默认目录以外的目录。
建议设置:chroot_local_user与chroot_list_enable都设置为YES。这样就只有chroot_list_file所指定的文件里面的用户列表可以访问默认目录以外的目录,而列表以外的用户则被限定在各自的默认目录活动!
好处:所有人都被限制在特定的目录里面。如果某些特定用户需要访问其他目录的权限,只需将其用户名写入chroot_list_file文件就可以赋予其访问其他目录的权限!
19、userlist_file、userlist_enable、userlist_deny
这个组合用于指示用户可否访问FTP服务。
其中,userlist_file默认是/etc/vsftpd.user_list,该文件定义一个用户列表。
若userlist_enable设置为YES,userlist_deny设置为NO,则只有userlist_file所指定的文件里面的用户列表里面的用户可以访问FTP。
若userlist_enable设置为YES,userlist_deny设置为YES,则userlist_file所指定的文件里面的用户列表里面的用户都被拒绝访问FTP。
若userlist_enable设置为NO,userlist_deny设置为YES,则这个列表没有实际用处,起不到限制的作用!因为所有用户都可访问FTP。
建议设置:userlist_enable与userlist_deny都设置为YES。这样则userlist_file所指定的文件里面的用户列表里面的用户都被拒绝访问FTP。
好处:只需将某用户帐号加入到userlist_file所指定文件里面的用户列表,就可以起到暂时冻结该用户的功能!
20、user_config_dir
指定一个目录用于存放针对每个用户各自的配置文件,比如用户kkk登录后,会以该用户名建立一个对应的配置文件。
比如指定user_config_dir=/etc/vsftpd_user_conf,
则kkk登录后会产生一个/etc/vsftpd_user_conf/kkk的文件,这个文件保存的配置都是针对kkk这个用户的。可以修改这个文件而
不用担心影响到其他用户的配置。
二、我的VSFTP的配置方案
#首先要安装VSFTP。源码编译或软件包安装都可以。
#以下方案实现以下功能:
#1、锁定用户在/home/ftp默认目录活动,
#
并保留/etc/vsftpd.chroot_list文件里面的用户列表可访问其他目录。
#2、具备暂时冻结FTP用户的功能,将需暂停的用户名加入到/etc/vsftpd.usr_list即可。
#
#设置配置文件:
#复制以下文件并保存为/etc/vsftpd.conf
#新建两文件:touch/etc/vsftpd.chroot_list
#
touch/etc/vsftpd.user_list
#新建目录:mkdir/home/ftp
#新建群组:addgroup ftp
#修改/home/ftp属*:chown ftp:ftp/home/ftp
#新增FTP用户: adduser--shell/bin/false--home/home/ftp
your_usr_name
#把需要开通FTP的用户名加入到ftp群组:usermod-aG ftp your_usr_name
#注意:
#如果你的/etc/shells里面没有包含/bin/false,则你用上述的方法建立的用户将法访问#FTP,解决方法:编辑/etc/shells,加入/bin/false这行。
#
# Example config file/etc/vsftpd.conf
listen=YES
#listen_ipv6=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Wele to blah FTP
service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
anon_root=/home/ftp
local_root=/home/ftp
userlist_file=/etc/vsftpd.user_list
userlist_enable=YES
userlist_deny=YES
三、回答前面提到的问题
1、如何添加FTP用户?
设置local_enable为YES可以开放系统用户访问FTP。
在系统里面添加用户,将shell设置为/bin/false,并将其家目录若设置为/home/ftp或者其他目录。这样就可以建立只访问FTP而无法登录shell环境的用户。
注意:可以新建一个ftp组,把/home/ftp的所有者设为ftp,群组也设为ftp。然后所有新添加的FTP用户只需加入到FTP群组就可以具有对/home/ftp的访问权限了。这样也方便管理用户量比较大的FTP系统。如:
sudo addgroup ftp#如果有了就不用添加
sudo chown ftp:ftp/home/ftp#如果改过了就不用再改
sudo adduser--shell/bin/false--home/home/ftp user1
#添加用户user1
sudo usermod-aG ftp
user1#把用户user1加入到ftp组
这样便可以通过用户名user1来访问FTP服务了。
2、如何临时冻结某FTP用户?
将userlist_enable与userlist_deny都设置为YES。这样userlist_file所指定的文件里面的用户列表里面的用户都
被拒绝访问FTP。只需将某用户帐号加入到userlist_file所指定文件里面的用户列表,就可以起到暂时冻结该用户的功能!如需重新开通使用权
限,则只需从该文件中去掉相应的用户名。
3、FTP用户登入后的默认目录?是否可以改变?
可以通过local_root、anon_root来指定相应的默认目录。
4、如何锁定FTP用户可访问的目录范围?
将chroot_local_user与chroot_list_enable都设置为YES。这样就只有chroot_list_file所指定的文件
里面的用户列表可以访问默认目录以外的目录,而列表以外的用户则被限定在各自的默认目录活动!如果某些特定用户需要访问其他目录的权限,只需将其用户名写
入chroot_list_file文件就可以赋予其访问其他目录的权限!
5、FTP用户可以有哪些访问权限?可否上传文件?
设置write_enable可以开启全局的写权限。这样FTP用户就可以在本地帐号管理系统允许的范围内进行写操作了
三、Linux怎么安装使用FTP服务器ProFTPD
Linux安装使用FTP服务器ProFTPD方法
Linux VPS用户一般都通过SFTP/SCP协议连接OpenSSH Server进行文件传输,但有时候,你希望某些用户只能上传文件到网站目录,而不能够登录系统执行命令以及访问其他目录,这时用FTP Server就能很好地实现.Linux上常用的FTP Server有VSFTPD和ProFTPD,其中ProFTPD简单易用,功能也不错,这里以ProFTPD为例搭建FTP服务器.当然,FTP也可以作为局域网内文件共享的一种方式,比如你的室友使用Windows,向你的Ubuntu ProFTPD个人电脑上传了一部*,这样就不用拿U盘去拷贝了,其他室友也可以从你的ProFTPD上*.
proftpd的配置方式类似apache,比vsftpd更易用,xampp就集成了proftpd.
代码如下:
sudo apt-get install proftpd-basic
安装时默认作为一个standalone server运行proftpd,如果每天的ftp请求量少,可以安装为id服务,节省服务器资源.
这里我使用默认值,安装为standalone server.
代码如下:
sudo stat-antp|grep proftpd
查看proftpd监听的21端口
用proftpd提供的ftpasswd新建虚拟用户test并设置密码:
代码如下:
sudo mkdir-p/png/proftpd
代码如下:
sudo ftpasswd\
--passwd\
--file=/png/proftpd/passwd\
--name=test\
--uid=122\
--gid=65534\
--home=/srv/ftp\
--shell=/bin/false
其中uid和gid我使用的是安装proftpd时自动创建的系统用户ftp:nogroup的uid和gid,执行cat/etc/passwd|grep ftp可见.
/srv/ftp是安装proftpd时自动创建的目录,所有者为ftp:nogroup,权限为755.
这样虚拟用户test以系统用户ftp:nogroup登录/srv/ftp便可以对该目录进行读写.
Linux上的FTP Server的读写权限是映射到系统UGO(User Group Other)上的.
创建虚拟用户时通过设置系统用户uid和gid,以及合理地配置/srv/ftp目录及其文件权限来实现读写控制.
创建新用户时再次执行上述命令即可,根据需要改变一些参数.
比如我创建了一个以uid:gid为1000:1000的系统用户运行,登录目录为/png//example.的虚拟用户eechen:
代码如下:
sudo ftpasswd\
--passwd\
--file=/png/proftpd/passwd\
--name=eechen\
--uid=1000\
--gid=1000\
--home=/png//example.\
--shell=/bin/false
创建用户不需要重载proftpd,因为proftpd每次认证时都会读取认证文件.
代码如下:
sudo chown proftpd:nogroup/png/proftpd/passwd设置passwd文件读写权限,确保proftpd能读取该文件.
代码如下:
sudo nano/etc/proftpd/proftpd.conf
在末尾加入:
代码如下:
DefaultRoot~#将用户限定在自己的目录中,上面test用户对应的就是/srv/ftp
RequireValidShell off#禁用Shell请求认证
AuthOrder mod_auth_file.c#认证方式顺序,这里采用文件认证
AuthUserFile/png/proftpd/passwd#存放用户名和密码的文件
代码如下:
sudo service proftpd reload
重载使配置生效。
更改proftpd的默认端口
在文件/etc/proftpd.conf找到:
代码如下:
Port 21
更改为:
代码如下:
Port 2121
如果开启了iptables,iptables限制了所有的出站端口,加载模块ip_conntrack_ftp,这时在加载ip_conntrack_ftp模块时需要更改代理端口为2121。
打开/etc/sysconfig/iptables-config,保证此文件定义加载了ip_conntrack_ftp,如:
代码如下:
IPTABLES_MODULES="ip_conntrack_ftp"
然后在文件/etc/modprobe.conf增加此模块的参数:
代码如下:
options ip_conntrack_ftp ports=2121
如果需要手动加载,则可以执行以下命令:
代码如下:
/sbin/modprobe ip_conntrack_ftp ports=2121