如何在CentOS7上安装和配置scponly

来自菜鸟教程
跳转至:导航、​搜索

介绍

scponly 是匿名 FTP 的安全替代方案。 它使管理员能够设置具有受限远程文件访问权限且无需访问交互式外壳的安全用户帐户。

为什么使用 scponly 而不是普通的 SSH? 使用 scponly,您可以让用户远程访问以下载和上传特定文件。 它们将没有交互式外壳,这意味着它们无法执行命令。 用户只能通过 scpsftp 或支持这些协议的客户端访问服务器。 从安全角度来看,这通过限制对服务器上交互式 shell 的不必要访问来降低您的攻击面。

先决条件

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

本教程中的所有命令都应以非 root 用户身份运行。 如果该命令需要 root 访问权限,它将在前面加上 sudo。 如果您还没有设置,请按照以下教程进行操作:CentOS 6 上的初始服务器设置或 CentOS 7 上的初始服务器设置。

第 1 步 — 安装软件包

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

要从源代码构建 scponly,您需要安装以下 5 个软件包:

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

我们将使用 yum 安装构建 scponly 所需的必备软件包。 在 yum 安装期间,我们将传递所需的软件包名称以及 -y,它会自动对任何提示回答是。

使用 yum install 命令安装 wgetgccmanrsyncopenssh-clients

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

第 2 步 — 下载并提取 scponly

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

在下载 scponly 之前,请切换到 /opt 目录。 该目录通常是为 可选 软件指定的。

cd /opt

截至本文为止,scponly 的最新快照是 2011.05.26。 您可以查看 Sourceforge 页面 以获得更高版本并相应地调整 wget 命令。

使用 wget 下载 scponly 源:

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

提取 scponly 源代码:

sudo tar -zxvf scponly-20110526.tgz

第 3 步 — 构建和安装 scponly

在本节中,我们将使用 3 个主要命令来构建 scponly:configuremakemake install。 这些是从源代码下载和安装软件时最常用的 3 个命令。

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

cd /opt/scponly-20110526

首先,运行 configure 命令来构建一个 makefile,其中包含在从源代码构建时要启用或禁用的所有功能:

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

使用了以下选项:

  • --enable-chrooted-binary: 安装 chroot 二进制文件 scponlyc
  • --enable-winscp-compat: 启用与 Windows scp/sftp 客户端 WinSCP 的兼容性
  • --enable-rsync-compat: 启用与 rsync 的兼容性,这是一个非常通用的文件复制实用程序
  • --enable-scp-compat: 启用与 UNIX 样式 scp 命令的兼容性

接下来我们将使用 make 命令构建 scponly。 make 命令采用您使用 configure 命令传递的所有选项,并将其构建到将在操作系统上安装和运行的二进制文件中。

sudo make

接下来我们将使用 make install 安装二进制文件:

sudo make install

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

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

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

第 4 步 — 创建 scponly 组

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

sudo groupadd scponly

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

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

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

sudo mkdir -p /pub/upload

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

sudo chown root:scponly /pub/upload

下一步是设置 /pub/upload 目录的权限。 通过将此目录的权限设置为 770,我们仅授予 root 用户和 scponly 组的成员访问权限。

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

sudo chmod 770 /pub/upload

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

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

创建一个名为 testuser1 的用户,并将 scponly 指定为备用组,并将 /usr/local/bin/scponly 指定为 shell:

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

注意: 接下来是很重要的一步。 用户的主目录不应该是可写的,因为他们可以修改某些 SSH 参数并可能破坏 scponly shell。


testuser1 主目录的权限更改为仅为所有者读取和执行:

sudo chmod 500 /home/testuser1

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

sudo passwd testuser1

第 7 步 — 验证用户无权访问交互式 Shell

现在我们将测试 scponly shell 访问并验证它是否按预期工作。

让我们验证 testuser1 帐户是否无权访问终端。

尝试以 testuser1 身份登录服务器:

su - testuser1

由于您无法访问交互式 shell,您的终端将挂起。 按 CTRL+C 退出 scponly shell。

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

ssh testuser1@your_server_ip

同样,您的终端将挂起,因为不允许 testuser1 访问 shell。 按 CTRL+C 退出 scponly shell。

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

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

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

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

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

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

在本地系统上将目录更改为 /tmp

cd /tmp

接下来 sftp 到您的 DigitalOcean 服务器:

sftp testuser1@your_server_ip

输入密码时,系统可能会提示您保存 ssh 密钥。

一旦在 sftp> 提示符下登录问题 ls -l

ls -l

使用 get 命令下载文件:

get testfile.img

文件下载完成后,键入 quit 退出:

quit

返回本地计算机,验证文件是否已成功下载:

ls -l testfile.img

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

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

注意: 在本节中,我们将限制对 /pub/upload 目录的访问。 这不是必需的,但出于多种原因,例如管理配额或磁盘使用以及轻松监控中心位置的所有上传,这是一项额外的安全优势。


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

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

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

sftp testuser1@your_server_ip

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

put uploadfile.img /pub/upload/

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

ls -ltr /pub/upload

结果应类似于:

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

最后在 sftp 提示符下输入 quit

quit

结论

scponly 应该在每个管理员的工具箱中。 它可以用作匿名 FTP 的安全替代方案,或者作为一种让经过身份验证的用户能够在没有交互式 shell 的情况下下载和上传文件的方式。 scponly 的日志记录发生在标准 ssh 日志文件 /var/log/secure 中。 一如既往地阅读手册页并保持系统更新。

有关 scponly 的更多信息,请转到 scponly GitHub 页面