首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在CentOS 7上安装和配置scponly

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

原创
作者头像
angel_郁
修改于 2018-09-30 02:49:05
修改于 2018-09-30 02:49:05
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install wget gcc man rsync openssh-clients -y

第二步 - 下载并提取scponly

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

在下载scponly之前,请转到/opt目录。此目录通常指定用于可选软件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /opt

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

使用wget下载scponly源文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo wget http://sourceforge.net/projects/scponly/files/scponly-snapshots/scponly-20110526.tgz

提取scponly源代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo tar -zxvf scponly-20110526.tgz

第三步 - 构建和安装scponly

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /opt/scponly-20110526

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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上安装和运行的二进制文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo make

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo make install

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /bin/su -c "echo "/usr/local/bin/scponly" >> /etc/shells"

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

第四步 - 创建scponly Group

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo groupadd scponly

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo mkdir -p /pub/upload

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chown root:scponly /pub/upload

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chmod 770 /pub/upload

第六步 - 使用scponly Shell创建用户帐户

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo useradd -m -d /home/testuser1 -s "/usr/local/bin/scponly" -c "testuser1" -G scponly testuser1

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chmod 500 /home/testuser1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo passwd testuser1

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
su - testuser1

您的终端将挂起,因为您无权访问交互式shell。按CTRL+C退出scponly shell。

您还可以测试本地计算机的访问权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh testuser1@your_server_ip

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

第八步 - 测试用户下载文件的能力

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

首先使用fallocate命令创建100兆字节的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo fallocate -l 100m /home/testuser1/testfile.img

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chown testuser1:testuser1 /home/testuser1/testfile.img

在本地系统更改目录/tmp中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /tmp

在您的服务器上运行sftp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sftp testuser1@your_server_ip

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

sftp>提示符登录后输入ls -l

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls -l

使用get命令下载文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
get testfile.img

文件完成后,下载类型quit退出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
quit

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls -l testfile.img

第九步 - 测试用户上传文件的能力

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

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

在本地系统上使用fallocate创建一个100兆字节的uploadfile.img文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fallocate -l 100m /home/testuser1/uploadfile.img

从本地系统连接到您的CVM。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sftp testuser1@your_server_ip

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
put uploadfile.img /pub/upload/

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ls -ltr /pub/upload

结果应类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-rw-r--r--    1 testuser1 testuser1 104857600 Jun  5 07:46 uploadfile.img

最后输入quitsftp提示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive开发问题汇总
select id,concat_ws('|', collect_set(name)) from tmp_test group by id;
大王叫我来巡山、
2025/07/11
880
Hive部分函数简析
  对查询结果做一次全局排序,即所有Mapper产生的结果都会交给一个reducer处理,无论数据量大小,job任务只会启动一个reducer,所以如果数据量巨大,会耗费大量时间计算。(在严格模式下,oeder by 需要指定limit数据条数,从而避免因为数据量过大造成集群崩坏。)
挽风
2021/04/13
3810
Hive学习-lateral view 、explode、reflect和窗口函数
然后挂了FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
顾翔
2024/09/10
6460
Hive学习-lateral view 、explode、reflect和窗口函数
一文学完所有的Hive Sql(两万字最全详解)
lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。
五分钟学大数据
2021/04/02
3.3K0
Hive基础操作
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
CBeann
2023/12/25
6470
【Hive】SQL语句大全
继承 org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
全栈程序员站长
2022/08/30
2.7K0
Hive根据用户自定义函数、reflect函数和窗口分析函数
(2)UDAF(User-Defined Aggregation Function)
顾翔
2024/09/10
5020
Hive根据用户自定义函数、reflect函数和窗口分析函数
大数据技术之_09_Hive学习_复习与总结
在讲解中我们需要贯串一个例子,所以需要设计一个情景,对应还要有一个表结构和填充数据。如下:有 3 个字段,分别为 personId 标识某一个人,company 标识一家公司名称,money 标识该公司每年盈利收入(单位:万元人民币)
黑泽君
2019/03/21
8720
大数据技术之_09_Hive学习_复习与总结
快速学习-Hive查询
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 查询语句语法:
cwl_java
2020/02/21
2K0
快速学习-Hive查询
硬刚Hive | 4万字基础调优面试小总结
Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hive将HQL语句转换成MR任务进行执行。
王知无-import_bigdata
2021/06/01
2.1K0
硬刚Hive | 4万字基础调优面试小总结
2021_03_25
A 问题 1.spark⽀持故障恢复的⽅式? 2.详细说一下hadoop和spark的相同点和不同点? 3.spark如何保证宕机迅速恢复? A1 spark⽀持故障恢复的⽅式? 主要包括两种⽅式
CoreDao
2021/04/12
4680
2021_03_25
大数据技术之_08_Hive学习_03_查询+函数
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 查询语句语法:
黑泽君
2019/03/11
1.9K0
大数据技术之_08_Hive学习_03_查询+函数
Hive函数
**CONCAT_WS(separator, str1, str2,...):**多字符串拼接
ha_lydms
2023/11/19
6151
Hive函数
最强最全面的Hive SQL开发指南,超四万字全面解析!
hive -S -e 'select table_cloum from table' -S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。
五分钟学大数据
2021/12/02
8.1K0
最强最全面的Hive SQL开发指南,超四万字全面解析!
Hive个人笔记总结
①保证环境变量中有JAVA_HOME ②基于HADOOP工作,保证环境变量中有HADOOP_HOME ③在环境变量中配置HIVE_HOME,默认hive在启动时,会读取HIVE_HOME/conf中的配置文件
Java架构师必看
2021/05/14
2.7K0
Hive基础09、HQL查询语句
hive -S -e 'select table_cloum from table' -S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。
红目香薰
2022/11/30
6.4K0
Hive基础09、HQL查询语句
五万字 | Hive知识体系保姆级教程
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
数据社
2021/08/27
2.2K0
五万字 | Hive知识体系保姆级教程
Hive_
HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
挽风
2023/10/17
4000
Hive_
Vue 生命周期钩子
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
HammerZe
2022/05/09
3790
Vue 生命周期钩子
Hive学习
         Hive是基于Hadoop的一个数据仓库工具(离线),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
曼路
2018/10/18
1.2K0
相关推荐
Hive开发问题汇总
更多 >
交个朋友
加入[数据] 腾讯云技术交流站
获取数据实战干货 共享技术经验心得
加入数据技术工作实战群
获取实战干货 交流技术经验
加入[数据库] 腾讯云官方技术交流站
数据库问题秒解答 分享实践经验
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档