前言
本文第一部分基本概念大多来自百科,其中vsftpd.conf文件详解还有待补充,这是个坑。第二部分还没开动,闲下来后弄。
第一部分:基本概念
一、ftp 简介
1、是什么?
文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。但它有明显的缺点,一个是明文传输,另一个是支持系统用户可能导致数据泄露。
文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
尽管World Wide Web(WWW)已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像xftp这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名FTP服务器”。
当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。
2、三种用户
- Real帐户:这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
- Guest用户:在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
- Anonymous(匿名)用户:这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。
在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。
3、两种模式
-
Standard (PORT方式,主动方式):
主动模式
(1) 客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口
(2) 服务器的21号端口给予客户端响应数据流
(3) 服务器打开20号端口去连接客户端的N+1的端口
(4) 客户端给予响应,数据开始传输
在进行文件传输时,FTP的客户端和服务器之间要建立两个并行的TCP连接,控制连接和数据连接。FTP客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。 -
Passive (PASV,被动方式):
被动模式
(1) 客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口
(2) 服务器的21号端口给予客户端响应
(3) 服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口
(4) 服务器给予响应,于是数据开始传输
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.2.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26。
4、如何使用?
- TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。
- 使用浏览器/Windows资源管理器,用户只需要在地址栏中输入如下格式的url地址:
ftp://[用户名:口令@]ftp服务器域名:[端口号]
。 -
命令行/终端下可以在cmd下输入ftp回车,然后输入IP来建立一个连接,也可以用上一条的方法连接。通过
put
命令和get
命令达到上传和下载的目的,通过ls
命令列出目录等,退出使用bye
命令,帮助使用help
命令。 - 使用ftp客户端软件,诸如xftp、FileZilla、ForkLift。
二、sftp 简介
1、是什么?
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。
2、如何使用?
与ftp类似。
- linux下直接在终端中输入:
sftp username@remote ip(or remote host name)
。出现验证时,只需填入正确的密码即可实现远程链接。登入成功后终端呈现出:sftp>....
在sftp的环境下的操作就和一般ftp的操作类似了,ls,rm,mkdir,dir,pwd
,等指令都是对远端进行操作,如果要对本地操作,只需在上述的指令上加‘l’变为:lls,lcd, lpwd
等。当然既然是ftp,当然得说它的上传和下载咯!
上传:put /path/filename(本地主机) /path/filename(远端主机)
下载:get /path/filename(远端主机) /path/filename(本地主机)
另外提一下sftp在非正规端口(正规的是22号端口)登录:sftp -o port=1000 username@remote ip
。 - windows中可以使用客户端软件Core FTP,FileZilla, WinSCP,Xftp来连接SFTP进行上传,下载文件,建立,删除目录等操作。MacOS中可以使用终端,也可以使用ForkLift、Transmission等客户端软件。
3、sftp 命令一览表
sftp Available commands | instruction |
---|---|
bye | 退出 sftp |
exit | 退出 sftp |
quit | 退出 sftp |
help | 显示帮助文本 |
? | help 的同义词 |
cd path | 切换远程目录到 'path' |
ls [-1afhlnrSt] [path] | 显示远程路径列表 |
pwd | 显示远程当前路径 |
rename oldpath newpath | 重命名远程文件 |
rm path | 删除远程文件 |
mkdir path | 创建远程路径 |
rmdir path | 删除远程路径 |
chmod mode path | 改变文件 'path' 的权限为 'mode' |
chown own path | 改变文件 'path' 的属主为 'own' |
chgrp grp path | 改变文件 'path' 的所属用户组为 'grp' |
df [-hi] [path] | 显示当前目录或包含 'path' 的文件系统的数据 |
get [-afPpRr] remote [local] | 下载文件 |
reget [-fPpRr] remote [local] | 重新下载文件 |
put [-afPpRr] local [remote] | 上传文件 |
reput [-fPpRr] [local] remote | 重新上传文件 |
lcd path | 改变本地路径到 'path' |
lls [ls-options [path]] | 显示本地路径列表 |
lmkdir path | 创建本地路径 |
lpwd | 打印本地当前路径 |
lumask umask | Set local umask to 'umask' |
ln [-s] oldpath newpath | 链接远程文件 (-s for symlink) |
progress | Toggle display of progress meter |
symlink oldpath newpath | Symlink remote file |
version | 显示 SFTP 版本 |
!command | 在本地 shell 执行命令 'command' |
! | 逃逸到本地 shell |
三、vsftpd 简介
1、是什么?
vsftpd 是“very secure FTP daemon( 英 [ˈdi:mən],守护进程)”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征,是Linux下最受推崇的ftp服务。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等。
2、vsftpd.conf 文件详解
- 原文:http://vsftpd.beasts.org/vsftpd_conf.html#lbAB
- 描述:可以使用 vsftpd. conf 控制 vsftpd 的各个方面。默认的 vsftpd 中寻找这个文件的位置
/etc/vsftpd. conf
。 - 格式:每一行可以是注释或者指令。以
#
开始的注释行是被忽略的。指令行具有格式 :option=value
。
值得注意的是 ,在=
、option
和value
之间是不能有任何空格的。每个选项都有默认值,可以在配置文件中更改。
_____________________________________________待补充________________________________________
参考:vsftpd官方faq中文版 https://blog.csdn.net/liuzh501448/article/details/1878819
参考原文:http://vsftpd.beasts.org/vsftpd_conf.html#lbAB
Boolean Options | Instruction | Default |
---|---|---|
allow_anon_ssl | 只有在ssl_enable有效时才会应用。如果为YES,那么匿名用户将会被允许使用安全SSL连接。 | NO |
anon_mkdir_write_enable | 如果为YES,那么匿名用户将被允许在某种条件下创建新路径。要使之有效,write_enable必须为YES,并且匿名用户必须对父路径有写权限。 | NO |
anon_other_write_enable | 如果为YES,那么匿名用户将被允许除了上传和创建路径之外的写权限,例如删除和重命名。此项不推荐。 | NO |
anon_upload_enable | 如果为YES,那么匿名用户将被允许在某种条件下上传文件。要使之有效,write_enable必须为YES,并且匿名用户必须对目标上传位置有写权限。此项也用于虚拟用户的上传设置。 | NO |
anon_world_readable_only | 如果为YES,那么匿名用户将只被允许下载全世界可读的文件。 | YES |
anonymous_enable | 控制匿名用户能否登录,如果为YES,那么用户名ftp和anonymous以匿名登录。 | YES |
ascii_download_enable | 如果为YES,那么ASCII模式数据传输将在下载时有效。 | NO |
ascii_upload_enable | 如果为YES,那么ASCII模式数据传输将在上传时有效。 | NO |
async_abor_enable | 如果为YES,那么特殊的FTP命令"async ABOR"(异步退出)将会使能。此项难以处理,默认无效。 | NO |
background | 如果为YES,那么vsftpd将以监听模式开启,监听程序在后台运行,也就是说控制权立即回到了开启vsftpd的shell手中。 | NO |
check_shell | 此项只对无PAM的vsftpd有效。如果为NO,那么vsftpd将不会对本地登录的有效用户shell检查 /etc/shells 。 |
YES |
chmod_enable | 如果为YES,那么允许使用命令“SITE CHMOD”。此项只对本地用户有效,匿名用户永远无效。 YES | |
chown_uploads | 如果为YES,那么所有匿名上传的文件的属主都会被改变为chown_username所设置的用户。 NO | |
chroot_list_enable | 如果为YES,那么你可能会提供一张在他们登录时被放置于他们家目录chroot()监狱的本地用户列表,当chroot_local_user为YES时,意义有所不同,在此种情况下,这张表变成了一张不会被放置在chroot()监狱的用户列表。包含此表的文件默认为/etc/vsftpd.chroot_list ,但你也可以通过 chroot_list_file 选项进行重写。 |
NO |
chroot_local_user | 如果为YES,那么本地用户将会在登录后被放置在他们家目录的chroot()监狱中,注意:此选项有安全性暗示,特别是用户有上传权或shell访问权的时候。请在你知道自己在做什么的时候开启,慎重。注意这些安全性暗示并非vsftpd独有,所有提供放置本地用户到chroot() jail的功能的FTP守护进程都有。 | NO |
connect_from_port_20 | 控制服务器上PORT模式的数据连接是否使用端口20。处于安全考虑,一些客户端可能坚决要求此项。相反,禁用此项可使vsftpd以稍微较小的特权运行。 | NO |
debug_ssl | ||
delete_failed_uploads | ||
deny_email_enable | ||
dirlist_enable | ||
dirmessage_enable | ||
download_enable | ||
dual_log_enable | ||
force_dot_files | ||
force_anon_data_ssl | ||
force_anon_logins_ssl | ||
force_local_data_ssl | ||
force_local_logins_ssl | ||
guest_enable | ||
hide_ids | ||
implicit_ssl | ||
listen | ||
listen_ipv6 | ||
local_enable | ||
lock_upload_files | ||
log_ftp_protocol | ||
ls_recurse_enable | ||
mdtm_write | ||
no_anon_password | ||
no_log_lock | ||
one_process_model | ||
passwd_chroot_enable | ||
pasv_addr_resolve | ||
pasv_enable | ||
pasv_promiscuous | ||
port_enable | ||
port_promiscuous | ||
require_cert | ||
require_ssl_reuse | ||
run_as_launching_user | ||
secure_email_list_enable | ||
session_support | ||
setproctitle_enable | ||
ssl_enable | ||
ssl_request_cert | ||
ssl_sslv2 | ||
ssl_sslv3 | ||
ssl_tlsv1 | ||
strict_ssl_read_eof | ||
strict_ssl_write_shutdown | ||
syslog_enable | ||
tcp_wrappers | ||
text_userdb_names | ||
tilde_user_enable | ||
use_localtime | ||
use_sendfile | ||
userlist_deny | ||
userlist_enable | ||
validate_cert | ||
virtual_use_local_privs | ||
write_enable | ||
xferlog_enable | ||
xferlog_std_format |
Numeric Options | Instruction | Default |
---|---|---|
accept_timeout | ||
anon_max_rate | ||
anon_umask | ||
chown_upload_mode | ||
connect_timeout | ||
data_connection_timeout | ||
delay_failed_login | ||
delay_successful_login | ||
file_open_mode | ||
ftp_data_port | ||
idle_session_timeout | ||
listen_port | ||
local_max_rate | ||
local_umask | ||
max_clients | ||
max_login_fails | ||
max_per_ip | ||
pasv_max_port | ||
pasv_min_port | ||
trans_chunk_size |
String Options | Instruction | Default |
---|---|---|
anon_root | ||
banned_email_file | ||
banner_file | ||
ca_certs_file | ||
chown_username | ||
chroot_list_file | ||
cmds_allowed | ||
cmds_denied | ||
deny_file | ||
dsa_cert_file | ||
dsa_private_key_file | ||
email_password_file | ||
ftp_username | 这是处理匿名FTP用户的名称,此用户的家目录就是匿名FTP的根目录。 | ftp |
ftpd_banner | 此选项允许你重写第一次连接时显示的欢迎横幅 | (none - default vsftpd banner is displayed) |
guest_username | 只有在guest_enable为YES时有效。此选项用于设置游客用户所映射的真实用户。 ftp | |
hide_file | ||
listen_address | 当vsftpd为独立模式时,默认的监听地址(属于所有本地接口)可以被此选项重写,请提供一个IP地址。 | (none) |
listen_address6 | 与listen_address类似,但是特指IPv6,对应也需要listen_ipv6有效。请提供一个标准ipv6地址。 | (none) |
local_root | 此选项表示当本地用户(即非匿名用户)登录后vsftpd将会进入到的路径。 | (none) |
message_file | ||
nopriv_user | ||
pam_service_name | ||
pasv_address | ||
rsa_cert_file | 此选项指明使用SSL加密的连接的RSA证书的地址。 | /usr/share/ssl/certs/vsftpd.pem |
rsa_private_key_file | 此选项指明使用SSL加密的连接的RSA私钥的地址。若此项没有设置,则私钥将会存储在证书所在位置。 | (none) |
secure_chroot_dir | 此选项需要一个为空的路径名。并且此路径不能被ftp 用户所写。这个路径被用来作为安全chroot() 监牢。 | /usr/share/empty |
ssl_ciphers | ||
user_config_dir | 这一强大的选项允许重写任何的配置选项,在每个用户的基础上。示例:如果你设置user_config_dir为/etc/vsftpd_user_conf ,然后以用户"chris"登录,那么vsftpd将会在会话过程中应用/etc/vsftpd_user_conf/chris 文件里的设置。此文件的格式在这个手册页面中。请注意不是所有的设置都对每个用户有效,例如许多设置只会比用户会话开始时要高一级,包括listen_address, banner_file, max_per_ip, max_clients, xferlog_file, etc. |
(none) |
user_sub_token | ||
userlist_file | 此选项是当userlist_enable选项有效时会加载的文件名。 | /etc/vsftpd.user_list |
vsftpd_log_file | ||
xferlog_file |
以上未完,还需要进行更新,这个是2009年的版本,待继续补充,有时间再写。
可以参看:vsftpd配置文件详解 https://www.cnblogs.com/rainiplus/p/3739100.html,https://blog.csdn.net/houhj168/article/details/80436073。
所谓“jail(监牢)”就是指通过chroot("change root")机制来更改某个进程所能看到的根文件夹,即将某进程限制在指定文件夹中,保证该进程仅仅能对该文件夹及其子文件夹的文件有所动作,从而保证整个server的安全。
如今的server软件通常设计为以root权限启动,然后server进程自行放弃root,再以某个低权限的系统账号来执行进程。这样的方式的优点在于一旦该服务被攻击者利用漏洞入侵,因为进程权限非常低,攻击者得到的訪问权限又是基于这个较低权限的,对系统造成的危害比曾经减轻了很多。
为了进一步提高系统安全性,Linux内核引入了chroot机制。chroot是内核中的一个系统调用,软件能够通过调用库函数chroot,来更改某个进程所能见到的根文件夹。创建chroot“监牢”的作用就是将进程权限限制在文件系统文件夹树中的某一子树中。
更多 chroot 与 jail 的知识,可访问:https://www.cnblogs.com/yxwkf/p/3902433.html。
第二部分:实战演练
一、CentOS下搭建FTP服务器
____________________________________________待补充________________________________________
- 环境:CentOS 7.4 64位 & vsftpd。
- 要求(待更新):1、新增硬盘 分区 /mnt/part1。2、public {匿名账号根} 公共文档存放处。3、home/账号1...................账号n。4、节省磁盘空间 本地账户分配空间配额为10M。5、下载速率本地账号 1M/S匿名 100K/S。6、最大用户连接数 100 每ip的连接数 2。
前提:Linux系统磁盘管理、用户管理。安装前要了解:ftp的账户是主机Linux的一个账户,所以最好了解一些Linux终端账户管理的知识。
看:https://blog.51cto.com/tyjhz/1434300
看:https://blog.csdn.net/avscript/article/details/53148770?utm_source=blogxgwz7
VSFTPD虚拟用户实战配置:https://www.cnblogs.com/fengdejiyixx/p/9442769.html
macOS的ftp:https://blog.csdn.net/ynnmnm/article/details/50903933
网友评论