跳到内容

安全服务器 - 使用 SSH 锁定程序的 SFTP

介绍

当 SSH 协议本身是安全的时,专门针对 SFTP(openssh-server 包的一部分)的“安全”使用的文档似乎很奇怪。但大多数系统管理员不希望为所有人打开 SSH 来为所有人实现 SFTP。本文档介绍了在限制 SSH 访问的同时为 SFTP 实现更改根 (**chroot**) 监狱。

许多文档都介绍了创建 SFTP chroot 监狱,但大多数文档都没有考虑用户可能正在访问具有多个网站的服务器上的 web 目录的用例。本文档讨论了这一点。如果这不是您的用例,您可以快速将这些概念适应不同的情况。

作者还认为,在为 SFTP 创建 chroot 监狱文档时,还必须讨论您作为系统管理员应该做到的其他事情,以最大限度地减少您通过 SSH 提供给世界的目标。出于这个原因,本文档分为四个部分

  1. 第一部分讨论您将在整个文档中使用的通用信息。
  2. 第二部分讨论 chroot 设置。如果您就此停止,这完全取决于您。
  3. 第三部分讨论为您的系统管理员设置公钥/私钥 SSH 访问,并关闭远程基于密码的身份验证。
  4. 本文档的第四部分也是最后一部分讨论关闭远程 root 登录。

所有这些步骤都将使您能够为您的客户提供安全的 SFTP 访问,同时最大限度地减少不良行为者破坏端口 22(为 SSH 访问保留的端口)的可能性。

面向初学者的 chroot 监狱

chroot 监狱是一种限制进程及其所有子进程可以在您的计算机上执行的操作的方法。它允许您在机器上选择一个特定的目录或文件夹,并将其设为任何进程或程序的“根”目录。

从那时起,该进程或程序只能访问该文件夹及其子文件夹。

Rocky Linux 8.x 和 9.x 的更新

本文档已更新,以包括 8.6 版本中的新更改,这些更改将使此过程更加安全。如果您使用的是 8.6 或更高版本,或 9.x 的任何版本,此过程应该对您有效。与 Rocky Linux 8.5 相关的部分已删除,因为 8 的当前版本(重写时为 8.8)应该是更新包后 8.x 的任何版本的所在地。

第 1 部分:通用信息

假设和约定

假设是

  • 您在命令行执行命令很舒适。
  • 您可以使用命令行编辑器,例如 `vi`(此处使用)、`nano`、`micro` 等。
  • 您了解用于添加组和用户的基本 Linux 命令,或者可以很好地遵循。
  • 您的多站点网站是这样的:Apache 多站点
  • 您已在服务器上安装了 `httpd`(Apache)。

注意

您可以将这些概念应用于任何服务器设置和任何 web 守护程序。虽然我们这里假设的是 Apache,但您也可以将其用于 Nginx。

站点、用户、管理员

这些是虚构的场景。任何与真实的人员或站点相似之处纯属巧合

站点

  • mybrokenaxel = (site1.com) 用户 = mybroken
  • myfixedaxel = (site2.com) 用户 = myfixed

管理员

  • Steve Simpson = ssimpson
  • Laura Blakely = lblakely

第二部分:SFTP chroot 限制

安装

安装并不困难。您只需要安装 openssh-server,它可能已经安装了。输入以下命令以确保

dnf install openssh-server

设置

目录

目录路径结构将是 /var/www/sub-domains/[ext.domainname]/html,并且此路径中的 html 目录将是 SFTP 用户的 chroot 限制。

创建配置目录

mkdir -p /etc/httpd/sites-available
mkdir -p /etc/httpd/sites-enabled

创建 Web 目录

mkdir -p /var/www/sub-domains/com.site1/html
mkdir -p /var/www/sub-domains/com.site2/html

您将在后面的脚本应用程序中处理这些目录的所有权。

httpd 配置

您需要更改内置的 httpd.conf 文件,使其加载 /etc/httpd/sites-enabled 目录中的配置文件。通过在 httpd.conf 文件的底部添加一行来完成此操作。

使用您最喜欢的编辑器编辑该文件。作者在此使用 vi

vi /etc/httpd/conf/httpd.conf

并在文件的底部添加以下内容

Include /etc/httpd/sites-enabled

保存文件并退出。

