SFTP(SSH File Transfer Protocol)是基于SSH协议的安全文件传输协议,相比传统FTP,它通过加密通道传输数据,有效防止密码泄露和数据篡改,是企业级文件传输的常用方案。
确保系统软件包为最新版本,避免兼容性问题:
sudo yum update -y
CentOS默认仓库包含OpenSSH,安装命令如下:
sudo yum install openssh-server -y
安装完成后,启动SSH服务并设置为开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd
使用文本编辑器打开/etc/ssh/sshd_config,按需修改以下配置:
sudo vi /etc/ssh/sshd_config
启用内置SFTP子系统(推荐):
注释掉默认的sftp-server路径,使用internal-sftp(性能更好,无需额外安装):
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
限制用户/组访问(推荐):
通过Match指令限制特定用户或组的SFTP权限,例如限制group1组用户:
Match Group group1
ChrootDirectory /data/sftp/%u # 将用户限制在自己的家目录(%u代表用户名)
ForceCommand internal-sftp # 强制使用SFTP,禁止SSH shell访问
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
可选:禁用密码认证(增强安全性):
若使用密钥认证,可添加以下配置(需提前配置密钥):
PasswordAuthentication no
保存配置后,重启SSH服务使更改生效:
sudo systemctl restart sshd
创建一个专门用于SFTP的用户组(如sftpgroup):
sudo groupadd sftpgroup
创建用户时,设置家目录并指定shell为/sbin/nologin(禁止SSH登录):
sudo useradd -m -G sftpgroup -s /sbin/nologin sftpuser1
sudo passwd sftpuser1 # 设置强密码
SFTP要求chroot目录(用户根目录)必须属于root,且上传目录属于用户自身,以保证权限正确。
# 创建chroot目录(用户根目录)
sudo mkdir -p /data/sftp/sftpuser1
sudo chown root:root /data/sftp/sftpuser1 # 必须为root所有
sudo chmod 755 /data/sftp/sftpuser1 # 权限必须为755
# 创建上传目录(用户可写入)
sudo mkdir -p /data/sftp/sftpuser1/uploads
sudo chown sftpuser1:sftpgroup /data/sftp/sftpuser1/uploads # 属于用户及组
sudo chmod 755 /data/sftp/sftpuser1/uploads # 权限设为755(或775,根据需求)
在本地终端使用以下命令连接服务器(替换your_server_ip和sftpuser1):
sftp sftpuser1@your_server_ip
输入密码后,若成功登录,会显示sftp>提示符,可通过以下命令测试文件传输:
# 上传文件(本地文件->服务器)
put /local/path/file.txt /uploads/
# 下载文件(服务器->本地)
get /uploads/file.txt /local/path/
# 查看当前目录
ls
# 退出连接
bye
推荐使用FileZilla或WinSCP等客户端,配置连接信息:
若出现“Permission denied”错误,需检查:
/data/sftp/sftpuser1)是否属于root,权限是否为755;/data/sftp/sftpuser1/uploads)是否属于SFTP用户,权限是否为755(或775);若SELinux处于enforcing模式,需调整文件上下文:
# 允许SFTP用户访问上传目录
sudo semanage fcontext -a -t ssh_home_t "/data/sftp/sftpuser1/uploads(/.*)?"
sudo restorecon -Rv /data/sftp/sftpuser1/uploads
确保防火墙允许SSH(默认端口22)流量:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
在sshd_config中添加ChrootDirectory后,用户无法删除或修改上传的文件。若需更严格的权限,可将上传目录权限设为755,并移除用户的写入权限:
sudo chmod 755 /data/sftp/sftpuser1/uploads
生成密钥对(本地机器):
ssh-keygen -t rsa -b 4096
将公钥复制到服务器:
ssh-copy-id sftpuser1@your_server_ip
修改sshd_config,禁用密码认证:
PasswordAuthentication no
重启SSH服务:
sudo systemctl restart sshd
此后,连接时无需输入密码,只需指定私钥路径:
sftp -i /local/path/private_key sftpuser1@your_server_ip
通过以上步骤,即可在CentOS上完成SFTP的配置与使用,满足企业级文件传输的安全需求。