删除linux的/tmp目录引起的不能正常登录系统的故障

昨天无意查看到/tmp目录竟占了400M的空间,看到里面全是一个乱七八糟的东西。联想到windows的temp目录的作用。就把/tmp目录删除了,想系统启动时可能就重新建了这个目录。结果系统只能启动到控制台模式;

又用mkdir /tmp建了这个目录,结果系统在控制台模式登录和X windows模式登录状态间反复切换,不能进入系统;

后来在网上查了一下,改变了/tmp目录的权限为:chmod a+rwx,o+t /tmp,即为:

drwxrwxrwt    4 root     root         4096  3月 16 10:18 tmp

系统恢复正常。

具体分析原因如下:

正常情况下,/tmp目录的权限是:

drwxrwxrwt    4 root     root         4096  3月 16 10:18 tmp

它表示所有的用户都可以在其中建立文件(或目录),即任何人都对tmp目录拥有“写权限”,但是除非tmp目录的所有者和文件的所有者,其他人不能在/tmp目录下改写(或删除、重命名)别人的文件(或目录)。

如果你删除了系统的tmp目录,又用mkdir /tmp建立这个目录,那么根据umask的规定,默认建议的目录的权限是:

drwxr-xr-x    3 root     root         4096  3月 16 11:31 tmp

那么其他人就不能在/tmp目录下建立文件了;这时,系统将出现故障(如:不能启动或不能进入x windows);

如果你用:chmod a+w /tmp改变/tmp目录的权限为:

drwxrwxrwx    3 root     root         4096  3月 16 11:34 tmp

那么任何人都可以删除别人在/tmp目录下的文件了,包括删除root在/tmp目录下建立的文件;

如果用:chmod o+t /tmp为/tmp目录加了粘滞位t,那么其他人就不能在tmp目录下改写(或删除、重命名)别人的文件(或目录),起到了/tmp目录的作用。

另外,“suid”和“sgid”特殊标志位可以使普通用户运行一个程序,使这个程序访问或修改只有文件所有者或root用户才能直接访问或修改的文件,当然前提是这个普通用户对这个文件的某个部分拥有相应的权限。

详情见转帖:linux的权限和所有权模型(转帖): http://java.learndiary.com/diaries/3110.jsp

本人的系统是redhat linux9.0+amd duron 700。在网上查到有人说删除某些linux发行版本的/tmp目录下的文件会使系统不能正常工作,也不知道是不是真的。不过,这次也再一次给我一个教训,对linux操作系统不熟悉的地方不能按照windows的模式想当然的操作。尤其是系统是正式的工作系统,应该坚持“宁滥勿缺”的原则,不要想当然的删除你不熟悉的文件或目录。