scponly是匿名FTP的安全替代品。它使管理员能够设置具有受限远程文件访问权限且无法访问交互式shell的安全用户帐户。
为什么使用scponly而不是普通的SSH?使用scponly,您可以让用户远程访问以下载和上载特定文件。它们没有交互式shell,这意味着它们无法执行命令。用户只能通过访问服务器scp
,sftp
或客户端支持这些协议。从安全角度来看,这可以通过限制对服务器上交互式shell的不必要访问来降低攻击面。
在本教程中,您将需要一个全新的CentOS 6或7 CVM。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
本教程中的所有命令都应以非root用户身份运行。如果命令需要root访问权限,则前面应该带有sudo
。
scponly在某些第三方存储库中可用,但这些scponly版本已经过时,并且缺少我们在从源代码构建scponly时将添加的一些功能。
要从源代码构建scponly,您需要安装以下5个软件包:
我们将使用yum来安装构建scponly所需的必备软件包。在yum安装期间,我们将传递所需的软件包名称,-y
表示自动对任何提示回答“是”。
使用yum install
命令安装wget
,gcc
,man
,rsync
,和openssh-clients
:
sudo yum install wget gcc man rsync openssh-clients -y
在本节中,我们将使用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:,configure
,make
和make 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:
安装chrooted二进制文件 scponlyc
--enable-winscp-compat:
实现与Windows scp / sftp客户端WinSCP的兼容性--enable-rsync-compat:
启用与rsync的兼容性,这是一个非常通用的文件复制实用程序--enable-scp-compat:
启用与UNIX样式scp命令的兼容性接下来我们将使用make
命令构建scponly 。该make
命令将使用该configure
命令获取您传递的所有选项,并将其构建到将在OS上安装和运行的二进制文件中。
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可供用户使用。所以我们告诉操作系统我们在被调用的系统中添加了一个新的shell scponly
,并且二进制文件位于/usr/local/bin/scponly
。
现在我们将创建一个名为scponly的组,以便我们可以轻松管理将使用scponly访问服务器的所有用户。
sudo groupadd scponly
在本节中,我们将为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
现在我们将设置一个测试用户帐户来验证我们的scponly配置。
创建一个名为testuser1的用户,并将scponly指定为备用组和shell/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
现在我们将测试scponly shell访问并验证它是否按预期工作。
让我们验证testuser1帐户是否无法访问终端。
尝试以testuser1身份登录服务器:
su - testuser1
您的终端将挂起,因为您无权访问交互式shell。按CTRL+C
退出scponly shell。
您还可以测试本地计算机的访问权限:
ssh testuser1@your_server_ip
同样,您的终端将挂起,因为testuser1不允许shell访问。按CTRL+C
退出scponly shell。
在本节中,我们将通过sftp
从您的本地计算机连接到您的CVM,以验证该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
:
sftp testuser1@your_server_ip
输入密码时,系统可能会提示您保存ssh密钥。
在sftp>
提示符登录后输入ls -l
:
ls -l
使用get
命令下载文件:
get testfile.img
文件完成后,下载类型quit
退出:
quit
返回本地计算机,验证文件是否已成功下载:
ls -l testfile.img
在本节中,我们将使用sftp
测试testuser1
帐户使用文件上传文件的能力。
注意: 在本节中,我们将限制对/pub/upload
目录的访问。这不是必需的,但由于多种原因(例如管理配额或磁盘使用情况)以及轻松监控中央位置的所有上传,这是一项额外的安全优势。
在本地系统上使用fallocate
创建一个100兆字节的uploadfile.img
文件:
fallocate -l 100m /home/testuser1/uploadfile.img
从本地系统连接到您的CVM。
sftp testuser1@your_server_ip
接下来从 sftp
提示符中上传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页面。
想要了解更多关于Linux的开源信息教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Install and Configure scponly on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。