限制 Linux 用户访问他拥有的文件

Phi*_*ipp 24 security linux file-permissions shared-hosting

想象一下共享虚拟主机公司的服务器设置,其中多个(约 100 个)客户可以访问单个服务器。

许多网络“软件”建议使用chmod 文件 0777。我很担心我们的客户不明智地遵循这些教程,向我们的其他客户开放他们的文件。(我cmod 0777自己当然不会无谓地使用!)有没有一种方法可以确保客户只能访问他们自己的文件并防止他们访问其他用户的世界可读文件?

我查看了AppArmor,但它与一个进程紧密耦合,该进程在该环境中似乎失败了。

Cri*_*itu 34

把一个限制不可改变的外部世界和受保护的文件之间,例如目录

/
 ?? bin
 ?? home
 ?  ?? joe <===== restricted and immutable
 ?     ?? joe <== regular home directory
Run Code Online (Sandbox Code Playgroud)

/home/joe/restricted/public_html

受限意味着只有用户和 Web 服务器可以读取它(例如模式0700/0750或某些ACL)。

不变性可以通过chattr +i或通过将所有权更改为类似root:joe.

在 Ubuntu 上创建该层次结构的一种简单方法是编辑/etc/adduser.conf并设置GROUPHOMESyes.


Den*_*lte 15

您可能需要考虑一个选项(取决于您想为此做多少工作)。

正如其他人已经发布的那样,“通常”您无法阻止具有 shell 访问权限的人读取世界可读文件。

但是,您可以将它们 chroot 到他们自己的家中,基本上限制 shell 访问,首先,仅您想要的根目录(也称为主目录),其次,防止用户执行您不希望他们执行的所有内容。

当我有一个用户可以访问网络文件时,我做了一个类似的方法,但我不想让他看到网络文件夹之外的其他文件。

这确实有很多开销,设置起来很混乱,每次我更新一些东西时,它都会坏掉。

但是今天,我认为您可以使用OpenSSH chroot 选项轻松实现:

维基书籍 OpenSSH

  • 那是特定于实现的。ARCHLINUX 有一个特定的 arch-chroot 命令,负责处理所有额外的绑定安装等 https://wiki.archlinux.org/index.php/Change_Root#Change_root (2认同)

HBr*_*ijn 11

我发现 POSIX 访问控制列表允许您,作为系统管理员,通过覆盖常规的用户组其他文件系统权限来保护您的用户免受他们自己最无知的影响,而没有太多机会破坏任何重要的东西.

例如,如果您 (fi) 需要主目录可以被全世界访问,它们可能特别有用,因为 webcontent 需要在~/public_html/. (尽管使用 ACL,您现在可以执行相反的操作,删除所有人的访问权限并为 apache 用户使用特定的有效 ACL。)

是的,知识渊博的用户可以再次删除/覆盖它们,只是不常见到不太可能,而那些可以的用户通常不是方便chmod -R 777 ~/的用户,对吧?

您需要使用acl挂载选项挂载文件系统:

 mount -o remount,acl /home
Run Code Online (Sandbox Code Playgroud)

在许多发行版中,默认设置是创建用户组,每个用户都有自己的主要组,我将所有用户设置在次要组中,名称不具想象力users

使用 ACL 现在可以轻松防止其他用户访问主目录:

前:

 chmod 0777 /home/user* 

 ls -l /home/user*
 drwxrwxrwx.  2 user1  user1  4096 Jul 11 15:40 user1
 drwxrwxrwx.  2 user2  user2  4096 Jul 11 15:24 user2
Run Code Online (Sandbox Code Playgroud)

现在将组成员的有效目录权限设置users0无读取、写入或访问权限:

 setfacl setfacl -m g:users:0 /home/user*

 ls -l 
 drwxrwxrwx+  2 user1  user1  4096 Jul 11 15:40 user1
 drwxrwxrwx+  2 user2  user2  4096 Jul 11 15:24 user2
Run Code Online (Sandbox Code Playgroud)

+标志表示的ACL设置有存在。并且getfacl可以确认:

getfacl /home/user1
getfacl: Removing leading '/' from absolute path names
# file: home/user1
# owner: user1
# group: user1
user::rwx
group::rwx
group:users:---
mask::rwx
other::rwx
Run Code Online (Sandbox Code Playgroud)

group:users:---结果表明,组有效无访问权限,尽管另一个是普通权限other::rwx

并以 user1 身份进行测试:

[user1@access ~]$ ls -la /home/user2
ls: cannot open directory /home/user2: Permission denied
Run Code Online (Sandbox Code Playgroud)

共享系统上的第二个常见解决方案是让自动挂载程序按需安装主目录,这是专用于 shell 访问的服务器。这远非万无一失,但通常只有少数用户会同时登录,这意味着只有这些用户的主目录是可见和可访问的。

  • 什么是*“fi”*?我不建议使用首字母缩略词或缩写词,除非它们是经典的,比如“eg”、“ie”、“etc”,也许还有 OP。 (5认同)