张裕网站建设的目标,在线生成小程序,企业网站管理,wordpress产品列表插件文件共享 - FTP1 FTP1.1 传输方式1. ASCII传输方式2. 二进制传输模式3. 两种传输方式的区别1.2 支持的模式1. 主动模式(PORT)2. 被动模式(PASV)3. 如何选择4. 为什么绝大部分互联网应用都是被动模式#xff1f;1.3 搭建FTP服务器#xff08;使用vsftpd#xff09;1. 安装软件…
文件共享 - FTP1 FTP1.1 传输方式1. ASCII传输方式2. 二进制传输模式3. 两种传输方式的区别1.2 支持的模式1. 主动模式(PORT)2. 被动模式(PASV)3. 如何选择4. 为什么绝大部分互联网应用都是被动模式1.3 搭建FTP服务器使用vsftpd1. 安装软件2. 关闭防火墙3. 启动vsftpd服务4. 查看端口5. 主配置文件6. 默认目录7. 登录ftp8. 基本指令9. 示例2 FTPS2.1 两种模式1. FTPS 隐式 SSL2. FTPS 显式 SSL2.2 搭建FTPS服务器1. 编辑openssl配置文件2. 生成相关文件3. 搭建本地CA服务器4. 给自己发证5. 修改vsftpd配置文件/etc/vsftpd/vsftpd.conf6.重启服务进行测试3 SFTP3.1 SFTP数据传输过程3.2 搭建sftp1. 关闭防火墙和selinux2. 安装SSH服务3. 新建用户和SFTP目录4. 配置SSH和SFTP服务器5. 重启并配置防火墙6. 访问测试7. SFTP常用命令4 SFTP 和FTPS的区别5 常见连接错误本文将介绍FTP/SFTP/FTPS使用方法1 FTP
FTP 是File Transfer Protocol文件传输协议的英文简称而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时它也是一个应用程序Application。基于不同的操作系统有不同的FTP应用程序而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中用户经常遇到两个概念”下载”Download和”上传”Upload。”下载”文件就是从远程主机拷贝文件至自己的计算机上”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说用户可通过客户机程序向从远程主机上传下载文件。
与大多数Internet服务一样FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令服务器程序执行用户所发出的命令并将执行的结果返回到客户机。比如说用户发出一条命令要求服务器向用户传送某一个文件的一份拷贝服务器会响应这条命令将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件将其存放在用户目录中。
1.1 传输方式
FTP的传输有两种方式ASCII、二进制。
1. ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本如果在远程机器上运行的不是UNIX当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。 但是常常有这样的情况用户正在传输的文件包含的不是文本文件它们可能是程序数据库字处理文件或者压缩文件。在拷贝任何非文本文件之前用binary 命令告诉ftp逐字拷贝。
2. 二进制传输模式
在二进制传输中保存文件的位序以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如macintosh以二进制方式传送可执行文件到Windows系统在对方系统上此文件不能执行。
如在ASCII方式下传输二进制文件即使不需要也仍会转译。这会损坏数据。ASCII方式一般假设每一字符的第一有效位无意义因为ASCII字符组合不使用它。如果传输二进制文件所有的位都是重要的。
3. 两种传输方式的区别
ASCII模式和Binary模式的区别是回车换行的处理Binary模式不对数据进行任何处理ASCII模式将回车换行转换为本机的回车字符比如UNIX下是\n,Windows下是\r\nMac下是\r。
ASCII模式下会转换文件不能说是不同系统对回车换行解释不同而是不同的系统有不同的行结束符。UNIX系统下行结束符是一个字节即十六进制的0A而Windows的系统是两个字节即十六进制的0D0A所以当你用ASCII方式从UNIX的FTP Server下载文件到Windows系统上时(不管是二进制或者文本文件)每检测到一个字节是0A就会自动插入一个0D所以如果你的文件是二进制文件比如可执行文件、压缩包什么的就肯定不能用了。如果你的文件就是UNIX下的文本文件你用ASCII模式是正确的要是误用了Binary模式你在Windows上看这个文件是没有换行的里面是一个个的黑方块。
一般来说我们最好都用Binary方式这样可以保证不出错。如果有文本格式转换的问题即UNIX格式的文本和DOS格式的文本之间的转换有很多工具可以做的不要在ftp传输的时候冒险尤其是你如果对这些东西不是非常清楚的话。
1.2 支持的模式
1. 主动模式(PORT)
主动模式的工作原理FTP客户端连接到FTP服务器的21端口发送用户名和密码登录登录成功后要list列表或者读取数据时客户端随机开放一个端口1024以上发送 PORT命令到FTP服务器告诉服务器客户端采用主动模式并开放端口FTP服务器收到PORT主动模式命令和端口号后通过服务器的20端口和客户端开放的端口连接发送数据。
2. 被动模式(PASV)
被动模式的工作原理FTP客户端连接到FTP服务器的21端口发送用户名和密码登录登录成功后要list列表或者读取数据时发送PASV(PASV是Passive的缩写)命令到FTP服务器 服务器在本地随机开放一个端口1024以上然后把开放的端口告诉客户端 客户端再连接到服务器开放的端口进行数据传输。原理如下图
3. 如何选择
如果工作中一定要使用FTP服务器在今天的互联网环境里面使用FTP被动模式进行连接传输就可以了。如果只是想知道答案的朋友看到这里就可以了。对技术和原理感兴趣的朋友请继续往下看。 从上面的运行原理可以看到主动模式和被动模式区别简单概述为
a. 主动模式传送数据时是“服务器”连接到“客户端”的端口被动模式传送数据是“客户端”连接到“服务器”的端口。b.主动模式需要客户端必须开放端口给服务器很多客户端都是在防火墙内开放端口给FTP服务器访问比较困难被动模式只需要服务器端开放端口给客户端连接就行了。
需要注意的是被动模式和主动模式的登录过程都是FTP客户端去连接FTP服务器。
4. 为什么绝大部分互联网应用都是被动模式
因为大部分客户端都是在路由器后面没有独立的公网IP地址服务器想要主动连接客户端难度太大在现在真实的互联网环境里面几乎是不可能完成的任务。在FTP服务器部署的时候其默认采用的是主动操作模式。如果企业FTP服务器的用户都是在内部网络中的即不用像外部网络的用户提供FTP连接的需求那么采用这个默认操作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器而此时出于安全的考虑或者公网IP 地址数量的限制企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面此时这个主动操作模式就不行了。
总之在FTP服务器部署的时候考虑是要采用主动操作模式还是被动操作模式只需要记住一个原则即如果把FTP服务器部署在防火墙或者NAT服务器的背后则采用主动操作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后系统管理员发现用户可以连接上FTP服务器可以查看目录下的文件但是却无法下载或者上传文件如果排除权限方面的限制外那么很有可能就是这个操作模式选择错误。系统管理员告诉用户选择合适的操作模式 基本上就可以解决文件传输的问题了。
1.3 搭建FTP服务器使用vsftpd
1. 安装软件
yum -y install vsftpd2. 关闭防火墙
firewall-cmd --state
systemctl stop firewalld3. 启动vsftpd服务
systemctl start vsftpd
systemctl enable vsftpd4. 查看端口
[rootnode1 ~]# netstat -antup | grep ftp
tcp6 0 0 :::21 :::* LISTEN 87368/vsftpd5. 主配置文件
主配置文件/etc/vsftpd/vsftpd.conf
#修改下列参数的值anonymous_enableNO #禁止匿名登录FTP服务器。local_enableYES #允许本地用户登录FTP服务器。listenYES #监听IPv4 sockets。#
#在行首添加#注释掉以下参数#listen_ipv6YES #关闭监听IPv6 sockets。#
#在配置文件的末尾添加下列参数local_root/var/ftp/test #设置本地用户登录后所在目录。chroot_local_userYES #全部用户被限制在主目录。chroot_list_enableYES #启用例外用户名单。chroot_list_file/etc/vsftpd/chroot_list #指定例外用户列表文件列表中用户不被锁定在主目录。pasv_enableYES #开启被动模式。allow_writeable_chrootYES #允许更改主目录内容pasv_addressFTP服务器公网IP地址 #Linux实例的公网IP。pasv_min_portport number #设置被动模式下建立数据传输可使用的端口范围的最小值。建议您把端口范围设置在一段比较高的范围内例如50000~50010有助于提高访问FTP服务器的安全性。pasv_max_portport number #设置被动模式下建立数据传输可使用的端口范围的最大值。① 实现可以匿名登录创建文件夹
sed -i s/anonymous_enableYES/anonymous_enableNO/ /etc/vsftpd/vsftpd.conf #禁止匿名登录FTP服务器sed -i s/listenNO/listenYES/ /etc/vsftpd/vsftpd.conf #监听IPv4 socketssed -i s/listen_ipv6YES/#listen_ipv6YES/ /etc/vsftpd/vsftpd.conf #关闭监听IPv6 socketssed -i s/#chroot_local_userYES/chroot_local_userYES/ /etc/vsftpd/vsftpd.conf #全部用户被限制在主目录sed -i s/#chroot_list_enableYES/chroot_list_enableYES/ /etc/vsftpd/vsftpd.conf #启用例外用户名单sed -i s/#chroot_list_file/chroot_list_file/ /etc/vsftpd/vsftpd.conf #指定例外用户列表文件列表中的用户不被锁定在主目录echo allow_writeable_chrootYES /etc/vsftpd/vsftpd.confecho local_root/var/ftp/test /etc/vsftpd/vsftpd.conf #设置本地用户登录后所在的目录echo pasv_enableYES /etc/vsftpd/vsftpd.conf #开启被动模式echo pasv_address47.103.143.207 /etc/vsftpd/vsftpd.conf #本教程中为ECS服务器弹性IPecho pasv_min_port20 /etc/vsftpd/vsftpd.conf #设置被动模式下建立数据传输可使用的端口范围的最小值echo pasv_max_port21 /etc/vsftpd/vsftpd.conf #设置被动模式下建立数据传输可使用的端口范围的最大值② 添加例外用户名单
编辑chroot_list文件添加例外用户名单。此名单中的用户不会被锁定在主目录可以访问其他目录。
说明: 没有例外用户时也必须创建chroot_list文件内容可为空。
③ 重启vsftpd服务。
[rootnode1 ~]# systemctl restart vsftpd④ linux访问ftp 需要下载ftp 客户端注意vsftpd是服务端
yum -y install ftp6. 默认目录
如果是默认安装vsftpd的话以下是一些文件的位置约定
/usr/sbin/vsftpd ---- VSFTPD的主程序/etc/rc.d/init.d/vsftpd ---- 启动脚本/etc/vsftpd/vsftpd.conf ---- 主配置文件/etc/pam.d/vsftpd ---- PAM认证文件/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件/var/ftp ---- 匿名用户主目录/var/ftp/pub ---- 匿名用户的下载目录
如果要更改默认下载目录修改/etc/vsftpd/vsftpd.conf加入如下三行
local_root/
chroot_local_userYES
anon_root/local_root表示使用本地用户登录到ftp时的默认目录 anon_root表示匿名用户登录到ftp时的默认目录 默认的chroot_list_file是设定锁定登陆用户在其home目录的列表要在chroot_list_enableYES情况下才生效。
7. 登录ftp
vsftpd的配置配置文件中限定了vsftpd用户连接控制配置。
ftpusers位于/etc/vsftpd目录下。它指定了哪些用户账户不能访问FTP服务器例如root等。user_list位于/etc/vsftpd目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器仅当vsftpd .conf配置文件里启用userlist_enableNO选项时才允许访问。
其他的账号正常都可以访问ftp了
[rootzabbix-svr-2 conf.d]# ftp 192.168.71.183
Connected to 192.168.71.183 (192.168.71.183).
220 (vsFTPd 3.0.2)
Name (192.168.71.183:root): yurq
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp8. 基本指令
ftp ascii # 设定以ASCII方式传送文件(缺省值)
ftp bell # 每完成一次文件传送,报警提示.
ftp binary # 设定以二进制方式传送文件.
ftp bye # 终止主机FTP进程,并退出FTP管理方式.
ftp case # 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母.
ftp cd # 同UNIX的CD命令.
ftp cdup # 返回上一级目录.
ftp chmod # 改变远端主机的文件权限.
ftp close # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除.
ftp delete # 删除远端主机中的文件.
ftp dir [remote-directory] [local-file] # 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件.
ftp get [remote-file] [local-file] # 从远端主机中传送至本地主机中.
ftp help [command] # 输出命令的解释.
ftp lcd # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录.
ftp ls [remote-directory] [local-file] # 同DIR.
ftp macdef # 定义宏命令.
ftp mdelete [remote-files] # 删除一批文件.
ftp mget [remote-files] # 从远端主机接收一批文件至本地主机.
ftp mkdir directory-name # 在远端主机中建立目录.
ftp mput local-files # 将本地主机中一批文件传送至远端主机.
ftp open host [port] # 重新建立一个新的连接.
ftp prompt # 交互提示模式.
ftp put local-file [remote-file] # 将本地一个文件传送至远端主机中.
ftp pwd # 列出当前远端主机目录.
ftp quit # 同BYE.
ftp recv remote-file [local-file] # 同GET.
ftp rename [from] [to] # 改变远端主机中的文件名.
ftp rmdir directory-name # 删除远端主机中的目录.
ftp send local-file [remote-file] # 同PUT.
ftp status # 显示当前FTP的状态.
ftp system # 显示远端主机系统类型.
ftp user user-name [password] [account] # 重新以别的用户名登录远端主机.
ftp ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果没有指定 commandftp 将显示全部命令的列表。
ftp ! # 从 ftp 子系统退出到外壳。 9. 示例
不得不说这些自带的命令真是很难用有兴趣的读者可以安装lftp进行相关操作
ftp pwd
257 /var/ftp/test
ftp dir /var/ftp/test
227 Entering Passive Mode (192,168,71,183,130,194).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 08 17:41 1
-rw-r--r-- 1 0 0 0 Mar 08 17:41 2
-rw-r--r-- 1 0 0 0 Mar 08 17:41 3
226 Directory send OK.
ftp get 1 /tmp/1
local: /tmp/1 remote: 1
227 Entering Passive Mode (192,168,71,183,110,5).
150 Opening BINARY mode data connection for 1 (0 bytes).
226 Transfer complete.
ftp exit
221 Goodbye.
[rootzabbix-svr-2 conf.d]# ll /tmp/
total 0
-rw-r--r-- 1 root root 0 Mar 8 04:42 12 FTPS
FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型FTP协议为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。
2.1 两种模式
1. FTPS 隐式 SSL
该模式通常在端口 990 上运行。在这个模式下全部数据的交换都需要在客户端和服务器之间建立 SSL 会话并且服务器会拒绝任何不使用 SSL 进行的连接尝试。SSL/TLS协议在传输层TCP/IP之上、但是在应用层之下工作的。因此它可以很容易在诸如HTTPTelnetPOP3IMAP4SMTP和FTP等应用层协议上实现。
2. FTPS 显式 SSL
显示 SSL 下服务器可以同时支持 FTP 和 FTPS 会话。开始会话前客户端需要先建立与 FTP 服务器的未加密连接并在发送用户凭证前先发送 AUTH TLS 或 AUTH SSL 命令来请求服务器将命令通道切换到 SSL 加密通道成功建立通道后再将用户凭证发送到 FTP 服务器从而保证在会话期间的任何命令都可以通过 SSL 通道自动加密。
总结当启用隐式模式时FTP 的默认端口就被改为 TCP/990服务器自动建立安全连接并且要求客户端也必须支持安全连接模式也就是使用 SSL 进行连接。当启用显式模式时与 FTP 连接方式和默认端口一样但是需要以命令 AUTH SSL/TLS 类型的命令进行激活安全连接后才能正常传输数据。
2.2 搭建FTPS服务器
FTPS又称作“FTP-SSL”和“FTP-over-SSL”所以我们在ftp服务器的示例基础上设置ssl和ca即可以完成FTPS服务器
1. 编辑openssl配置文件
先编辑一下openssl.cnf配置文件修改[ policy_match ]模块下加粗内容
[ policy_match ]
countryName optional
stateOrProvinceName optional
organizationName optional
organizationalUnitName optional
commonName supplied
emailAddress optional保存文件并退出。
2. 生成相关文件
进入到与CA服务器有关的目录生成index.txt和serial文件并且给serial文件赋初始值为“01”
[rootzabbix-svr-2 CA]# ls
certs crl newcerts private
[rootzabbix-svr-2 CA]# touch index.txt
[rootzabbix-svr-2 CA]# touch serial
[rootzabbix-svr-2 CA]# echo 01 serial3. 搭建本地CA服务器
使用非对称加密算法rsa采用1024为算法得到一个密钥存放在private/cakey.pem中 openssl genrsa 1024 private/cakey.pem私钥不允许别人查看所以将cakey.pem文件的权限改为600只有所属用户可以读写 chmod 600 private/cakey.pem使用CA服务器自己的私钥cakey.pem产生一个证书cacert.pem
[rootzabbix-svr-2 CA]# openssl genrsa 1024 private/cakey.pem
Generating RSA private key, 1024 bit long modulus
..............
..........................................................................................................................
e is 65537 (0x10001)
[rootzabbix-svr-2 CA]# chmod 600 private/cakey.pem
[rootzabbix-svr-2 CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:LN
Locality Name (eg, city) [Default City]:SY
Organization Name (eg, company) [Default Company Ltd]:MX
Organizational Unit Name (eg, section) []:DB
Common Name (eg, your name or your servers hostname) []:192.168.70.183
Email Address []:创建一个目录存放于vsftp有关的证书证书请求密钥
[rootzabbix-svr-2 CA]# mkdir -pv /etc/vsftpd/certs
mkdir: created directory ‘/etc/vsftpd/certs’
[rootzabbix-svr-2 CA]# cd /etc/vsftpd/certs/非对称加密算法rsa使用1024位算出一个密钥vsftp.key
[rootzabbix-svr-2 certs]# openssl genrsa 1024 vsftpd.key #利用私钥vsftp.key产生一个证书请求文件vsftp.csr
Generating RSA private key, 1024 bit long modulus
........................
.............
e is 65537 (0x10001)
[rootzabbix-svr-2 certs]# openssl req -new -key vsftpd.key -out vsftpd.csr #利用证书请求文件的到一个证书vsftp.cert
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:LN
Locality Name (eg, city) [Default City]:SY
Organization Name (eg, company) [Default Company Ltd]:SW
Organizational Unit Name (eg, section) []:DBC
Common Name (eg, your name or your servers hostname) []:192.168.70.183
Email Address []:Please enter the following extra attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:swww
4. 给自己发证
[rootzabbix-svr-2 certs]# openssl ca -in vsftpd.csr -out vsftpd.cert
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:Serial Number: 1 (0x1)ValidityNot Before: Mar 9 05:43:09 2023 GMTNot After : Mar 8 05:43:09 2024 GMTSubject:countryName CNstateOrProvinceName LNorganizationName SWorganizationalUnitName DBCcommonName 192.168.70.183X509v3 extensions:X509v3 Basic Constraints:CA:FALSENetscape Comment:OpenSSL Generated CertificateX509v3 Subject Key Identifier:6F:C6:8E:51:B2:1D:29:B6:17:DD:FE:41:5E:F4:86:EE:31:40:27:AFX509v3 Authority Key Identifier:keyid:79:8F:83:04:33:A8:5C:37:E9:F7:A4:1C:2F:46:D1:15:6E:24:4E:86Certificate is to be certified until Mar 8 05:43:09 2024 GMT (365 days)
Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated将该目录下的文件权限全部改为600即所属用户可读写 chmod 600 *5. 修改vsftpd配置文件/etc/vsftpd/vsftpd.conf
local_root/var/ftp/test
chroot_local_userYES
chroot_list_enableYES
chroot_list_file/etc/vsftpd/chroot_list
pasv_enableYES
allow_writeable_chrootYES
ssl_enableYES
ssl_tlsv1_2YES
ssl_sslv2YES
ssl_sslv3YES
rsa_cert_file/etc/vsftpd/certs/vsftpd.cert
rsa_private_key_file/etc/vsftpd/certs/vsftpd.key6.重启服务进行测试 systemctl restart vsftpdOK就可以了
3 SFTP
sftp是Secure File Transfer Protocol的缩写安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一个组件是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统SFTP本身没有单独的守护进程它必须使用sshd守护进程端口号默认是22来完成相应的连接操作所以从某种意义上来说SFTP并不像一个服务器程序而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据所以使用SFTP是非常安全的。但是由于这种传输方式使用了加密/解密技术所以传输效率比普通的FTP要低得多如果您对网络安全性要求更高时可以使用SFTP代替FTP。
3.1 SFTP数据传输过程
在进行SFTP数据传输前首先需要建立SSH加密通道如下图所示。 SSH客户端主动发起TCP请求和SSH服务器建立TCP会话。 SSH客户端和SSH服务器协商认证方式。当前SSH有两种认证方式口令认证和秘钥认证。 2.1 如果使用口令认证则SSH秘钥协商过程是SSH服务器主动发送公钥给SSH客户端。SSH客户端收到公钥后使用公钥对登陆密码加密并回送给SSH服务器。SSH服务器使用私钥进行数据解密并验证SSH客户端的信息合法性如果验证通过则建立连接进行加密通信。2.2 如果使用秘钥认证则SSH秘钥协商过程是SSH客户端主动发送客户端公钥给SSH服务器。SSH服务器收到信息后检查服务器的授权列表中是否包含SSH客户端的公钥。如果存在则生成一个随机数并使用SSH客户端的公钥加密生成密文回送给SSH客户端。SSH客户单收到密文后使用私钥解密并将随机数发回SSH服务器。SSH服务器验证随机数如果一致则认证通过连接建立。 SSH加密通道建立完成后SFTP即可进行数据传输上传和下载文件。
3.2 搭建sftp
1. 关闭防火墙和selinux
为了避免不必要的麻烦我们先关闭防火墙和selinux等搭建成功之后再开启防火墙和相应的端口
[rootcentos7 ~]# systemctl status firewalld.service # 查看防火墙状态
[rootcentos7 ~]# systemctl stop firewalld.service # 停止防火墙服务
[rootcentos7 ~]# systemctl disable firewalld.service # 关闭防火墙开启自启动
# 把文件中的SELINUXenforcing 改为SELINUXdisabled
[rootcentos7 ~]# vim /etc/selinux/config
[rootcentos7 ~]# setenforce 0 # 使修改马上生效2. 安装SSH服务
在CentOS7中sftp只是ssh的一部分所以采用yum来安装ssh服务即可 查看是否已经安装了ssh
[rootcentos7 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 # 代表已安装
[rootcentos7 ~]# rpm -qa|grep openssh*
openssh-clients-7.4p1-22.el7_9.x86_64
openssh-7.4p1-22.el7_9.x86_64
openssl-devel-1.0.2k-25.el7_9.x86_64
openssl-1.0.2k-25.el7_9.x86_64
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
openssl-libs-1.0.2k-25.el7_9.x86_64
openssh-server-7.4p1-22.el7_9.x86_64 # 代表已安装
[rootcentos7 ~]# yum install -y openssl* openssh* # 如果已经安装再次执行yum就会把软件包升级到最新版本如果未安装安装ssh
yum install -y openssl openssh-server设置为开机自动启动服务
[rootcentos7 ~]# systemctl enable sshd.service
[rootcentos7 ~]# systemctl start sshd.service # 启动服务systemctl stop sshd.service # 停止服务
systemctl restart sshd.service # 重启服务
systemctl status sshd.service # 查看服务状态
systemctl enable sshd.service # 设置开机自启动sshd服务
systemctl disable sshd.service # 禁用开机自启动sshd服务3. 新建用户和SFTP目录
sftpuser是你为该sftp服务创建的用户名/data/sftp/sftpuser为sftp服务器访问路径
新建SFTP目录并授权
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser新建sftp组及用户
# 新建用户组sftp
groupadd sftp
# 新建用户sftpuser并且设置不支持ssh系统登录只能登录sftp服务器
# -g 用户组 -d 指定家目录 -s 不能登陆系统 -M 不创建家目录
useradd -g sftp -d /data/sftp/sftpuser -M -s /sbin/nologin sftpuser
# 设置密码
# echo 新密码 | passwd --stdin 用户名
echo sftppassword | passwd --stdin sftpuser新建SFTP用户可写目录
# 由于/data/sftp/sftpuser的用户是root其它用户都没有写的权限
# 所以要在该目录下新建一个目录用于文件的上传下载
mkdir -p /data/sftp/sftpuser/upload
chown sftpuser:sftp /data/sftp/sftpuser/upload
chmod 755 /data/sftp/sftpuser/upload4. 配置SSH和SFTP服务器
# 防止后期配置文件出错后无法还原,备份配置文件
[rootcentos7 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
[rootcentos7 ~]# cd /etc/ssh/
[rootcentos7 ssh]# ll
......
-rw------- 1 root root 4084 8月 11 22:55 sshd_config
-rw------- 1 root root 4084 8月 15 10:22 sshd_config.back
......配置SSH
vim /etc/ssh/sshd_config# 修改下面的内容没有的内容直接新增即可
# 下面这几项的默认值也是它们所以这一步可以跳过
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys配置SFTP
vim /etc/ssh/sshd_config# 注释掉这行
# Subsystem sftp /usr/libexec/openssh/sftp-server# 文件末尾添加以下内容
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
# 下面两项是与安全有关
AllowTcpForwarding no
X11Forwarding no5. 重启并配置防火墙
systemctl enable firewalld.service # 重启防火墙开机自启动
systemctl restart firewalld.service # 重启防火墙服务
firewall-cmd --version # 查看防火墙版本
firewall-cmd --list-all # 查看已开放的端口
firewall-cmd --permanent --zonepublic --add-port22/tcp # 开通sftp服务22默认端口
firewall-cmd --reload # 刷新防火墙重新载入
# 关闭Selinux策略
setsebool -P ftpd_full_access on
sed -i s#enforcing#disabled#g /etc/sysconfig/selinux
setenforce 0 getenforce
getenforce重启SFTP服务
systemctl restart sshd.service至此SFTP其实就已经搭建成功可以登录了
6. 访问测试
查看IP地址创建测试文件
ip a
# 进入之前设置好的路径
[rootcentos7 ~]# cd /data/sftp/sftpuser/upload
# 新建测试文件然后保存退出
[rootcentos7 upload]# vim 测试_20220712.txt
[rootcentos7 upload]#终端访问测试 sftp命令
[rootcentos7 upload]# sftp sftpuser:sftppassword192.168.10.110
sftpuser:sftppassword192.168.10.110s password: # 密码输入不显示正常输入后直接按回车就行
Connected to 192.168.10.110.
sftp pwd
Remote working directory: /
sftp cd upload/
sftp pwd
Remote working directory: /upload
sftp lls
测试_20220712.txt
sftp exit7. SFTP常用命令
ls 查看当前目录下文件
help 查看sftp支持哪些命令
cd 指定目录
pwd 查看当前目录
get xxx.txt 下载xxx文件
put xxx.txt 上传xxx文件
quit / bye / exit 退出sftp
sftp xxx.xxx.xxx.xxx 登录root用户
sftp zygfxxx.xxx.xxx.xxx 进行登录zygf用户4 SFTP 和FTPS的区别
SFTP 和FTPS都是提供安全的链接协议非常相似。
FTPS借助ssl协议加密SFTP借助ssh加密。 ssl是为http/smtp等加密设计的SSL证书是HTTP明文协议升级HTTPS加密协议的重要渠道是网络安全传输的加密到通道。ssh是为telnet/ftp等加密、建立传输通道而设计的。 其实ssh建立传输通道就是为了加密和传输而且这个通道是可以用来远程登录。如果只说它们的功能通俗的讲ssh就像铺管子ssl就像打包裹铺管子和打包裹都会使数据安全都是一个制作密钥的过程而因为ssh是一个管子所以它很适合ftp的安全传输。 简单的讲sftp协议是ssh中的一条独立的协议利用sftp服务器就可以传输数据。而ftps是ftp-over-ssl的意思即ftp借助ssl协议加密传输不但要用ftp服务器还要用ssl协议加密。如果是ftp-over-ssh就是完全不同于sftp的传输方式了就是利用ftp服务器和ssh协议加密传输数据。 这两种协议是不同的。sftp是ssh内含的协议仅仅要sshd server启动了它就可用它本身不须要ftp server启动。ftps则象一个二传手。
5 常见连接错误 Connect 连接被拒绝 可能原因是vsftpd服务没被启动 530 Permission denied 可能原因是userlist_enableYES并且/etc/vsftpd/user_list中包含要登录的ftp用户名 即user_list禁止了该用户的登录、或者可能是没有指定userlist_file/etc/vsftpd/user_list 530 Login incorrect 可能原因是登录的ftp用户名被包含在禁止登录列表/etc/vsftpdftpusers中 | 同时要确保用户名、密码是正确的 | 也可能是配置文件中少了一行pam_service_namevsftpd | 检查/etc/pam.d/vsftpd 文件里面lib的路径 | 编辑/etc/pam.d/vsftp文件注释掉auth required pam_shells.so(这个语句的意思是只有包含shell的用户才能登录) 530 Non-anonymous sessions must use encryption.服务器的强制非匿名用户必须使用加密连接 500 OOPS: cannot open user list file可能原因是不存在文件“/etc/vsftpd/user_list”或文件中不存在该帐户解决解决: cho username /etc/vsftpd/user_list 500 OOPS: cannot open chroot() user list file | 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list可能原因是不存在文件“/etc/vsftpd/chroot_list” 500 OOPS: missing value in config file: 可能原因是配置文件“”等号前值有问题或只有一个空格 500 OOPS: bad bool value in config file: 可能原因是配置文件”等号后值有问题 500 OOPS: unrecognised variable in config file: 可能原因是参数前有空格 500 OOPS: chdir 500 OOPS: child died, 500 OOPS: chroot可能原因是用户主目录没有权限或没有主目录或者还是selinux影响的 500 OOPS: vsftpd: both local and anonymous access disabled!匿名用户和本地用户登录都被禁用 GnuTLS error -12: A TLS fatal alert has been received.received.:Filezilla最新版本认为vsftpd默认的加密算法”DES-CBC3-SHA”不够安全而拒绝连接导致的。有两种办法解决该问题一是降级你的Filezilla客户端版本到3.5.3以下二是更改服务器端vsftpd的配置,增加参数ssl_ciphersHIGH ECONNREFUSED – Connection refused by server 当启用隐式ssl连接用filezilla、winscp客户端连接时报错因为vsftpd此时服务器端的端口还是21但是客户端确以990来连接。修改客户端连接时使用的参数或者服务器的通过参数listen_port设置端口为990问题解决
文章转载自: http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.jcrfm.cn.gov.cn.jcrfm.cn http://www.morning.srnth.cn.gov.cn.srnth.cn http://www.morning.dnbhd.cn.gov.cn.dnbhd.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.ranglue.com.gov.cn.ranglue.com http://www.morning.gynkr.cn.gov.cn.gynkr.cn http://www.morning.gbhsz.cn.gov.cn.gbhsz.cn http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn http://www.morning.xqwq.cn.gov.cn.xqwq.cn http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.njfgl.cn.gov.cn.njfgl.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.ndmbd.cn.gov.cn.ndmbd.cn http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn http://www.morning.lrmts.cn.gov.cn.lrmts.cn http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn http://www.morning.hyxwh.cn.gov.cn.hyxwh.cn http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn http://www.morning.ynstj.cn.gov.cn.ynstj.cn http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn http://www.morning.xhwty.cn.gov.cn.xhwty.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.xuejitest.com.gov.cn.xuejitest.com http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.tstkr.cn.gov.cn.tstkr.cn http://www.morning.zpzys.cn.gov.cn.zpzys.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.tldhq.cn.gov.cn.tldhq.cn http://www.morning.zjrnq.cn.gov.cn.zjrnq.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.dbnrl.cn.gov.cn.dbnrl.cn http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn http://www.morning.lbbrw.cn.gov.cn.lbbrw.cn http://www.morning.shangwenchao4.cn.gov.cn.shangwenchao4.cn http://www.morning.ldcrh.cn.gov.cn.ldcrh.cn http://www.morning.tllws.cn.gov.cn.tllws.cn http://www.morning.splkk.cn.gov.cn.splkk.cn http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.jpgfq.cn.gov.cn.jpgfq.cn http://www.morning.tmbfz.cn.gov.cn.tmbfz.cn http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.dmzfz.cn.gov.cn.dmzfz.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.krdxz.cn.gov.cn.krdxz.cn http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.qytyt.cn.gov.cn.qytyt.cn http://www.morning.plwfx.cn.gov.cn.plwfx.cn http://www.morning.mqxrx.cn.gov.cn.mqxrx.cn http://www.morning.nqbs.cn.gov.cn.nqbs.cn http://www.morning.mkrjf.cn.gov.cn.mkrjf.cn http://www.morning.xmpbh.cn.gov.cn.xmpbh.cn http://www.morning.stflb.cn.gov.cn.stflb.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.llllcc.com.gov.cn.llllcc.com http://www.morning.hsrpr.cn.gov.cn.hsrpr.cn http://www.morning.knzmb.cn.gov.cn.knzmb.cn http://www.morning.deupp.com.gov.cn.deupp.com http://www.morning.kxscs.cn.gov.cn.kxscs.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.prgnp.cn.gov.cn.prgnp.cn http://www.morning.wnbqy.cn.gov.cn.wnbqy.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.hxgly.cn.gov.cn.hxgly.cn http://www.morning.czqqy.cn.gov.cn.czqqy.cn http://www.morning.nkiqixr.cn.gov.cn.nkiqixr.cn http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.wchsx.cn.gov.cn.wchsx.cn