网站配置

您需要创建两个网站。您将在 /etc/httpd/sites-available 中创建配置并将其链接到 ../sites-enabled

vi /etc/httpd/sites-available/com.site1

注意

示例仅使用 HTTP 协议。任何真正的网站都需要 HTTPS 协议配置、SSL 证书,以及可能更多。

<VirtualHost *:80>
        ServerName www.site1.com
        ServerAdmin username@rockylinux.org
        DocumentRoot /var/www/sub-domains/com.site1/html
        DirectoryIndex index.php index.htm index.html
        Alias /icons/ /var/www/icons/


    CustomLog "/var/log/httpd/com.site1.www-access_log" combined
    ErrorLog  "/var/log/httpd/com.site1.www-error_log"

        <Directory /var/www/sub-domains/com.site1/html>
                Options -ExecCGI -Indexes
                AllowOverride None

                Order deny,allow
                Deny from all
                Allow from all

                Satisfy all
        </Directory>
</VirtualHost>

保存此文件并退出。

vi /etc/httpd/sites-available/com.site2
<VirtualHost *:80>
        ServerName www.site2.com
        ServerAdmin username@rockylinux.org
        DocumentRoot /var/www/sub-domains/com.site2/html
        DirectoryIndex index.php index.htm index.html
        Alias /icons/ /var/www/icons/


    CustomLog "/var/log/httpd/com.site2.www-access_log" combined
    ErrorLog  "/var/log/httpd/com.site2.www-error_log"

        <Directory /var/www/sub-domains/com.site2/html>
                Options -ExecCGI -Indexes
                AllowOverride None

                Order deny,allow
                Deny from all
                Allow from all

                Satisfy all
        </Directory>
</VirtualHost>

保存此文件并退出。

完成创建两个配置文件后,将它们从 /etc/httpd/sites-enabled 中链接

ln -s ../sites-available/com.site1
ln -s ../sites-available/com.site2

启用并启动 httpd 进程

systemctl enable --now httpd

用户创建

对于我们的示例环境,假设目前还没有用户。从您的管理员用户开始。请注意,在您的流程中,您仍然可以以 root 用户身份登录添加其他用户并按您想要的方式设置它们。当用户设置并测试后,您可以删除 root 登录。

管理员

useradd -g wheel ssimpson
useradd -g wheel lblakely

通过将我们的用户添加到“wheel”组,您赋予他们 sudo 访问权限。

您仍然需要一个用于 sudo 访问的密码。有办法解决这个问题,但没有一个完全安全。坦率地说,如果您在服务器上使用 sudo 时遇到安全性问题,那么您在整个设置中遇到了更大的问题。使用安全密码设置两个管理员密码

passwd ssimpson
Changing password for user ssimpson.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

passwd lblakely
Changing password for user lblakely.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

