CentOS上搭建SFTP
CentOS上搭建SFTP
在CentOS上安装SFTP服务通常是通过安装OpenSSH来实现的,因为OpenSSH默认提供了SFTP功能。以下是在CentOS上安装SFTP的步骤:
一、安装OpenSSH服务器:
sudo yum install openssh-server
启动SSH服务:
sudo systemctl start sshd
确保SSH服务随系统启动而启动:
sudo systemctl enable sshd
检查SSH服务状态:
sudo systemctl status sshd
这将显示SSH服务是否正在运行以及其他相关信息。
现在,你的CentOS服务器上应该已经安装并运行了SFTP服务。你可以使用任何支持SFTP的客户端(如WinSCP、FileZilla等)连接到服务器。确保使用SSH协议(端口22)进行连接,并使用具有适当权限的用户凭据进行身份验证。
二、配置sftp用户、访问目录等
下面是一个完整的例子,假设我们要创建一个名为sftpuser的用户,限制他只能访问/sftp目录,并且使用特定的SSH配置文件。
创建SFTP用户:
sudo useradd -m -s /sbin/nologin sftpuser
设置用户密码:
sudo passwd sftpuser
创建用户的SFTP根目录:
sudo mkdir /sftp
设置根目录的权限(根目录必须是root用户,否则sftp连接不上):
sudo chown root:root /sftp
sudo chmod 755 /sftp
在根目录下层建立子目录方可以写入(根目录只能读取不能写入,因为根目录必须是root用户,而sftp访问的用户却是我们新建的sftpuser)
mkdir /sftp/sharedata
chown sftpuser:sftpuser /sftp/sharedata
创建新用户自定义ssh配置
简单点直接修改/etc/ssh/sshd_config也可以,这样服务启动选项sshd.service就不用改了
创建用户的SSH配置文件目录:
sudo mkdir /home/sftpuser/.ssh
复制系统SSH配置文件到用户目录:
sudo cp /etc/ssh/sshd_config /home/sftpuser/.ssh/sshd_config
编辑用户的SSH配置文件:
sudo vi /home/sftpuser/.ssh/sshd_config
在这个文件中,确保你有适当的配置,例如使用ChrootDirectory限制用户访问,以及其他任何你想要自定义的配置。注意将这个配置节放到最后,否则老是报错: "Directive 'UseDNS' is not allowed within a Match block" 表明在 Match 块中不允许使用 UseDNS 这个指令。
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
给新用户的用户目录递归设置归属
chown -R sftpuser:sftpuser /home/sftpuser
给配置文件设置读取权限
chmod 755 /home/sftpuser/.ssh/sshd_config
修改SSH服务启动选项
打开SSH服务的启动选项文件,可以使用systemctl status sshd查看找到(通常在 /etc/systemd/system/sshd.service 或 /etc/init.d/sshd 或/usr/lib/systemd/system/sshd.service),并修改为:
ExecStart=/usr/sbin/sshd -f /home/sftpuser/.ssh/sshd_config -D $OPTIONS
或者
/usr/sbin/sshd -f /home/sftpuser/.ssh/sshd_config $OPTIONS
重新加载SSH服务:
systemctl daemon-reload
systemctl restart sshd
现在,用户sftpuser被限制在sftp目录下,并且只能使用SFTP进行文件传输。他们的SSH配置文件位于/home/sftpuser/.ssh/sshd_config,这样他们可以自定义他们的SSH行为而不影响其他用户或系统级别的配置。
查看错误日志:
检查系统日志:如果问题仍然存在,请查看系统日志文件,如 /var/log/auth.log 或 /var/log/secure,以获取有关写入文件失败的详细信息。日志文件中可能会提供关于出现问题的原因的线索。
三、多SFTP用户如何配置
SSH服务启动选项只能指定一个配置文件。如果你想要为多个用户指定不同的配置,你需要为每个用户创建单独的配置文件,并在启动选项中指定这些文件。
例如,如果你有两个用户 sftpuser1 和 sftpuser2,你可以为他们分别创建不同的配置文件,然后在SSH服务的启动选项中指定这些文件。
为每个用户创建配置文件:
sudo cp /etc/ssh/sshd_config /home/sftpuser1/.ssh/sshd_config
sudo cp /etc/ssh/sshd_config /home/sftpuser2/.ssh/sshd_config
编辑每个用户的配置文件并根据需要进行自定义:
sudo vi /home/sftpuser1/.ssh/sshd_config
Match User sftpuser1
ChrootDirectory /sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
sudo vi /home/sftpuser2/.ssh/sshd_config
Match User sftpuser2
ChrootDirectory /sftp/other_directory
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
修改SSH服务的启动选项,分别指定每个用户的配置文件:
ExecStart=/usr/sbin/sshd -f /home/sftpuser1/.ssh/sshd_config -f /home/sftpuser2/.ssh/sshd_config -D $OPTIONS
或者
/usr/sbin/sshd -f /home/sftpuser1/.ssh/sshd_config -f /home/sftpuser2/.ssh/sshd_config $OPTIONS
这样配置后,每个用户将使用自己的配置文件,可以分别定制他们的SSH行为。