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

介绍

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

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

先决条件

在本教程中,您将需要一个全新的CentOS 6或7 CVM。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

本教程中的所有命令都应以非root用户身份运行。如果命令需要root访问权限,则前面应该带有sudo

第一步 - 安装包

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

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

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

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

使用yum install命令安装wgetgccmanrsync,和openssh-clients

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

第二步 - 下载并提取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

第三步 - 构建和安装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: 安装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 Group

现在我们将创建一个名为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 Shell创建用户帐户

现在我们将设置一个测试用户帐户来验证我们的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

第七步 - 验证用户无权访问Interactive Shell

现在我们将测试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

最后输入quitsftp提示:

quit

结论

scponly应该在每个管理员的工具箱中。它可以用作匿名FTP的安全替代方法,也可以作为一种方法,使经过身份验证的用户无需交互式shell即可下载和上传文件。scponly的日志记录发生在标准ssh日志文件/var/log/secure 中。有关scponly的更多信息,请访问scponly GitHub页面

想要了解更多关于Linux的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Install and Configure scponly on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术博文

关于inodes占用100%的问题及解决方法

系统:Centos;一般的Linux系统也可以用这种方法。 情况描述:今天session文件写入时,写入不了,而且连接到服务器上开启服务都开不了,起始以为磁盘空...

4129
来自专栏北京马哥教育

6 个 Linux 运维典型问题,大牛的分析解决思路在这里

28311
来自专栏编程

Go语言·不常用的Go命令详解

作者:孙飞撩技术 链接:http://www.jianshu.com/p/46c268e7a149 來源:简书 共3329字,阅读需8分钟 迁移自CSDN: $...

2575
来自专栏FreeBuf

OFFICE OLE2LINK(CVE-2017-0199)漏洞利用详解

漏洞概述 FireEye最近公布了一个OFFICE 0day,在无需用户交互的情况下,打开word文档就可以通过hta脚本执行任意代码。经过研究发现,此漏洞的...

2509
来自专栏余生开发

electron-vue———环境升级

https://gitee.com/yu_sheng/electron-vue   个人修改升级

5322
来自专栏小车博客

OpenVZ 魔改 BBR - lkl-rinetd 一键脚本

2761
来自专栏

使用redis构建可靠分布式锁

关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了。 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下...

2987
来自专栏pangguoming

使用sshfs挂载远程服务器目录

服务器日志查看,是开发人员和服务器运维人员在工作中经常会遇到的一件事情,只有一台服务器时,比较好办,直接登录服务器使用tail -f file-path 命令就...

2034
来自专栏Java后端技术

原来实现项目多环境打包部署是如此的简单

   在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境、测试团队的测试环境、生产仿真环境、正式生产环境,不同的公司可...

1243
来自专栏行者常至

(Java)请求方式之GET、POST 浅析

·不同的请求方式不仅仅在数据传输时会有所不同,在表单提交及服务器端处理时也会采用不同的方式。而区分不同种类的请求方式也会使得浏览器采用不同的缓存方式处理后续请求...

1542

扫码关注云+社区

领取腾讯云代金券