在Linux系统中,SFTP(SSH File Transfer Protocol)是一种基于SSH的安全文件传输协议,通过加密传输数据保障文件传输的安全性,广泛应用于服务器文件管理、数据备份等场景,本文将以主流Linux发行版(Ubuntu/Debian、CentOS/RHEL)为例,详细讲解SFTP服务器的安装、配置及使用方法。
安装SFTP服务器
SFTP服务通常通过OpenSSH服务器实现,因此安装SFTP服务器本质上就是安装并配置OpenSSH,不同Linux发行版的包管理器不同,安装命令略有差异。
Ubuntu/Debian系统
Ubuntu和Debian系统使用apt
包管理器,安装步骤如下:
- 更新软件包列表:
sudo apt update
- 安装OpenSSH服务器:
sudo apt install openssh-server
- 安装完成后,SSH服务会自动启动,可通过以下命令检查状态:
sudo systemctl status sshd
CentOS/RHEL系统
CentOS和RHEL系统使用yum
或dnf
包管理器(CentOS 7+使用dnf
),安装步骤如下:
- 安装OpenSSH服务器:
sudo yum install openssh-server # CentOS 7及以下 # 或 sudo dnf install openssh-server # CentOS 8+
- 启动SSH服务并设置开机自启:
sudo systemctl start sshd sudo systemctl enable sshd
- 检查服务状态:
sudo systemctl status sshd
不同发行版安装命令对比
发行版 | 包管理器 | 安装命令 | 服务启动命令 |
---|---|---|---|
Ubuntu/Debian | apt | sudo apt install openssh-server | sudo systemctl start sshd |
CentOS 7- | yum | sudo yum install openssh-server | sudo systemctl start sshd |
CentOS 8+ | dnf | sudo dnf install openssh-server | sudo systemctl start sshd |
配置SFTP服务器
安装完成后,需通过修改SSH配置文件(/etc/ssh/sshd_config
)来启用SFTP功能并设置访问权限。
备份原始配置文件
修改前先备份原配置,避免配置错误导致无法登录:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
编辑SSH配置文件
使用vim
或nano
编辑器打开配置文件:
sudo vim /etc/ssh/sshd_config
关键配置项
在文件中添加或修改以下内容(确保取消注释):
-
启用SFTP子系统:
确保存在以下行(默认已存在,取消注释即可):Subsystem sftp internal-sftp
-
配置SFTP用户组及权限:
为限制用户仅能通过SFTP访问(禁用SSH登录),可添加以下配置(假设创建sftpusers
用户组):Match Group sftpusers ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
配置说明:
Match Group sftpusers
:匹配sftpusers
用户组的用户;ChrootDirectory /home/%u
:将用户限制在其家目录内(%u
为用户名),防止越权访问;ForceCommand internal-sftp
:强制用户仅能使用SFTP命令,禁用SSH交互;AllowTcpForwarding no
和X11Forwarding no
:禁止端口转发和X11转发,增强安全性。
-
禁用密码登录(可选):
为提高安全性,可禁用密码登录,改用密钥认证(需提前生成密钥对):PasswordAuthentication no PubkeyAuthentication yes
创建SFTP专用用户组
根据上述配置,需创建sftpusers
用户组,并将需要使用SFTP的用户加入该组:
sudo groupadd sftpusers sudo usermod -aG sftpusers username # 将用户username加入sftpusers组
设置目录权限
Chroot目录的所有者必须为root
,权限为755
,否则用户无法通过SFTP登录:
sudo chown root:root /home/username sudo chmod 755 /home/username
重启SSH服务
配置完成后,重启SSH服务使配置生效:
sudo systemctl restart sshd
测试SFTP服务器
使用命令行工具测试
在本地终端执行以下命令(替换username
和server_ip
为实际值):
sftp username@server_ip
若登录成功,会显示sftp>
提示符,可通过put
(上传)、get
(下载)、ls
(列目录)等命令测试文件传输。
使用图形化工具测试
推荐工具:FileZilla、WinSCP(Windows)、Cyberduck(macOS)。
- 在主机栏输入
sftp://username:server_ip
,输入密码即可连接; - 若配置了Chroot,用户只能看到被限制的目录(如
/home/username
)。
常见问题排查
-
连接失败,提示“Could not chdir to home directory”:
原因:Chroot目录权限或所有者设置错误。
解决:检查目录权限是否为755
,所有者是否为root
(sudo chown root:root /home/username && sudo chmod 755 /home/username
)。 -
用户无法上传文件,提示“Permission denied”:
原因:用户家目录或上传目录权限不足。
解决:确保用户对上传目录有写权限(如sudo chmod 755 /home/username/upload && sudo chown username:username /home/username/upload
)。
相关问答FAQs
Q1:如何限制SFTP用户只能访问特定目录(如/data/sftp
),而不能访问其他目录?
A:首先创建目标目录并设置权限:
sudo mkdir -p /data/sftp/username sudo chown root:root /data/sftp/username sudo chmod 755 /data/sftp/username
然后在/etc/ssh/sshd_config
中修改ChrootDirectory
为指定目录:
Match Group sftpusers ChrootDirectory /data/sftp/%u ForceCommand internal-sftp
最后重启SSH服务(sudo systemctl restart sshd
),用户登录后将仅被限制在/data/sftp/username
目录内。
Q2:SFTP和FTP有什么区别?为什么推荐使用SFTP?
A:主要区别如下:
| 特性 | FTP(File Transfer Protocol) | SFTP(SSH File Transfer Protocol) |
|————–|——————————-|————————————|
| 协议层 | 应用层(独立于TCP) | 基于SSH(应用层) |
| 加密方式 | 明文传输,不加密 | 基于SSH协议,全程加密(AES等) |
| 端口 | 21(控制端口)、20(数据端口) | 22(与SSH共用端口) |
| 安全性 | 低,易被窃听和篡改 | 高,支持身份验证和数据加密 |
| 功能 | 仅支持文件传输 | 支持文件传输、命令执行、端口转发等 |
推荐使用SFTP的原因:SFTP通过SSH加密传输数据,能有效防止用户名、密码及文件内容被窃取,尤其适合传输敏感数据;而FTP明文传输存在严重安全隐患,已被逐渐淘汰。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37020.html