zoukankan      html  css  js  c++  java
  • Ubuntu Server如何配置SFTP

    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),而且需要
  • 相关阅读:
    优秀程序员的45个习惯
    linq 解决winForm中控件CheckedListBox操作的问题。
    培养人脉的100个技巧
    如果可以,我想谁也不喜欢跳槽
    真我的风采
    c# 正则表代式的分组和匹配模式
    Hishop 网店系统,去版权,注册机,商业版授权
    IIS7 下 AjaxPro 失效, AjaxPro不能用,的解决办法
    Windows Server 2008 上 sql server 2008 无法连接问题
    环保,IT也需要环保,世界需要环保.
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206968.html
Copyright © 2011-2022 走看看