尝试设置具有有限访问权限的 SFTP 用户

尝试设置具有有限访问权限的 SFTP 用户

我希望有人能帮助我解决这个问题

“尝试设置具有有限访问权限的 SFTP 用户。”

我在 DigitalOcean 服务器上运行 Ubuntu 16.04.2 x64。我已将此发布在DigitalOcean 论坛也。

当前设置

  • 我已经使用 ServerPilot 设置了我的服务器。
  • system user称为serverpilot
  • serverpilot具有 root 权限,
  • home文件夹位于:/srv/users/serverpilot
  • public文件夹位于:/srv/users/serverpilot/apps/test-app/public/

我想做的事

我想添加第二个用户,但限制该用户可以做的事情:

  • 仅访问名为 的单个文件夹newsletters,它将位于该public文件夹中。
  • 用户需要能够通过 SFTP 上传、删除和重命名文件
  • 用户必须无法离开newsletters, 文件夹

这是该文件夹的完整路径newsletters/srv/users/serverpilot/apps/test-app/public/newsletters

我目前所做的

我已遵循本指南如何限制用户进入特定目录?由 Maxamilian Demian (@Maxoplata) 撰写,Jonathan Tittle (@jtittle) 给出了精彩的回复。

但是,我仍然无法通过SFTP

我列出了我所做的所有步骤 - 希望更有经验的人能够发现我的错误!

1.创建新用户

  1. 登录为root
  2. 创建了一个名为user-sftp-only
  3. adduser user-sftp-only
  4. 我可以检查用户已通过运行创建
  5. compgen -u
  6. user-sftp-only位于列表底部
  7. 我还可以通过运行以下命令查看用户的路径和 shell 访问:
  8. grep user-sftp-only /etc/passwd输出:

    user-sftp-only:x:1004:1007:,,,:/home/user-sftp-only:/bin/bash
    

2.赋予新用户root权限

  1. 赋予新用户user-sftp-onlyroot权限
  2. gpasswd -a user-sftp-only sudo
  3. 登出为root

3. 创建新目录

  1. 登录为user-sftp-only
  2. public创建一个名为的新目录newsletters
  3. cd /srv/users/serverpilot/apps/test-app/public/
  4. 其次是:
  5. sudo mkdir newsletters

4.检查目录权限

仍然在public上一步的文件夹中,我运行

$ ls -al
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar  7 15:26 .
drwxr-xr-x+ 3 serverpilot serverpilot 4096 Mar  3 16:22 ..
-rw-r--r--+ 1 serverpilot serverpilot 3393 Mar  3 16:22 index.php
drwxrwxr-x+ 2 root        root        4096 Mar  7 15:26 newsletters

通过阅读各种 DigitalOcean 帖子,我知道我需要创建一个组并将我的新用户分配user-sftp-only给该组,然后更改root root为我的用户和组的名称。

5. 创建新组

  1. 登录为user-sftp-only
  2. sudo groupadd group-sftp-only
  3. 我可以检查团体已通过运行创建
  4. compgen -g
  5. group-sftp-only位于列表底部

笔记: 我注意到我的新用户user-sftp-only也在这个列表中?

6. 将用户添加到组

  1. 登录为root
  2. 将用户添加user-sftp-only到名为group-sftp-only
  3. 这样做意味着不再可能以用户身份通过​​ SSH 访问user-sftp-only

    usermod -g group-sftp-only -d /srv/users/serverpilot/apps/test-app/public/newsletters -s /sbin/nologin user-sftp-only
    
    • -g指定组名称
    • -d指定用户的主目录
    • -s指定 shell 访问权限(/sbin/nologin 表示此用户禁用 SSH)

7. 验证用户更改

登录为root

$ grep user-sftp-only /etc/passwd
user-sftp-only:x:1001:1004:,,,:/srv/users/serverpilot/apps/test-app/public/newsletters:/sbin/nologin

8.修改 SSH 配置以允许 SFTP

  1. 登录为root
  2. nano /etc/ssh/sshd_config
  3. 注释掉这一行:
  4. #Subsystem sftp /usr/lib/openssh/sftp-server -l INFO
  5. 最底部添加了sshd_config这个:

     Subsystem sftp internal-sftp
        Match group group-sftp-only
        ChrootDirectory %h
        ForceCommand internal-sftp
    

9. 重启 SSH

  1. 仍以以下身份登录root
  2. service ssh restart

10.修改权限

  1. 仍以以下身份登录root
  2. 这是用户的主目录user-sftp-only
  3. /srv/users/serverpilot/apps/test-app/public/newsletters
  4. 使用它来确保主目录由用户和组拥有

    chown -R user-sftp-only:group-sftp-only /srv/users/serverpilot/apps/test-app/public/newsletters
    

11. 验证所有权变更

仍以以下身份登录root

$ cd /srv/users/serverpilot/apps/test-app/public/`
$ ls -al
drwxr-xr-x+ 3 serverpilot    serverpilot     4096 Mar  7 15:26 .
drwxr-xr-x+ 3 serverpilot    serverpilot     4096 Mar  3 16:22 ..
-rw-r--r--+ 1 serverpilot    serverpilot     3393 Mar  3 16:22 index.php
drwxrwxr-x+ 2 user-sftp-only group-sftp-only 4096 Mar  7 15:26 newsletters

$ cd /srv/users/serverpilot/apps/test-app/public/newsletters
$ ls -al
drwxrwxr-x+ 2 user-sftp-only group-sftp-only 4096 Mar  7 15:26 .
drwxr-xr-x+ 3 serverpilot    serverpilot     4096 Mar  7 15:26 ..

这就是我要做的事情。但是,我无法user-sftp-only通过以下方式以新用户身份登录SFTP

答案1

tail -f /var/log/syslog

尝试通过 sftp 进入用户专用 sftp 账户,注意成功/失败信息

如果失败,请添加以下行/etc/ssh/sshd_config

AllowUsers user-sftp-only

然后运行:

sudo service sshd restart

相关内容