问题描述
我最近在我的服务器上安装了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 ;-)。但是,让用户意识到文件权限不保护秘密会更明智。