创建一个新的SSH用户帐户,仅用于访问特定文件夹。

我在Ubuntu 16.04上运行着一个Apache2服务器,目前每次访问特定文件夹中的项目文件时,我都需要使用root用户来运行PHP函数并编辑一些文件。完成后,我需要在终端中运行chown -R www-data:www-data .命令,因为运行PHP函数后,文件所有者将变为user:user (root:root)。我需要做的是:
  1. 为我的服务器创建一个新用户
  2. 当通过SSH访问我的服务器时,这个用户将自动位于特定文件夹中
  3. 授予该用户在此特定文件夹内执行任何操作的权限
例如,创建一个名为tonya的用户,当有人使用用户名tonya通过ssh sonya@server.com访问服务器时,他将被重定向到/var/www/specific_folder,用户tonya可以在此文件夹中执行任何操作,并且当tonya将PHP文件的所有者或文件夹设置为tonya:www-data时,它将像我设置文件所有者为www-data:www-data时一样工作。

请参阅https://askubuntu.com/questions/46331/how-to-avoid-using-sudo-when-working-in-var-www - Panther
1个回答

你应该能够用这个完成。
adduser --home /var/www/specific_folder --shell /bin/bash --no-create-home --ingroup www-data --ingroup ssh tonya
  • adduser 用于添加用户

  • --home 指定家目录,即用户登录时所在的位置

  • --shell 用于指定 shell,默认情况下通常是 /bin/sh,不如 /bin/bash 用户友好

  • --no-create-home 不会创建家目录,因此必须使用已存在的目录

  • --ingroup 将用户添加到指定的组中

  • 最后一个参数是用户名

您可以使用以下指南将用户设置为受限制的:

请记住,即使你把一个用户关进监狱,他们很有可能逃脱。如果你给一个用户访问你的系统的权限,那么基本上就等于给了他们root权限,因为一旦他们拥有shell访问权限,几乎总是可以获取root权限。设置一个监狱很可能能阻止普通用户做出太过危险的行为,但对于恶意用户来说,几乎没有任何作用。

为什么有两个内部群体?这个用户怎么能获取我的根访问权限? - simple guy
一个用于ssh的内部组,一个用于www-data,我并不是说他们能够获得root访问权限,但如果你不信任他们,就不应该允许用户进入你的系统,因为一旦他们在你的系统上获得了shell访问权限,他们基本上已经完成了50%的获取root权限的过程。每天都会发现新的漏洞,因此你永远不能认为一个系统是安全的。 - Desultory
@Desultroy 当我将我的php文件所有者从www-data:www-data更改为tonya:www-data时,它会给我一个文件权限错误,当我尝试从浏览器访问php文件时。 - simple guy
你应该将文件的权限更改为基于组而不是基于所有者。我不知道php是否需要执行权限,但它肯定需要读取权限。权限可以在这里解释:https://help.ubuntu.com/community/FilePermissions - Desultory