创建一个只能访问特定文件夹的 SSH 用户

Foo*_*ish 62 ssh permissions user ubuntu

我安装了SSH,但是我发现如果我使用我的原始帐户登录Ubuntu,它的权限太多了。

我想限制用户只拥有 Ubuntu 中特定文件夹的权限。如何配置这样的用户?

whi*_*ark 71

这很简单。只需创建一个新用户,并将其主目录设置为您需要他访问的目录(此命令必须sudo在 root shell下或在 root shell 中运行):

adduser --home /restricted/directory restricted_user
Run Code Online (Sandbox Code Playgroud)

这将创建一个用户restricted_user,目录/restricted/directory,然后设置目录的权限,以便用户可以写入它。默认情况下,它无法写入任何其他目录。

如果您已经拥有该目录,则可以运行adduser带有--no-create-home附加选项的命令并手动设置权限(也具有 root 权限),例如:

chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory
Run Code Online (Sandbox Code Playgroud)

如果您需要使该用户无法访问世界可写的目录,则有两种变体。

1) 如果您想为用户提供交互式 shell 会话,请考虑按照本手册创建 chroot jail(在您的/restricted/directory.

之后,将以下内容添加到您的sshd_config

Match user restricted_user
  ChrootDirectory /restricted/directory
Run Code Online (Sandbox Code Playgroud)

2)如果您只需要他在他的连接端点和您的主机之间复制文件,一切都会容易得多。在您的末尾添加这些行sshd_config

Match user restricted_user
  ForceCommand internal-sftp
  ChrootDirectory /restricted/directory

Subsystem       sftp    internal-sftp
Run Code Online (Sandbox Code Playgroud)

然后Subsystem sftp /usr/lib/openssh/sftp-server通过#在开头放置一个井号 ( ) 符号来注释掉。

重新启动您的 SSH 服务器后(它不会在重新启动时终止交互式会话,因此即使您配置错误也是安全的;此外,在您检查是否仍然能够登录之前不会关闭正在运行的会话),一切都应该正常工作如预期。

  • 您应该在“Match”块上方的第二个示例中编写“Subsystem sftp internal-sftp”行。否则 ssh 将打印出错误并且不启动。 (4认同)
  • 剧透警告:不适用于 scp (3认同)
  • 我尝试过,但似乎我仍然可以 cd .. 并浏览上层目录。当我在上层目录中使用vi a.txt时,显示:按回车或命令继续,并且无法退出vi (2认同)
  • 一切正常,除了我没有写权限。如何为此受限目录设置写权限。如果我使用 chmod 775,用户将无法再登录。 (2认同)

xpt*_*xpt 15

创建不能离开给定目录(例如,到上层目录等)的受限用户,并且有一组受限/挑选的命令可以使用的最简单方法是使用受限 Shell。参考:

http://man.he.net/man1/rbash

首先,创建一个名为rbash(以 root 用户身份运行)的符号链接。

ln -s /bin/bash /bin/rbash
Run Code Online (Sandbox Code Playgroud)

然后只需使用此受限 Shell 创建一个普通用户,并将其主目录设置为所需的文件夹:

useradd -s /bin/rbash -d /home/restricted_folder username
Run Code Online (Sandbox Code Playgroud)

即使没有 Restricted Shell,如果您明确没有将此用户添加到 sudoer 的列表或任何特殊组中,则默认情况下它将受到限制。

使用受限外壳,禁止或不执行以下操作:

  • 用 cd 改变目录

  • 设置或取消设置 SHELL、PATH、ENV 或 BASH_ENV 的值

  • 指定包含 / 的命令名称

  • 指定包含 / 作为参数的文件名。内置命令

  • 指定包含斜杠的文件名作为 hash 内置命令的 -p 选项的参数

  • 在启动时从 shell 环境导入函数定义

  • 在启动时从 shell 环境解析 SHELLOPTS 的值

  • 使用 >、>|、<>、>&、&> 和 >> 重定向运算符重定向输出

  • 使用 exec 内置命令将 shell 替换为另一个命令

  • 使用 -f 和 -d 选项向 enable 内置命令添加或删除内置命令

  • 使用 enable 内置命令启用禁用的 shell 内置命令

  • 为命令内置命令指定 -p 选项

  • 使用 set +r 或 set +o 限制关闭受限模式。

在任何启动文件之后强制执行这些限制

此外/可选地,要将用户限制为使用一组有限/精选的命令,您可以为该用户创建一个只读的 .bash_profile,使用

PATH=$HOME/bin
Run Code Online (Sandbox Code Playgroud)

并将您允许的任何命令符号链接到该用户的 ~/bin 文件夹中:

ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm
Run Code Online (Sandbox Code Playgroud)

等等。

HTH