如何在 CentOS 7 上安装和配置 scponly

介绍

scponly 是匿名 FTP 的安全替代方案,它允许管理员设置一个安全的用户帐户,并限制远程访问文件,而无需访问交互式壳。

为什么使用 scponly 代替正常 SSH? 使用 scponly 您可以向用户提供远程访问来下载和上传特定文件. 它们不会有交互式壳,这意味着它们不能执行命令. 用户只能通过scpsftp或支持这些协议的客户端访问服务器。

前提条件

对于本教程,您将需要新的CentOS 6或7 Droplet。

本教程中的所有命令都应该作为非根用户运行。如果命令需要 root 访问,则将被sudo所先行。如果您尚未安装此设置,请遵循本教程: CentOS 6上的初始服务器设置CentOS 7的初始服务器设置

步骤 1 - 安装包

scponly 在某些第三方存储库中可用,但这些 scponly 构建已过时,并且缺少我们在从源头构建 scponly 时将添加的一些功能。

要从源头创建 scponly,您需要安装以下5个包:

  • wget (通过命令行下载文件)
  • gcc (从源码编译)
  • man (阅读人页面)
  • rsync (提供高级文件复制)
  • openssh-client-tools (提供各种 ssh 工具)

我们将使用 yum 来安装必要的先决包,在 yum 安装过程中,我们将传递所需的包名称以及 -y,该包会自动回答任何提示。

使用yum install命令安装wget,gcc,man,rsyncopenssh-clients:

1sudo yum install wget gcc man rsync openssh-clients -y

步骤 2 – 下载和提取 scponly

在本节中,我们将使用wget下载来自 sourceforge 的 scponly 的最新构建,并使用tar提取文件。

在下载之前,切换到/opt目录. 此目录通常被指定为 optional 软件。

1cd /opt

截至本文, scponly 的最新截图是 2011.05.26 . 您可以检查 Sourceforge 页面以获取以后的发布,并相应地调整 wget 命令。

下载使用wget的 scponly 源:

1sudo wget http://sourceforge.net/projects/scponly/files/scponly-snapshots/scponly-20110526.tgz

提取 scponly 源代码:

1sudo tar -zxvf scponly-20110526.tgz

步骤 3 – 构建和安装 scponly

在本节中,我们将使用3个主要命令来构建单独:‘配置’,‘制造’和‘安装’,这些是下载和安装源代码时最常用的3个命令。

切换到包含您刚刚不压缩的 scponly 源代码的目录:

1cd /opt/scponly-20110526

首先,运行配置命令来构建一个构建文件,其中包含您在从源构建时要启用或禁用的所有功能:

1sudo ./configure --enable-chrooted-binary --enable-winscp-compat --enable-rsync-compat --enable-scp-compat --with-sftp-server=/usr/libexec/openssh/sftp-server

使用了以下选项:

  • --enable-chrooted-binary: Installs chrooted binary scponlyc
  • --enable-winscp-compat: 允许与 WinSCP,一个 Windows scp/sftp 客户端
  • --enable-rsync-compat: 允许与 rsync 兼容,一个非常通用的文件复制工具
  • --enable-scp-compat: 允许与 UNIX 风格 scp 命令 兼容

接下来,我们将单独使用制造命令构建,制造命令将使用配置命令传输的所有选项,并将其构建为将安装并在操作系统上运行的二进制。

1sudo make

接下来我们将安装Make install的二进制:

1sudo make install

最后,将 scponly shells 添加到 /etc/shells 文件中:

1sudo /bin/su -c "echo "/usr/local/bin/scponly" >> /etc/shells"

/etc/shells文件告诉操作系统哪些壳可供用户使用,所以我们告诉操作系统我们在系统中添加了一个名为scponly的新壳,并且二进制位于/usr/local/bin/scponly

步骤 4 – 创建 scponly 组

现在我们将创建一个名为scponly的组,以便我们可以轻松管理所有将使用scponly访问服务器的用户。

1sudo groupadd scponly

步骤 5 — 创建一个上传目录并设置适当的权限

在本节中,我们将为 scponly 组创建一个集中的上传目录,这允许您控制可以上传到服务器的数据数量和数量。

