SH 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那天我误将自己的账号从自己组里移除了,连sudo权限都没有了,后来用usermod -a -G caigan2015 caigan2015恢复自己组,用usermod -a -G sudo caigan2015恢复sudo权限

第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
 
完成啦!

Ubuntu Server如何配置SFTP的更多相关文章

  1. Ubuntu Server如何配置SFTP(建立用户监狱)

    Ubuntu Server如何配置SFTP(建立用户监狱)   SSH File Transfer Protocol是一个比普通FTP更为安全的文件传输协议.(参考资料:http://en.wikip ...

  2. [转]ubuntu server上网配置

    [转]ubuntu server上网配置 http://blog.sina.com.cn/s/blog_6c9d65a101011pyt.html 今天我的ubuntu server上不去网了,所以重 ...

  3. Ubuntu server 网络配置中遇到的问题

    Ubuntu server 网络配置中遇到的问题 图片中ip地址有可能和文字不符,请不要在意太多,知道原理即可 - 1.首先就是要配置ip地址 vim /etc/network/interfaces ...

  4. 在Ubuntu Server下配置LAMP环境

    1. 下载Ubuntu Server,地址https://www.ubuntu.com/download/server 2. 在虚拟机上安装Ubuntu Server.根据安装引导过程一步步安装,跟在 ...

  5. 实战Ubuntu Server上配置LXDE+VNC环境

    1.安装x-window 使用apt-get 安装 xorg sudo apt-get install xorg 如果提示以下内容,就说明需要update下源列表,使用sudo apt-get upd ...

  6. 在Ubuntu Server是配置iptables防火墙

    iptables 是一个安装在Ubuntu Server上的默认防火墙.在正常的ubuntu安装过程中,iptables是被安装上了的,但是它默认允许所有的流量(不管防火墙是否是无效的) 关于ipta ...

  7. ubuntu server 1604 配置网络信息

    对于新安装的linux 服务器(ubuntu server 1604)   一,配置网络 连接网线与路由器 查看系统的网卡信息 ifconfig -a //列出所有的网卡信息,不管启用还是没有启用的 ...

  8. Ubuntu Server 14 配置

    语言 在虚拟机中安装了Ubuntu Server. Ubuntu Server只有控制台,没有图形界面.要在控制台下安装中文支持很麻烦.所以直接设置为英文,反正我看得懂. 在安装的时候必须将" ...

  9. [转载]Ubuntu Server下配置UTF-8中文环境

    转载自:http://www.gaojinbo.com/ubuntu-server%E4%B8%8B%E9%85%8D%E7%BD%AEutf-8%E4%B8%AD%E6%96%87%E7%8E%AF ...

随机推荐

  1. 在CentOS里使用MySQL Connector/C++

    操作系统版本:CentOS6 64位 1,安装boost库.因为MySQL Connector/C++使用了boost库,所以必须先安装boost库,我们才能使用MySQL Connector/C++ ...

  2. vim配置及插件安装管理(超级详细)[转]

    1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...

  3. 20150914 异常语句 math的方法 去空格 索引

    异常语句 int cuo = 0; Console.WriteLine("请输入:"); string s = Console.ReadLine(); try { DateTime ...

  4. JavaScript 札记(数据类型和变量、)

    1. 变量名由:字母.下划线.$.数字组成,只可以字母.下划线.$开头. 2.JavaScript区分大小写! 3.命名规范:匈牙利命名法(不论是变量名还是函数名). 4.基本类型(3种):字符串.数 ...

  5. Suricata+Barnyard2+Base的IDS前端Snorby

    搭建基于Suricata+Barnyard2+Base的IDS前端Snorby 4.Barnyard2:http://www.securixlive.com/barnyard2/download.ph ...

  6. make与makefile

    Linux makefile 教程 非常详细,且易懂 make与makefile GNU make体系Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格 ...

  7. 虚拟化之vmware-vcenter

    VMware ESXi.VMware vCenter Server 和 vSphere Client,它们分别是 vSphere 的虚拟化层.管理层和接口层. vcenter server 插件和vc ...

  8. DW(一):大数据DW架构参考

    DW一直以来是企业信息与决策支持系统的核心组件,随着各类日志.社交.传感等非结构化数据的加入,企业内部数据按指数级增长,传统DW已经达到一个关键临界点——需要大量的资源投入到硬件.优化.支持和维护中, ...

  9. HBase(七): HBase体系结构剖析(下)

    目录: write Compaction splite read Write: 当客户端发起一个Put请求时,首先根据RowKey寻址,从hbase:meta表中查出该Put数据最终需要去的HRegi ...

  10. 【java】 java 实现mysql备份

    使用java实现mysql的备份: public class MySQLBackUp { /** * Java代码实现MySQL数据库导出 * * @author GaoHuanjie * @para ...