说明

简介

FTP 是文件传输协议(File Transfer Protocol)的缩写,属于 TCP/IP 协议簇,用于 Internet 上控制文件的双向传输。

端口

FTP 默认使用 TCP 协议的 20、21 端口用于客户端进行通信
20 端口用于建立数据连接,并传输文件数据
21 端口用于建立控制连接,并传输 FTP 控制命令

模式

主动模式(Standard)

服务器主动发起数据连接,FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送 PORT 命令;PORT 命令包含了客户端用什么端口接收数据,在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据;FTP Server 必须和客户端建立一个新的连接用来传送数据。

被动模式(Passive)

服务器被动等待数据连接,建立控制通道和 Standard 模式类似,但建立连接后发送 Pasv 命令;服务器收到 Pasv 命令后,打开一个临时端口(端口号大于 1023 小于 65535)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器此端口,然后 FTP 服务器将通过这个端口传送数据。

使用

SCP

SCP 命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令

参数

  • -1:强制 scp 命令使用协议 ssh1
  • -2:强制 scp 命令使用协议 ssh2
  • -4:强制 scp 命令只使用 IPv4 寻址
  • -6:强制 scp 命令只使用 IPv6 寻址
  • -B:使用批处理模式(传输过程中不询问传输口令或短语)
  • -C:允许压缩。(将 -C 标志传递给 ssh,从而打开压缩功能)
  • -p:保留原文件的修改时间,访问时间和访问权限
  • -q:不显示传输进度条
  • -r:递归复制整个目录
  • -v:详细方式显示输出;scp 和 ssh(1) 会显示出整个过程的调试信息
  • -c cipher:以 cipher 将数据传输进行加密,这个选项将直接传递给 ssh
  • -F ssh_config:指定一个替代的ssh配置文件,此参数直接传递给 ssh
  • -i identity_file:从指定文件中读取传输时使用的密钥文件,此参数直接传递给 ssh
  • -l limit: 限定用户所能使用的带宽,以 Kbit/s 为单位
  • -o ssh_option:如果习惯于使用 ssh_config(5) 中的参数传递方式
  • -P port:注意是大写的 P, port 是指定数据传输用到的端口号
  • -S program:指定加密传输时所使用的程序,此程序必须能够理解 ssh(1) 的选项

    从本地复制到远程

    1. scp -r local_folder remote_username@remote_ip:remote_folder
    2. scp -r local_folder remote_ip:remote_folder

    从远程复制到本地

    1. 从远程复制到本地,只要将从本地复制到远程的命令的后 2 个参数调换顺序即可

    vsftpd

    1. yum install -y vsftpd
    安装完毕后,该服务会自动为我们创建一个名为 ftp 的程序用户,方便之后进行 ftp 连接
    1. cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
    2. vim /etc/vsftpd/vsftpd.conf
    1. systemctl enable vsftpd
    2. systemctl status vsftpd
    3. systemctl start vsftpd
    4. systemctl restart vsftpd
    5. systemctl stop vsftpd

    Samba

    1. yum install -y samba
    修改配置文件 ```bash /etc/samba/smb.conf # Samba 服务的主配置文件 vi /etc/samba/smb.conf [global] workgroup = WORKGROUP #修改为 Windows 下组名称

    security = share #新版本已经取消这种验证方式

    security = user map to guest = Bad Password #Guest 访问必备 passdb backend = tdbsam

    host allow = #允许访问的 IP

[Public] # 共享名称 comment = Public #描述信息 path = /home/share/public #真实路径 browseable = yes #显示共享目录 writable = yes #允许写入 public = yes #允许 guest 访问 guest ok = yes #同上 valid users = gg #允许访问的用户 ,@为组 write list = root #允许写入的用户 ,@为组 create mask =0777 directory mask=0777

  1. PS.Samba 有四种安全级别(v4.1.1 及以上版本不支持 share server):
  2. - share:不需要用户名和密码就可登陆
  3. - user:默认级别,需要输入用户名和密码
  4. - server:由另外一台 Samba 服务器来对用户进行身份验证
  5. - domain:把 Samba 服务器加入到域,由域控制器来进行身份验证
  6. 创建相应的目录:mkdir 0777 /home/share/public<br />备份共享文件夹:tar cvpzf ys_share_backup.tgz
  7. <a name="Nn7ih"></a>
  8. ### 权限设置
  9. ```bash
  10. # 使用新版 tdbsam 管理帐号
  11. pdbedit -a username # 新建 Samba 账户
  12. pdbedit -x username # 删除 Samba 账户
  13. pdbedit -v username # 显示账户详细信息
  14. pdbedit -L # 列出 Samba 用户列表,读取 passdb.tdb 数据库文件
  15. pdbedit -Lv # 列出 Samba 用户列表详细信息

相关命令

  1. systemctl start smb #启动 SMB 服务
  2. systemctl stop smb #停止 SMB 服务
  3. systemctl enable smb #设置开机启动
  4. systemctl restart smb #重启 SMB 服务
  5. systemctl status smb #查看 SMB 服务状态

故障

一般服务启动错误,可以用“journalctl -xe”查看错误信息

无法访问

网络正常,服务启动的情况下还是无法访问,基本就是防火墙的问题,需要关闭或者放行相应的端口:

  1. #放行端口
  2. firewall-cmd --permanent --add-port=137/tcp
  3. firewall-cmd --permanent --add-port=138/tcp
  4. firewall-cmd --permanent --add-port=139/tcp
  5. firewall-cmd --permanent --add-port=445/tcp
  6. firewall-cmd --permanent --add-port=901/tcp
  7. firewall-cmd --reload
  8. #关闭防火墙
  9. systemctl stop firewalld
  10. #其他命令
  11. systemctl enable firewalld #开机启动
  12. systemctl disable firewalld #禁止开机启动

无效权限

一切配置好,但是就是无法获取写入权限,排查发现是 Linux 的 Selinux 问题:

  1. setenforce 0 #临时停止 Selinux
  2. vm /etc/sysconfig/selinux #编辑文件永久关闭
  3. SELINUX=disabled