/ tmp的正确权限是什么?我无意中将其全部设置为公开


78

我受了虐待sudo

我创建了一个寿命很短的临时目录,我想在几个用户之间共享几个小时...然后我将此目录命名为 /some/path/tmp

不幸的是,我启动的sudo chown 777 -R /tmp不是sudo chown 777 -R tmp,因此我的/tmp文件现已完全公开。

/tmp经常(每天,几乎每小时)经常使用通用文件来存储短寿命文件,脚本和许多脚本。

现在已经完全公开了吗?我应该将其更改回更安全的设置,还是像Debian或Ubuntu发行版的常用默认设置一样-(我不知道它们是哪个)?正确的权限是/tmp什么?


请注意,我在最初的答案中忘记了一些重要的事项:X11套接字需要可公开访问,否则您将无法启动新的GUI应用程序。我已经更新了答案。
吉尔斯2013年

chown还是chmod
Melebius

@Melebius我对您的问题感到有些困惑:我没有提及chmod。chown(类似于ch-own)是关于文件所有权的,该用户拥有文件。chmod(例如ch-modifify)更多地涉及谁可以执行,内部写入或读取文件内容。
斯蒂芬·罗兰德'18

2
@StephaneRolland是的,这就是让我感到困惑的地方。您可以使用chown 777设置ID 777的文件所有权。但是,所有答案(包括已接受的答案)都可以使用chmod。由于所有用户都将所有用户(所有者,组,其他)的权限设置为相同的值,因此文件所有权的大多数影响都变得无关紧要。但是,更正结果的正确命令sudo chown 777 -R /tmp应为sudo chown root -R /tmp
Melebius

Answers:


117

的正常设置为/tmp1777,ls显示为drwxrwxrwt。那就是:敞开的,只是只有文件的所有者才能删除它(这t是目录的额外含义)。

/tmp模式777 的问题在于,另一个用户可以删除您创建的文件并替换其选择的内容。

如果您/tmp是tmpfs文件系统,则重新启动将还原所有内容。否则,运行chmod 1777 /tmp

此外,许多文件/tmp需要私有。但是,至少一个目录至关重要地需要是世界可读的:/tmp/.X11-unix,并且可能还有一些其他类似的目录(/tmp/.XIM-unix,等等)。以下命令通常应该设置正确:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

即将所有文件和目录设为私有(删除组和其他用户的所有权限),但使X11套接字对所有人开放。这些套接字上的访问控制由服务器而不是文件许可权实施。可能还有其他套接字需要公开使用。运行find /tmp -type s -user 0以发现根目录拥有的套接字,您可能需要使该套接字可以通向世界。也可能有其他系统用户拥有的套接字(例如,与系统总线进行通信);浏览方式find /tmp -type s ! -user $UID$UID您的用户ID 在哪里)。


1
你能再解释第二个chmod吗?
Bartlomiej Lewandowski

@BartlomiejLewandowski go-rwx:没有组和其他人的权限。这会将权限设置为rwx------(例如,自以来创建的文件chmod可能最终会获得较少的权限rw-------)。换句话说,这些文件只能由其所有者访问。/tmp/.[!.]*是要包含通常存在于中的点文件/tmp
吉尔斯2013年

@BartlomiejLewandowski:chmod -go-rwx:将“ rwx”权限设置为所有者和组。r =读取,w =写入,x =执行(对于文件)或输入/遍历(对于目录)。777 = rwxrwxrwx(右侧部分可以看成是:“设置'r'设置'w'设置'x',设置'r'设置'w'设置'x',设置'r'设置'w'设置'x '”,用二进制表示为“ 111111111”(设置为1,未设置为0),而用二进制表示的“ 111111111”用八进制表示为“ 777”(八进制= 3位的组,每个组的值为0至7)。如果为“ rwxr-xr--”,则为“ 111101100”,八进制为“ 754”
Olivier Dulac

2
+ t称为粘性位。这就是使所有者以外的任何人都无法删除文件的方法,即使权限为777。粘性位最初是让内核在退出程序时将其保留在内存中,因此下次运行时不必从磁盘中提取它们。我们正在谈论PDP11天
。...– kurtm

1
@GabrielFair我将使用通配符的命令替换为使用find的命令,这不会遇到该问题。
吉尔斯

10

/tmp/var/tmp应拥有所有人的读写,执行权限;但是您通常还会添加粘滞位(o+t),以防止用户删除属于其他用户的文件/目录。所以chmod a=rwx,o+t /tmp应该工作。

至于以递归方式更改权限...只要所有者/组保持不变,就象文件和目录一样,那不应该是什么大问题。但是您可能可以/tmp通过删除rx其他人(可能是该组)的权限来更改其下所有内容的权限(而不是/ tmp本身),以确保用户的隐私。

查找是执行此操作的好方法。作为根,请执行以下操作:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})

在典型的桌面系统上,最好也使/tmp/.X11-unix/*世界可读,否则您将无法再启动X应用程序。
吉尔斯2013年

chmod a=rwX,o+t /tmp -R应该做find魔术。
dhill

3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

在CentOS 5.9机器上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.