创建一个名为/pub/upload的目录,这将是一个专门用于上传的目录:

1sudo mkdir -p /pub/upload

/pub/upload目录的群组所有权更改为scponly:

1sudo chown root:scponly /pub/upload

下一步是在/pub/upload目录上设置权限. 通过将该目录的权限设置为 770,我们只向 root 用户和 scponly 组成员提供访问权限。

/pub/upload目录中更改所有者和组的阅读、写入和执行权限,并删除其他人的所有权限:

1sudo chmod 770 /pub/upload

步骤 6 — 使用 scponly Shell 创建用户帐户

现在我们将设置一个测试用户帐户来验证我们的精确配置。

创建一个名为 testuser1 的用户,并指定 scponly 作为替代组和 /usr/local/bin/scponly作为壳:

1sudo useradd -m -d /home/testuser1 -s "/usr/local/bin/scponly" -c "testuser1" -G scponly testuser1

<$>[注] 注: 下一步是一个非常重要的步骤. 用户的主目录不应该是可编写的,因为它们可以修改某些SSH参数,并可能颠覆壳。

更改 testuser1 主目录上的权限,以便仅为所有者阅读和执行:

1sudo chmod 500 /home/testuser1

最后,为 testuser1 用户设置密码:

1sudo passwd testuser1

步骤 7 — 验证用户没有访问互动壳

现在我们将测试壳接入,并检查它是否按预期工作。

让我们验证 **testuser1 ** 帐户没有访问终端。

尝试登录服务器作为 testuser1:

1su - testuser1

您的终端将悬挂,因为您没有访问交互式壳。

您还可以从本地机器测试访问:

1ssh testuser1@your_server_ip

再次,您的终端将悬挂,因为testuser1 不允许 shell 访问. 按CTRL+C来退出 scponly shell。

第8步:测试用户下载文件的能力

在本节中,我们将通过sftp从您的本地机器连接到您的DigitalOcean Droplet,以验证testuser1帐户可以下载文件。

首先使用「fallocate」创建一个100兆字节的文件:

1sudo fallocate -l 100m /home/testuser1/testfile.img

testfile.img文件的所有权更改为testuser1:

1sudo chown testuser1:testuser1 /home/testuser1/testfile.img

在您的本地系统上,更改目录为 /tmp:

1cd /tmp

下一个sftp到您的DigitalOcean服务器:

1sftp testuser1@your_server_ip

您可能会被要求在输入密码时保存 ssh 密钥。

一旦登录到问题 ls -lsftp> 提示:

1ls -l

下载文件使用得到命令:

1get testfile.img

一旦下载完毕,输入Quit来退出:

1quit

回到本地计算机上,确认文件已成功下载:

1ls -l testfile.img

第9步:测试用户上传文件的能力

在本节中,我们将测试testuser1帐户使用sftp上传文件到服务器的能力。

<$>[注] 注: 在本节中,我们将限制对 `/pub/upload’ 目录的访问。这不是必需的,但由于多种原因,例如管理配额或磁盘使用率,并轻松地在一个中心位置监控所有上传。

在本地系统上,使用fallocate创建一个名为uploadfile.img的100兆字节文件:

1fallocate -l 100m /home/testuser1/uploadfile.img

从您的本地系统连接到您的 DigitalOcean Droplet。

1sftp testuser1@your_server_ip

接下来,从sftp提示符上传uploadfile.img/pub/upload:

1put uploadfile.img /pub/upload/

通过在sftp提示处发出以下命令来验证文件已成功上传:

1ls -ltr /pub/upload

结果应该类似于:

1-rw-r--r--    1 testuser1 testuser1 104857600 Jun 5 07:46 uploadfile.img

最后在sftp提示处键入quit:

1quit

结论

scponly应该在每个管理员的工具箱中。它可以被用来作为匿名FTP的安全替代品,或者作为一种方式,让身份验证的用户能够下载和上传文件而无需互动壳。 scponly的日志发生在标准的ssh日志文件中。

有关 scponly 的更多信息,请访问 scponly GitHub 页面

Published At
Categories with 技术
comments powered by Disqus