美文网首页
sftp 配置

sftp 配置

作者: 华阳_3bcf | 来源:发表于2018-08-13 14:58 被阅读0次

    Linux 系统默认安装了Openssh,sftp作为其中的一个组件也默认安装。我们获取private key之后可以直接sftp连接并使用,不需要修改默认配置。

    我们修改sftp配置的目的是:限制特定用户只能在特定目录的访问。比如:用户UserA,只能读取/data/usera,可以上传文件到/data/usera/upload。

    实操过程:

    测试环境:Azure VM, redhat 7.4

    用户部分

    创建用户

    useradd -s /sbin/nologin sftpuser
    

    设置用户密码

    passwd sftpuser
    

    创建sftp根目录,更改所有者和权限(这是sftp服务的特殊需求,必须这么改)

    mkdir /home/sftpuser
    chown root /home/sftpuser
    chmod 755 /home/sftpuser
    

    [注意]必须是root,权限最大是755,也可以改成750

    创建上传文件夹,改owner

    mkdir /home/sftpuser/upload
    chown sftpuser /home/sftpuser/upload
    chmod 755 /home/sftpuser/upload
    

    sshd部分

    配置sshd_config

    vi /etc/ssh/sshd_config

    修改内容如下:

    Subsystem sftp /usr/libexec/openssh/sftp-server  ## 这一行注释掉
    

    文件底部添加下面内容:

     Subsystem sftp internal-sftp
     Match User sftpuser
        ChrootDirectory /home/sftpuser
        ForceCommand internal-sftp
        PasswordAuthentication yes
        PermitTunnel no
        X11Forwarding no
        AllowTcpForwarding no
        AllowAgentForwarding no
    

    重启ssh服务

    systemctl restart sshd
    

    测试

    sftp sftpuser@localhost
    

    在用户登录测试过程中,可能会遇到如下错误:

    ​         Couldn't read packet: Connection reset by peer
    

    可能是目录权限导致了该问题, 例如 /a/b/c 每一级目录owner都是root,不仅仅是最后一级目录。

    特殊需求

    如果sftp 定义的主目录跟其他账号共用,直接改这个目录的owner会导致原账号不能用。
    解决办法:使用setfacl 命令,设置一个目录有多个owner,都有读写权限。例如:

    setfacl -R -m d:u:UserA:rwx /home/sftpuser
    

    [注] ACL 权限控制主要目的是提供传统的 owner,group,other 的 read,wirte,execute 权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,比如:某一目录权限为
    drwx------ 2 root root 4096 03-10 13:51./acldir
    用户 user 对此目录无任何权限因此无法进入此目录,ACL 可单独为用户 user 设置这个目录的权限,使其可以操作这个目录

    如果还不行,就只考虑upload目录,把它link 到UserA的工作目录:

    mkdir /home/sftpuser/upload
    chown sftpuser /home/sftpuser/upload
    chmod 755 /home/sftpuser/upload
    setfacl -R -m d:u:UserA:rwx /home/sftpuser/upload
    ln -s /home/sftpuser/upload /home/UserA/upload
    

    这样,两个账号就都可以对upload目录操作。

    [注] 反过来不行,即UserA的所有者目录,通过setfacl 给sftpuser 加权限,但sftp服务不能识别。
    还可以扩大目录权限到777,不用setfacl,这样也可以,具体如下。

    mkdir /home/sftpuser/upload
    chown sftpuser /home/sftpuser/upload
    chmod 777 /home/sftpuser/upload
    ln -s /home/sftpuser/upload /home/UserA/upload
    

    相关文章

      网友评论

          本文标题:sftp 配置

          本文链接:https://www.haomeiwen.com/subject/mnhubftx.html