FTP(File Transfer Protocol)
主要用来进行文件的传输,尤其是大型文件 时使用FTP传输更方面,但是使用FTP时使用明文传输,具有一定程度的危险性.下面介绍较为安全但功能较少的vsftpd.
ubuntu安装vsftpd
sudo apt install vsftpd
sudo apt install ftp
1.不同等级的用户身份:user,guest,anonymous
实体用户real user获得系统的权限比较完整,所以可以进行比较多的操作,而匿名用户仅提供他下载资源的能力而已
2.限制用户活动目录:change root简称chroot
用来限制用户仅能在自己的用户主目录当中活动,如此一来,由于用户无法离开自己的用户主目录,而且登录FTP后,显示的根目录就是自己用户主目录的内容,这种环境称之为 change root
,简称chroot
,即改变根目录的意思.
linux下常用ftp命令
这里以匿名登录为例
[ubuntu@VM-48-245-ubuntu ~]$ ftp ftp.ksu.edu.tw
Connected to ftp.ksu.edu.tw.
220 Welcome to Kun Shan University FTP service.
Name (ftp.ksu.edu.tw:ubuntu): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> get filename 下载单一文件
ftp> mget filename* 下载多个文件,可以用通配符*
ftp> put filename 上传filename到这个服务器上
ftp> delete filename 删除ftp服务器上的filename文件
ftp> passive 启动或孤傲牛逼passive模式
ftp> bye 结束ftp的使用
如果目标FTP主机port更改,则使用如下方式连接主机
[ubuntu@VM-48-245 ~]$ ftp hostname 318
FTP的传输使用的是TCP数据包协议,TCP在简历连接前会先进行3次握手,不过FTP服务器是比较麻烦,因为FTP服务器使用了两个连接,分别是命令通道
和数据流通道(ftp-data)
FTP默认使用主动式(Active)连接
建立命令通道的连接
如上图所示,用户端会随机取一个大于 1024 以上的埠口 (port AA) 来与 FTP 伺服器端的 port 21 达成连线, 这个过程当然需要三向交握了!达成连线后用户端便可以透过这个连线来对 FTP 伺服器下达指令, 包括查询档名、下载、上传等等指令都是利用这个通道来下达的;
通知 FTP 服务器端使用 active 且告知连接的端口号
FTP 服务器的 21 端口号主要用在命令的下达,但是当牵涉到资料流时,就不是使用这个连线了。 用户端在需要资料的情况下,会告知服务器端要用什麽方式来连线,如果是主动式 (active) 连线时, 用户端会先随机启用一个端口 (图 21.1-1 当中的 port BB) ,且透过命令通道告知 FTP 服务器这两个资讯,并等待 FTP 服务器的连线;
FTP 服务器『主动』向用户端连接
FTP 服务器由命令通道了解用户端的需求后,会主动的由 20 这个端口号向用户端的 port BB 连线, 这个连线当然也会经过三向交握啦!此时 FTP 的用户端与服务器端共会建立两条连线,分别用在命令的下达与资料的传递。 而预设 FTP 服务器端使用的主动连线端口号就是 port 20 !
因为SSH技术的产生,我们现在可以用SSH提供的sftp
这个Server,在上面传输的数据是经过加密的,所以比较安全一些.
SFTP常用命令
连接
user@user-virtual-machine:~$ sftp user@localhost
user@user-virtual-machine:~$ sftp user@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
user@localhost's password:
Connected to localhost.
sftp> ls
将文件有本机上传到远程主机
sftp> put /etc/hosts
将文件由远程主机下载回来
sftp> get.bashrc