使用 ssh 测试对服务器的访问,以使用您的两个管理员用户进行测试。您应该能够

  • 使用 ssh 以服务器管理员用户的身份登录。(示例:ssh lblakely@192.168.1.116ssh lblakely@mywebserver.com
  • 您应该能够使用 sudo -s 并输入管理员用户的密码访问 root。

如果这对所有管理员用户都有效,您将准备好进行下一步。

Web 用户(SFTP)

您需要添加我们的 Web 用户。该 ../html 目录结构已经存在,因此您不希望在添加用户时创建它,但您确实希望指定它。您也不希望除了 SFTP 以外的任何登录,因此您需要使用一个拒绝登录的 shell。

useradd -M -d /var/www/sub-domains/com.site1/html -g apache -s /usr/sbin/nologin mybroken
useradd -M -d /var/www/sub-domains/com.site2/html -g apache -s /usr/sbin/nologin myfixed

稍微分解这些命令

  • -M 选项表示为用户创建标准主目录。
  • -d 指定之后的内容是实际主目录。
  • -g 表示此用户所属的组是 apache
  • -s 表示分配的 shell 是 /usr/sbin/nologin
  • 最后是用户的实际用户名。

注意:对于 Nginx 服务器,您将使用 nginx 作为组。

我们的 SFTP 用户仍然需要密码。现在为每个用户设置一个安全密码。您已经在上面的命令输出中看到了

passwd mybroken
passwd myfixed

SSH 配置

警告

在开始此过程之前,强烈建议您备份要修改的系统文件:/etc/ssh/sshd_config。破坏此文件并且无法恢复到原始文件可能会给您带来极大的痛苦!

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

您需要对 /etc/ssh/sshd_config 文件进行一项更改。您将构建一个模板,以便在配置文件之外进行 Web 目录更改,并编写您将需要添加的内容的脚本。

首先,进行您需要的手动更改

vi /etc/ssh/sshd_config

在文件的底部附近,您将找到以下内容

# override default of no subsystems
Subsystem     sftp    /usr/libexec/openssh/sftp-server

您希望将其更改为以下内容

# override default of no subsystems
# Subsystem     sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

保存并退出文件。

sftp-serverinternal-sftp 是 OpenSSH 的一部分。internal-sftp 虽然与 sftp-server 并没有太大区别,但它简化了使用 ChrootDirectory 强制客户端使用不同的文件系统根目录的配置。这就是您使用 internal-sftp 的原因。

模板和脚本

为什么您要为此部分创建一个模板和一个脚本?原因是尽可能地避免人为错误。您还没有完成修改 /etc/ssh/sshd_config 文件,但您希望在需要进行这些修改时尽可能地消除错误。您将在 /usr/local/sbin 中创建所有这些内容。

模板

首先,创建您的模板

vi /usr/local/sbin/sshd_template

此模板将具有以下内容

Match User replaceuser
  PasswordAuthentication yes
  ChrootDirectory replacedirectory
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

注意

PasswordAuthentication yes 通常不需要用于 chroot 限制。但是,您将在稍后为其他所有人关闭 PasswordAuthentication,因此在模板中拥有此行至关重要。

您需要一个用于用户文件的目录,您也将从模板中创建它

mkdir /usr/local/sbin/templates

脚本和 sshd_config 更改

随着 Rocky Linux 8.6 和 9.0 版本的发布,sshd_config 文件的新选项允许进行插入配置。这是一个巨大的改变。这意味着您将对 sshd_config 文件进行一次额外的更改,我们的脚本将在单独的配置文件中构建出 sftp 更改。这种新的改变使事情更加安全。安全是好的!!

由于 Rocky Linux 8.6 和 9.0 中允许的 sshd_config 文件更改,我们的脚本将使用一个新的插入配置文件:/etc/ssh/sftp/sftp_config

首先,创建该目录

mkdir /etc/ssh/sftp

现在备份 sshd_config

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

最后编辑 sshd_config 文件,滚动到文件的底部,并添加以下行

Include /etc/ssh/sftp/sftp_config

保存您的更改并退出文件。您需要重新启动 sshd,但我们的脚本将在您更新 sftp_config 文件后为您执行此操作,因此请创建脚本并运行它。

vi /usr/local/sbin/webuser

并将以下代码放在其中

#!/bin/bash
    # script to populate the SSHD configuration for web users.

    # Set variables

    tempfile="/usr/local/sbin/sshd_template"
    dompath="/var/www/sub-domains/"

    # Prompt for user and domain in reverse (ext.domainname):

    clear

    echo -n "Enter the web sftp user: "
    read sftpuser
    echo -n "Enter the domain in reverse. Example: com.domainname: "
    read dom
    echo -n "Is all of this correct: sftpuser = $sftpuser and domain = $dom (Y/N)? "
    read yn
    if [ "$yn" = "n" ] || [ "$yn" = "N" ]
    then
        exit
    fi
    if [ "$yn" = "y" ] || [ "$yn" = "Y" ]
    then
        /usr/bin/cat $tempfile > /usr/local/sbin/templates/$dom.txt
        /usr/bin/sed -i "s,replaceuser,$sftpuser,g" /usr/local/sbin/templates/$dom.txt
        /usr/bin/sed -i "s,replacedirectory,$dompath$dom,g" /usr/local/sbin/templates/$dom.txt
        /usr/bin/chown -R $sftpuser.apache $dompath$dom/html
        # Ensure directory permissions are correct
        # The root user owns all directories except the chroot, which is owned by the sftpuser
        # when connecting, you will end up one directory down, and you must actually change to the html directory
        # With a graphical SFTP client, this will be visible to you, you just need to double-click on the html 
        # directory before attmpting to drop in files.
        chmod 755 $dompath
        chmod 755 $dompath$dom
        chmod 755 $dompath$dom/html
        chmod 744 -R $dompath$dom/html/
    fi

    ## Make a backup of /etc/ssh/sftp/sftp_config

    /usr/bin/rm -f /etc/ssh/sftp/sftp_config.bak

    /usr/bin/cp /etc/ssh/sftp/sftp_config /etc/ssh/sftp/sftp_config.bak

    ## Now append our new user information to to the file

    cat /usr/local/sbin/templates/$dom.txt >> /etc/ssh/sftp/sftp_config

    ## Restart sshd

    /usr/bin/systemctl restart sshd

    echo " "
    echo "Please check the status of sshd with systemctl status sshd."
    echo "You can verify that your information was added by doing a more of the sftp_config"
    echo "A backup of the working sftp_config was created when this script was run: sftp_config.bak"

最终更改和脚本说明

提示

如果您查看上面的脚本,您会注意到 sed 默认使用的分隔符从 / 更改为 ,sed 允许您使用任何单字节字符作为分隔符。您要在文件中搜索的内容中包含许多“/”字符,您需要对每个字符进行转义(在它们前面添加“\”)才能搜索和替换这些字符串。更改分隔符使这项操作变得非常容易,因为它消除了进行这些转义的必要性。

关于脚本和 SFTP chroot 的一些需要注意的地方。首先,您会提示输入所需的信息,并将其回显给用户以进行验证。如果您对确认问题回答“N”,则脚本将退出而不执行任何操作。8.5 版本的脚本会备份 sshd_config/etc/ssh/sshd_config.bak),使其恢复到我们运行脚本之前的状态。8.6 或 9.0 版本的脚本会对 sftp_config 文件(/etc/ssh/sftp/sftp_config.bak)执行相同的操作。这样,如果您在条目中出现错误,就可以恢复相应的备份文件并重新启动 sshd 以使一切恢复正常。

