SSH File Transfer Protocol是一个比普通FTP更为安全的文件传输协议。(参考资料:http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol)它工作在Secure Shell(SSH)上,确保文件被加密传输。

因为工作需要,我研究了一下如何在Ubuntu Server上配置SFTP,记录如下。

需求:在服务器上开通SFTP文件服务,允许某些用户上传及下载文件。但是这些用户只能使用SFTP传输文件,不能使用SSH终端访问服务器,并且SFTP不能访问系统文件(即所谓的“Jail(监狱)”)。系统管理员则既能使用SFTP传输文件,也能使用SSH远程管理服务器。

为了便于讨论,我假设我将允许sftp-users用户组内的用户使用SFTP,但不允许使用SSH Shell,且该组用户将被"监狱"(修改系统根目录)。我将在sftp-users组内创建一个用户“alice”。而我将允许ssh-users使用SFTP以及SSH。系统管理员的账户名为admin。

第01步,如果还没有安装OpenSSH服务器,先安装它。

sudo apt-get install openssh-server

第02步,为SFTP访问创建用户组,便于管理权限。

sudo addgroup sftp-users

第03步,创建SFTP用户,并配置相应权限。这里第二行的意思是将alice从所有其他用户组中移除并加入到sftp-users组,并且关闭其Shell访问。如果想深入了解usermod命令,可以使用以下"man usermod"命令查看帮助文档。

sudo adduser alice

sudo usermod -G sftp-users -s /bin/false alice

第04步,创建SSH用户组,并把管理员加入到该组(注意usermod中的-a参数的意思是不从其他用户组用移除)。

sudo addgroup ssh-users

sudo usermod -a -G ssh-users admin

第05步,准备“监狱”的根目录及共享目录。这里解释一下,“监狱”的根目录必须满足以下要求:所有者为root,其他任何用户都不能拥有写入权限。因此,为了让SFTP用户能够上传文件,还必须在“监狱”根目录下再创建一个普通用户能够写入的共享文件目录。为了便于管理员通过SFTP管理上传的文件,我把这个共享文件目录配置为:由admin所有,允许sftp-users读写。这样,管理员和SFTP用户组成员就都能读写这个目录了。

sudo mkdir /home/sftp_root

sudo mkdir /home/sftp_root/shared

sudo chown admin:sftp-users /home/sftp_root/shared

sudo chmod 770 /home/sftp_root/shared

第06步,修改SSH配置文件。

sudo nano /etc/ssh/sshd_config

在sshd_config文件的最后,添加以下内容:

AllowGroups ssh-users sftp-users

Match Group sftp-users

ChrootDirectory /home/sftp_root

AllowTcpForwarding no

X11Forwarding no

ForceCommand internal-sftp

这些内容的意思是:

只允许ssh-uers及sftp-users通过SSH访问系统;

针对sftp-users用户,额外增加一些设置:将“/home/sftp_root”设置为该组用户的系统根目录(因此它们将不能访问该目录之外的其他系统文件);禁止TCP Forwarding和X11 Forwarding;强制该组用户仅仅使用SFTP。

如果需要进一步了解细节,可以使用“man sshd_config”命令。这样设置之后,SSH用户组可以访问SSH,并且不受其他限制;而SFTP用户组仅能使用SFTP进行访问,而且被关进监狱目录。

第07步,重启系统以便使新配置生效。

sudo reboot now

完成啦!

进一步的讨论:SSH用户组将能远程访问所有系统文件,也许不是所有情况下都适用。某些情况下,也许想同样把SSH用户也关监狱。这时候,需要作跟SFTP类似的配置(除了不用usermod -s /bin/false),而且需要把允许SSH用户访问的系统文件复制到监狱根目录下相应的位置。具体信息可以在网上查找,我自己没有实践验证,所以就不误导大家了。(上面这个教程,是我从网上很多似是而非的资料中通过自己的实验整理出来的,在Ubuntu Server 12.04 LTS 64-bit系统上验证通过。非常痛恨那些好像能用但实际错漏很多的教程!)

参考:

http://yhf8377.blog.163.com/blog/static/176860177201210217219800/

http://ihacklog.com/post/how-to-enable-secure-shell-in-ubuntu.html

http://blog.csdn.net/xiaosu_521/article/details/2157011

http://www.linuxidc.com/Linux/2011-01/31022.htm

