我创建了一个生命周期非常短的临时目录,我想在一些用户之间共享几个小时:/some/path/tmp
不幸的是我已经启动了sudo chown 777 -R /tmp
而不是sudo chown 777 -R tmp
,所以我的/tmp
文件现在完全公开了。
现在完全公开了,是否存在安全问题?我应该将其改回更安全的设置吗?什么是正确的权限/tmp
?
答案1
的正常设置为/tmp
1777,ls
显示为drwxrwxrwt
。也就是说:完全开放,但只有文件的所有者才能删除它(这就是这个额外t
位对目录的含义)。
使用模式 777的问题/tmp
是其他用户可以删除您创建的文件并替换他们选择的内容。
如果您的/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
以发现 root 拥有的套接字,您可能需要这些套接字才能使其可供世界访问。也可能有其他系统用户拥有的套接字(例如,用于与系统总线通信);探索find /tmp -type s ! -user $UID
($UID
您的用户 ID 在哪里)。
答案2
/tmp
并/var/tmp
应拥有所有人的读、写和执行权限;但您通常还会添加粘滞位 ( o+t
),以防止用户删除属于其他用户的文件/目录。所以chmod a=rwx,o+t /tmp
应该有效。
至于递归地更改权限......只要文件和目录的所有者/组保持不变,就不应该有太大的问题。但是您也许可以通过删除其他人甚至整个组的权利来更改/tmp
(不是 /tmp 本身)下所有内容的权限,以确保用户的隐私。rx
Find 是做到这一点的好方法。作为 root,执行以下操作:
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= {})
答案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 机器。