介绍
scponly 是匿名 FTP 的安全替代方案,它允许管理员设置一个安全的用户帐户,并限制远程访问文件,而无需访问交互式壳。
为什么使用 scponly 代替正常 SSH? 使用 scponly 您可以向用户提供远程访问来下载和上传特定文件. 它们不会有交互式壳,这意味着它们不能执行命令. 用户只能通过scp
、sftp
或支持这些协议的客户端访问服务器。
前提条件
对于本教程,您将需要新的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
,rsync
和openssh-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 binaryscponlyc
--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 -l
在 sftp>
提示:
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 页面。