介绍
scponly是匿名FTP的安全替代。 它使管理员能够在受限的远程文件访问和无法访问交互式shell的情况下设置安全的用户帐户。
为什么使用scponly而不是普通SSH? 使用scponly,您可以让用户远程访问下载和上传特定文件。 它们不会有交互式shell,这意味着它们不能执行命令。 用户只能通过访问服务器scp
, sftp
,或支持这些协议的客户端。 从安全角度来看,这会通过限制不必要的访问服务器上的交互式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来安装所需的必备软件包。 在Yum安装,我们将传递所需的软件包名称以及-y
自动回答是给任何提示。
安装wget
, gcc
, man
, rsync
,和openssh-clients
使用yum install
命令:
sudo yum install wget gcc man rsync openssh-clients -y
第2步 - 下载和提取scponly
在本节中,我们将从SourceForge使用被下载scponly的最新版本wget
并使用提取文件tar
。
scponly下载之前,更改到/opt
目录。 这个目录通常是指定的可选软件。
cd /opt
正如本文的scponly的最新快照是2011.05.26。 您可以检查Sourceforge的页面以后的版本,并调整wget
相应命令。
下载使用scponly源wget
:
sudo wget http://sourceforge.net/projects/scponly/files/scponly-snapshots/scponly-20110526.tgz
提取scponly源代码:
sudo tar -zxvf scponly-20110526.tgz
第3步 - 建立和安装scponly
在本节中,我们将使用3个主要的命令来建立scponly: configure
, make
和make install
。 这些是从源代码下载和安装软件时最常使用的3个命令。
切换到包含刚解压缩的源代码的目录:
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:
允许用WinSCP赋予,在Windows SCP / SFTP客户端的兼容性 -
--enable-rsync-compat:
允许使用rsync,一个非常灵活的文件复制实用程序的兼容性 -
--enable-scp-compat:
能够与UNIX风格SCP命令兼容
下一步,我们将与scponly建立make
命令。 该make
命令把你的一切,你通过使用选项configure
命令,并将其构建成将安装和OS上运行的二进制文件。
sudo make
下一步,我们将与安装二进制文件make install
:
sudo make install
最后,scponly炮弹添加到/etc/shells
的文件:
sudo /bin/su -c "echo "/usr/local/bin/scponly" >> /etc/shells"
在/etc/shells
文件告诉操作系统,外壳可供用户使用。 所以我们告诉我们增加了一个新壳称为系统操作系统scponly
和二进制位于/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
作为外壳:
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外壳。
您还可以测试本地计算机的访问:
ssh testuser1@your_server_ip
同样,您的终端将挂起,因为testuser1不允许shell访问。 按CTRL+C
退出scponly外壳。
第8步 - 测试用户下载文件的能力
在本节中,我们将通过以下方式连接sftp
从本地计算机到你DigitalOceanDroplet验证testuser1
帐户可以下载文件。
首先使用创建一个100兆的文件fallocate
:
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密钥。
一旦登录问题ls -l
在sftp>
提示:
ls -l
下载使用文件的get
命令:
get testfile.img
一旦文件下载完毕类型quit
退出:
quit
返回本地计算机,验证文件已成功下载:
ls -l testfile.img
第9步 - 测试用户上传文件的能力
在本节中,我们将测试的能力testuser1
帐户将文件上传到使用服务器sftp
。
注:在本节中,我们将限制对/pub/upload
目录。 这不是必需的,但由于多种原因(例如管理配额或磁盘使用情况,并轻松监控中央位置的所有上传),这是一个额外的安全性好处。
在您的本地系统中创建一个名为100兆字节的文件uploadfile.img
使用fallocate
:
fallocate -l 100m /home/testuser1/uploadfile.img
从本地系统连接到您的DigitalOcean Droplet。
sftp testuser1@your_server_ip
接着上传uploadfile.img
到/pub/upload
从sftp
提示:
put uploadfile.img /pub/upload/
验证通过在发出以下命令已成功上传的文件sftp
提示:
ls -ltr /pub/upload
结果应类似于:
-rw-r--r-- 1 testuser1 testuser1 104857600 Jun 5 07:46 uploadfile.img
最终输入quit
在sftp
提示:
quit
结论
scponly应该在每个管理员的工具箱。 它可以用来作为匿名FTP的安全替代,或者作为一种方式给予经过身份验证的用户下载和上传文件,而没有交互式shell。 scponly的记录发生在标准SSH的日志文件/var/log/secure
。 一如既往地阅读手册页并保持您的系统更新。
有关scponly的更多信息,请访问scponly GitHub的页面 。