CentOS上搭建SFTP

  • CentOS上搭建SFTP已关闭评论
  • 72 次浏览
  • A+
所属分类:linux技术
摘要

 在 CentOS 上安装 SFTP 服务通常是通过安装 OpenSSH 来实现的,因为 OpenSSH 默认提供了 SFTP 功能。以下是在 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的客户端(如WinSCPFileZilla等)连接到服务器。确保使用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行为。