SFTP chroot 要求 sshd_config 中给出的路径拥有 root 权限。因此,您不需要在路径末尾添加 html 目录。用户身份验证后,chroot 将将用户的主目录(在本例中为 ../html 目录)切换到您输入的任何域。您的脚本已适当地将 ../html 目录的所有者更改为 sftpuser 和 apache 组。

使脚本可执行

chmod +x /usr/local/sbin/webuser

为我们的两个测试域运行脚本。

测试 SSH 拒绝和 SFTP 访问

首先,从另一台机器以 SFTP 用户的身份使用 ssh 测试到我们的主机。输入密码后,您应该收到以下信息

This service allows sftp connections only.

图形工具测试

如果您确实收到了该消息,下一步是测试 SFTP 访问。为了方便测试,您可以使用支持 SFTP 的图形 FTP 应用程序(例如 Filezilla)。在这种情况下,您的字段将类似于以下内容

  • 主机:sftp://hostname_or_IP_of_the_server
  • 用户名:(示例:myfixed)
  • 密码:(SFTP 用户的密码)
  • 端口:如果您在默认端口 22 上使用 SSH 和 SFTP,请输入该端口

填写完毕后,您可以单击“快速连接”(Filezilla)按钮,您将连接到相应网站的 ../html 目录。双击“html”目录进入其中,然后尝试将文件放到目录中。如果您成功了,则说明一切正常。

命令行工具测试

您可以在安装了 SSH 的机器(大多数 Linux 安装)上从命令行执行所有这些操作。以下是对连接命令行方法的简要概述以及一些选项。

  • sftp 用户名(示例:myfixed@ 服务器的 hostname 或 IP:sftp myfixed@192.168.1.116)
  • 出现提示时输入密码
  • cd html(更改为 html 目录)
  • pwd(应显示您位于 html 目录中)
  • lpwd(应显示您的本地工作目录)
  • lcd PATH(应将您的本地工作目录更改为您要使用的目录)
  • put 文件名(将复制文件到 ..html 目录)

要查看完整的选项列表和更多信息,请查看 SFTP 手册页

网页测试文件

对于我们的虚拟域名,您需要创建几个 index.html 文件,您可以将这些文件填充到 ../html 目录中。创建后,您需要将它们放到每个域名的目录中,并使用该域名的 SFTP 凭据。这些文件很简单。您只需要一些东西来验证您的站点是否正常运行以及 SFTP 是否按预期工作。以下是此文件的示例。您可以根据需要更改它。

