当前位置: 首页>>技术问答>>正文


如何防止新用户做任何危险的事情?

, , ,

问题描述

我最近在我的服务器上安装了Ubuntu服务器,以尝试将linux作为新用户。我按照教程如何设置Web服务器,说我需要chmod 777 Web服务器目录,以便可以写入。

无论如何,我为一个家伙创建了一个新帐户,让他可以看到我放在他家里的服务器上的一些文件:

adduser francis

创建帐户后,我检查了他拥有的访问权限

groups francis

它说“弗朗西斯:弗朗西斯”,所以不是我想的问题,ubuntu默认没有将他包括在任何组中,这是有道理的,它创造了他没有额外的权限security-wise,所以一切都很好,花花公子。一个星期后,我发现绝对而且完全恐怖,我发现即使他不能做像SUDO这样的事情或者在系统目录中乱七八糟,他也可以完全访问服务器上的其他所有内容。例如,他对/var /www中的我的Web服务器文件具有完全的读/写访问权限(因此存储在php configs文件中的密码等),即使该目录不在他的主目录中,我从未将他添加到任何可能的组中访问该目录,在进行adduser之后,我也没有授予他任何特殊权限。

无论如何,这里发生了什么?如何杀死他对任何重要内容的访问权限?他不应该能够访问/media或/var /www之类的东西。我认为默认情况下,新用户不会做任何危险或窥探他们不应该做的事情。

总而言之,我只需要允许他访问我手动指定+目录的目录,他需要正常运行的目录(他的家庭目录,vim,nano等……)

谢谢

最佳解决方案

这是设计的。更糟糕的是。 chmod 777意味着……“我希望所有者,他的团队中的任何人,以及任何人都拥有读取,写入和执行权限”

这太可怕了。

对于Web服务器,777不是最佳选择。 755(所有者具有完全权限组,其他人具有读取+执行)是一个常见的默认值,但是根据您所说的至少read-write,或read-write执行所有者(Web服务器用户),也许是组,以及没有用户权限。有关serverfault上适当权限级别的更完整问题,但考虑640或740之类的问题。

也就是说,您还可以将用户置于他自己的小世界中 – 设置chroot以使用户保持在系统中自己的空间。有这样的指南漂浮 – 例如oli’s excellent answer here,根据您的需要可能是一个选项。

次佳解决方案

从本质上讲,它会像这样崩溃:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

因此,读取权限仅为4,读取和写入将为6,读取和执行将为5,所有(读取,写入,执行)为7.这是您为所有者,所有者组计算权限八位字节值的方式或者每个人。

将这些权限与chmod应用于文件或目录位置时,上面计算的数字将像这样应用,每个字符集对应所有者,组和所有人:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

因此,如果我想给自己和我的小组读取,写入和执行我拥有的文件夹的权限,但我不希望每个人都能阅读它,我会使用:

$ chmod 770 myDirectory

有关更多信息,请查看man page for chmod

$ man chmod

第三种解决方案

正如其他人所提到的,你不应该将权限设置为777

这是我使用的有用的参考表。

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

第四种方案

为了与您登录的人共享文件,您不需要特别做任何事情。在默认的Debian安装中,用户可以访问彼此的主目录。

例如,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

对于我系统上的任何用户,我的主目录上的权限为read(r)和access(x)。只有我还有写(w)访问权限。

此外,Ubuntu上的默认umask默认情况下用户创建的文件和目录是全局可读的。如果您不想要,可以将umask设置为077

这意味着在默认设置中,如果用户you想与我共享文档~/README.txt,那么you无需做任何事情。我可以简单地看一下:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

我无法编辑或删除该文件,但我可以将其复制到我具有写入权限的位置。然后我拥有副本:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

正如我在another answer on AskUbuntu中所解释的那样,大多数系统默认是全局可读的,这是有充分理由的。但是,在共享系统上,使non-owners无法访问主目录可能是有意义的:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

……因为许多用户显然不知道默认值 – QED ;-)。但是,让用户意识到文件权限不保护秘密会更明智。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2871.html,未经允许,请勿转载。