linux配置sftp-server,Ubuntu Server如何配置SFTP(建立用户监狱)相关推荐

  1. 旭日x3派个人配置总结(ubuntu server + xrdp)

    旭日x3派基本设置 旭日x3派使用文档 [首发]多方位玩转旭日x3派 XRDP+Xface4远程桌面设置 安装xrdp并解决闪退.黑屏问题 ROS2-Foxy配置 解决"Failed to ...

  2. 控制台服务编写 Linux,一步步搭建ubuntu server console(控制台,字符模式)开发环境...

    在我们安装完ubuntu server之后,这个系统还不算完善,因为他缺少很多重要的软件及包的支持. 下面,我以ubuntu 13.04的服务器开发环境搭建作为例子来介绍一下我们如何使用ubuntu搭 ...

  3. windows linux 共享鼠标,在Ubuntu/Windows下配置Synergy-键盘鼠标共享

    Synergy能做什么 Synergy是一款能够让使用者仅用一套键盘鼠标,在包括 Windows . Linux . Mac OS 等不同的系统上安装它,并且在设定好主从关系后,就能够同时操控多个电脑 ...

  4. linux网络唤醒,如何在Ubuntu Server 18.04中启用网络唤醒(WOL)

    网络唤醒(WOL)是一种行业标准协议,用于远程唤醒服务器.如果您管理着很多设备,因此不需要为了唤醒服务器而去数据中心.启用允许您远程执行此操作的功能,这样您可以更高效地工作. Ubuntu 系统默认没 ...

  5. amazon linux ami root 密码,Ubuntu Server的Amazon AMI映像的默认用户名是什么?

    问题描述 我刚刚在Amazon EC2上推出了一个Ubuntu Server AMI. 我连接得很好,但我没有看到任何告诉我默认登录凭据的内容. login as: ? 最佳解决思路 在EC2上,所有 ...

  6. linux新建samba账户,ubuntu上创建账户和samba用户

    系统环境: Linux ubuntu152 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64x86_ ...

  7. windows下PXE+TFTP+HTTP自动安装ubuntu server

    网络上的pxe安装linux多为centos,ubuntu server的pxe安装多有不正确,特写此教程 本教程经过本人多次验证无误 kickstart自动全新安装ubuntu server 软件版 ...

  8. ubuntu下nginx配置

    ubuntu下nginx配置 文章目录 ubuntu下nginx配置 初步分析 查看nginx.service 找到服务文件 查看服务文件 查看配置文件的加载路径 配置文件分析 全局指令块 http指 ...

  9. Ubuntu Server 18.04 与 MySQL 5.7

    [walker 过程] 安装 sudo apt install mysql-server mysql-client 在 /etc/mysql/mysql.conf.d/mysqld.cnf 文件里面修 ...

最新文章

  1. 如何处理异常? catch Exception OR catch Throwable
  2. UML建模系列文章总结
  3. 优秀Python学习资源收集汇总(强烈推荐)
  4. 【导纳分析】基于FPGA的导纳分析仪的verilog设计
  5. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
  6. BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列
  7. yaml文件解析:nodejs篇
  8. php做商品预告,预告:关于php制作桌面软件的方案与未来规划
  9. Linux系统管理(9)——系统状态监控命令top使用详解
  10. linux 执行play war,centos下执行war包
  11. H5面试题---HTTP状态码知道哪些
  12. 游戏修改器制作教程三:内存与Cheat Engine
  13. 送男孩子情人节礼物送什么?情人节必备礼物合集
  14. 跳舞的小人 和 盲文
  15. Linkedin如何避免封号及如何高效管理领英账号
  16. web应用程序安全性测试_Web应用程序导航菜单的可访问性
  17. 0005 键盘打字如何练成像黑客一样的飞速
  18. 分享99个PHP留言日记源码,总有一款适合您
  19. 《唐伯虎点秋香》中的超级对联
  20. 查看mysql表结构

热门文章

  1. fx5u mc协议_SLMP协议和MC协议
  2. c语言窗口最大化,使用SDL处理最大化的窗口
  3. 在虚幻引擎 4 中处理内存泄漏问题
  4. Metal:对 iOS 中 GPU 编程的高度优化的框架
  5. 一个技术开发者经常访问的网站
  6. mysql创建远程登陆用户并授权
  7. spring-boot ffmpeg 搭建一个音频转码服务
  8. java - 抽象类、接口、内部类
  9. sed、head、grep、tail、EOF
  10. 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅2】...