<!DOCTYPE html>
<html>
<head>
<title>My Broken Axel</title>
</head>
<body>

<h1>My Broken Axel</h1>
<p>A test page for the site.</p>

</body>
</html>

网页测试

您需要更改工作站上的 hosts 文件以测试这些文件是否按预期显示和加载。对于 Linux,这将是 sudo vi /etc/hosts,并添加您正在测试的 IP 和主机名,如下所示。

127.0.0.1 localhost
192.168.1.116 www.site1.com site1.com
192.168.1.116 www.site2.com site2.com
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

提示

您需要使用上面的主机填充 DNS 服务器以获取真实域名。但是,您可以使用这种 穷人 DNS 来测试任何域名,即使是尚未在真实 DNS 服务器上启用使用的域名。

打开您的 Web 浏览器并确保每个域名的 index.html 文件通过在浏览器地址栏中输入 URL 来显示。(示例:http://site1.com)如果您的测试索引文件加载,则一切正常。

第 3 部分:使用 SSH 密钥对进行管理访问

请注意,您将在此处使用文档 SSH 公钥和私钥 中讨论的概念,但也会对其进行改进。如果您不熟悉此过程,请在继续之前阅读该文章。

创建公钥/私钥对

从其中一个管理用户的工作站命令行(例如:lblakely)执行以下操作

ssh-keygen -t rsa

这将为您提供以下内容

Generating public/private rsa key pair.
Enter file in which to save the key (/home/lblakely/.ssh/id_rsa):

按回车键在显示的位置创建私钥。这将为您提供以下对话框

Enter passphrase (empty for no passphrase):

您需要亲自决定在此步骤中是否需要密码。作者在此处始终按回车键。

Enter same passphrase again:

重复您之前输入的任何密码或输入无密码。

此时,公钥和私钥已经存在。为我们的另一个系统管理员示例用户重复此步骤。

将公钥传输到 SFTP 服务器

下一步是将我们的密钥导出到服务器。实际上,负责管理多个服务器的系统管理员会将其公钥传输到他们负责的所有服务器。

用户可以在创建后使用 ssh-id-copy 将密钥安全地发送到服务器

ssh-id-copy lblakely@192.168.1.116

服务器将提示用户输入一次密码,并将密钥复制到 authorized_keys 中。您也将收到此消息

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'lblakely@192.168.1.116'"
and check to make sure that only the key(s) you wanted were added.

如果您能够使用此帐户登录,请使用另一个管理员重复此过程。

仅允许基于密钥的登录

如果一切按计划进行并且我们管理员的密钥现在已在 SFTP 服务器上就位,则您需要关闭服务器上的密码身份验证。为了安全起见,请确保您有两个连接到服务器的连接,以便在您遇到意外后果时可以撤消任何更改。

要完成此步骤,您需要再次更改 sshd_config,与以前一样,您需要先备份该文件

cp -f /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

接下来,编辑 sshd_config 文件

vi /etc/ssh/sshd_config

您需要关闭隧道密码。在配置中找到此行

PasswordAuthentication yes

将其更改为“no” - 请注意,仅将此行注释掉将失败,因为默认值始终为“yes”。

PasswordAuthentication no

公钥身份验证默认情况下处于启用状态,但请确保它通过删除此行前面的注释来实现

#PubkeyAuthentication yes

使其读取

PubkeyAuthentication yes

这使得我们的 sshd_config 文件在一定程度上具有自记录性。

保存您的更改。祈祷一切顺利,然后重新启动 sshd

systemctl restart sshd

尝试以您其中一个管理用户身份使用其密钥登录到服务器应该像以前一样工作。如果不是,请恢复您的备份,确保您已遵循所有步骤,然后重试。

第 4 部分:关闭远程 root 登录

您实际上已经完成了。如果您现在尝试使用 root 用户登录到服务器,您将收到以下信息

root@192.168.1.116: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

但您需要确保没有人能够为 root 用户创建公钥/私钥并通过这种方式访问服务器。为此,您需要最后一步。您将进行此更改...您猜对了!... 在 sshd_config 文件中。

与上面更改 sshd_config 文件时的每个步骤一样,您需要在继续之前备份该文件的副本

cp -f /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

编辑 sshd_config

vi /etc/ssh/sshd_config

找到此行

PermitRootLogin yes

将其更改为“no”

PermitRootLogin no

保存,退出文件,并重新启动 sshd

systemctl restart sshd

以 root 用户身份通过 ssh 远程登录将收到与之前相同的拒绝消息,但即使他们拥有 root 的公钥/私钥对,也仍然无法访问服务器。

附录:新的系统管理员

尚未讨论的是添加另一个系统管理员会发生什么。ssh-copy-id 在关闭密码身份验证的情况下将不起作用。以下是对这种情况的建议。请注意,不止一种解决方案存在。除了这里提到的方法之外,现有管理员还可以为另一个管理员生成和部署密钥。

解决方案一 - 徒步搬运

此解决方案假设可以物理访问服务器,并且服务器是物理硬件,而不是虚拟的(容器或 VM)

  • 将用户添加到 SFTP 服务器上的“wheel”组
  • 让用户生成其 SSH 公钥和私钥
  • 使用 USB 驱动器,将公钥复制到驱动器,并将其物理搬运到服务器,并将其手动安装到新系统管理员的 /home/[username]/.ssh 目录中

解决方案二 - 临时编辑 sshd_config

此解决方案容易出现人为错误,但由于它不是经常执行,因此如果仔细执行,可能不会有问题。

  • 将用户添加到 SFTP 服务器上的“wheel”组
  • 让另一个已经拥有基于密钥的身份验证的系统管理员在 sshd_config 文件中临时启用“PasswordAuthentication yes”并重新启动 sshd
  • 让新的系统管理员使用其密码运行 ssh-copy-id 将 ssh 密钥复制到服务器。

解决方案三 - 编写脚本

此过程使用一个已经拥有基于密钥的访问权限的系统管理员和一个必须使用 bash [脚本名称] 运行的脚本,以实现与上面“解决方案二”相同的功能。

  • 手动编辑 sshd_config 文件并删除看起来像这样的已注释掉的行:#PasswordAuthentication no。此行记录了关闭密码身份验证的过程,但它会妨碍下面的脚本,因为我们的脚本将查找 PasswordAuthentication no 的首次出现,然后查找 PasswordAuthentication yes 的首次出现。如果您删除此一行,我们的脚本将正常运行。
  • 在 SFTP 服务器上创建一个名为“quickswitch”的脚本,或任何您想命名的名称。此脚本的内容应如下所示。
#!/bin/bash
# for use in adding a new system administrator

/usr/bin/cp -f /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

/usr/bin/sed -i '0,/PasswordAuthentication no/ s/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
/usr/bin/systemctl restart sshd
echo "Have the user send his keys, and then hit enter."
read yn
/usr/bin/sed -i '0,/PasswordAuthentication yes/ s/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
/usr/bin/systemctl restart sshd
echo "Changes reversed"

脚本说明:您不使此脚本可执行。原因是您不希望它意外运行。脚本运行(如上所述)方式如下:bash /usr/local/sbin/quickswitch。此脚本创建 sshd_config 文件的备份副本,就像我们上面的所有其他示例一样。然后,它就地编辑 sshd_config 文件并搜索 PasswordAuthentication no首次出现,将其更改为 PasswordAuthentication yes,然后重新启动 sshd 并等待脚本用户按 Enter 键才能继续。运行脚本的系统管理员将与新的系统管理员进行通信,一旦该新的系统管理员运行 ssh-copy-id 将其密钥复制到服务器,运行脚本的系统管理员就会按回车键,从而撤消更改。

简而言之,在实施 SSH 锁定程序后,有许多方法可以添加另一个系统管理员。

结论

本文档很全面。当为客户访问启用 SFTP 时,它将使多站点 Web 服务器更安全,并且更不易受到 SSH 上的攻击载体的攻击。即使您使用非常好的 FTP 服务器,并按照本文档中所述尽可能安全地进行设置,SFTP 也比 FTP 安全得多,如本文档所述:VSFTPD 上的文档。通过实施本文档中的所有步骤,您可以放心地将端口 22(SSH)打开到您的公共区域,并且仍然知道您的环境是安全的。

作者:Steven Spencer

贡献者:Ezequiel Bruni, Ganna Zhyrnova