我希望有人能帮助我解决这个问题
“尝试设置具有有限访问权限的 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.创建新用户
- 登录为
root
- 创建了一个名为
user-sftp-only
adduser user-sftp-only
- 我可以检查用户已通过运行创建
compgen -u
user-sftp-only
位于列表底部- 我还可以通过运行以下命令查看用户的路径和 shell 访问:
grep user-sftp-only /etc/passwd
输出:user-sftp-only:x:1004:1007:,,,:/home/user-sftp-only:/bin/bash
2.赋予新用户root权限
- 赋予新用户
user-sftp-only
root权限 gpasswd -a user-sftp-only sudo
- 登出为
root
3. 创建新目录
- 登录为
user-sftp-only
public
创建一个名为的新目录newsletters
:cd /srv/users/serverpilot/apps/test-app/public/
- 其次是:
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. 创建新组
- 登录为
user-sftp-only
sudo groupadd group-sftp-only
- 我可以检查团体已通过运行创建
compgen -g
group-sftp-only
位于列表底部
笔记: 我注意到我的新用户user-sftp-only
也在这个列表中?
6. 将用户添加到组
- 登录为
root
- 将用户添加
user-sftp-only
到名为group-sftp-only
这样做意味着不再可能以用户身份通过 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
- 登录为
root
nano /etc/ssh/sshd_config
- 注释掉这一行:
#Subsystem sftp /usr/lib/openssh/sftp-server -l INFO
在最底部添加了
sshd_config
这个:Subsystem sftp internal-sftp Match group group-sftp-only ChrootDirectory %h ForceCommand internal-sftp
9. 重启 SSH
- 仍以以下身份登录
root
service ssh restart
10.修改权限
- 仍以以下身份登录
root
- 这是用户的主目录
user-sftp-only
/srv/users/serverpilot/apps/test-app/public/newsletters
使用它来确保主目录由用户和组拥有
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