• CentOS 7 免密密钥登陆sftp服务 —— 筑梦之路


    为什么用sftp而不是ftp?

    sftp是使用ssh协议安全加密的文件传输协议,ftp在很多时候都是使用的明文传输,相对来说容易被抓包,存在安全隐患。

    需求说明

    1. 使用sftp代替ftp来做文件存储,锁定目录,不允许用户切换到未授权的目录

    2. 不允许sftp用户ssh登陆到服务器执行操作

    3. sftp用户使用密钥登陆

    如何实现呢?

    1. 创建sftpuser用户组和根目录

    1. # 创建一个sftpuser用户组
    2. groupadd sftpuser
    3. # 查看用户组
    4. groups sftpuser
    5. # 此目录及上级目录的所有者必须为root,权限不高于755,此目录的组最好设定为sftpuser
    6. mkdir /data/sftpuser
    7. chown -R root:sftpuser /data/sftpuser
    8. chmod -R 0755 /data/sftpuser

     2. 修改sshd_config配置

    1. #备份配置文件
    2. cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
    3. #修改端口为2222
    4. sed -i 's/#Port 22$/Port 2222/' /etc/ssh/sshd_config
    5. # 修改如下的配置,没有的就添加
    6. vim /etc/ssh/sshd_config
    7. # 注释这行
    8. # Subsystem sftp /usr/libexec/openssh/sftp-server
    9. Protocol 2
    10. # 密码认证方式
    11. PasswordAuthentication yes
    12. # 密钥认证方式
    13. PubkeyAuthentication yes
    14. RSAAuthentication yes
    15. Subsystem sftp internal-sftp -l info -f auth
    16. Match group sftpuser
    17. Chrootdirectory /data/sftpuser/%u
    18. Allowtcpforwarding no
    19. X11Forwarding no
    20. Forcecommand internal-sftp -l info -f auth

    # 凡是在用户组sftpuser里的用户,都可以使用sftp服务;使用sftp服务连接上之后,可访问目录为/data/sftpuser/username

    3. 使用实例

     # 举例说明

    # test是一个sftpuser组的用户,它通过sftp连接服务器上之后,只能看到/data/sftpuser/test目录下的内容

    # test2也是一个sftpuser组的用户,它通过sftp连接服务器之后,只能看到/data/sftpuser/test2目录下的内容

    1)创建用户和目录

    test目录的所有者必须是root,组最好设定为sftp,权限不高于755 

    1. # 创建一个目录并授权
    2. mkdir /data/sftpuser/test
    3. chmod 0755 /data/sftpuser/test
    4. chown root:sftpuser /data/sftpuser/test
    5. # 添加用户,参数-s /sbin/nologin禁止用户通过命令行登录
    6. useradd -g sftpuser -s /sbin/nologin test

    2)创建密钥

    1. # 在用户家目录下创建.ssh目录
    2. mkdir /home/test/.ssh
    3. # root用户生成公钥 私钥 直接回车即可
    4. ssh-keygen -t rsa
    5. # 拷贝公钥到用户家目录下
    6. cp /root/.ssh/id_rsa.pub /home/test/.ssh/authorized_keys
    7. # 给目录授权
    8. chown -R test.sftpuser /home/test

     3)在test目录下创建可以写的upload目录

    1. # 创建目录upload
    2. mkdir /data/sftpuser/test/upload
    3. # 给目录授权
    4. chown -R test:sftpuser /data/sftpuser/test/upload

    注意:sftp服务的根目录的所有者必须是root,权限不能超过755(上级目录也必须遵循此规则),sftp的用户目录所有者也必须是root,且最高权限不能超过755 

    4)测试验证

    1. # 重启sshd服务
    2. systemctl restart sshd
    3. # sftp命令行本机测试,用私钥免密登陆
    4. sftp -oPort=2222 -oIdentityFile=~/.ssh/id_rsa test@192.168.100.100
    5. # 在其他机器上使用私钥登陆,需要将私钥文件下载,权限600

     

     

  • 相关阅读:
    C++获取变量的类型和名称
    PHP:类的属性
    vue3+electron搭建桌面软件
    LCD12864 Control Sequence &Command Reference
    [附源码]java毕业设计校园拓展活动管理系统
    vite项目配置:后端希望能任意更改打包后的接口请求地址
    20221121将行车记录仪记录的MJPEG格式的AVI片段合并的MKV转换为MP4
    【C++ Primer Plus】第4章 复合类型
    StarkWare:关于Cairo的10个资源
    我的毕业设计思路
  • 原文地址:https://blog.csdn.net/qq_34777982/article/details/134413485