Linux权限问题(1)-Sticky
背景:朋友在使用php进行mv操作时,出现了权限被拒绝的问题.查看之后,发现目录设置了sticky权限,取消此权限后,文件可以正常mv及删除.
Sticky:对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件(马哥语录,见 马哥Linux base学习笔记)
如下图所示,这是一个加了sticky权限的目录
# mkdir sticky_test # chmod 1777 sticky_test # ll -d sticky_test drwxrwxrwt. 2 root root 4096 Jun 29 17:06 sticky_test
使用redheat用户进入sticky_test目录,touch一个文件,并对该文件添加777权限
$ whoami redheat $ touch redheat_file $ chmod 777 redheat_file $ ll total 0 -rwxrwxrwx. 1 redheat redheat 0 Jun 29 17:10 redheat_file
正常来说,添加了777权限的文件,任何用户可以对其执行读,写,执行的操作
现在使用myuser用户进入该目录,执行删除操作
$ whoami myuser $ ll total 0 -rwxrwxrwx. 1 redheat redheat 0 Jun 29 17:10 redheat_file $ rm -rf redheat_file rm: cannot remove `redheat_file': Operation not permitted
可以发现,系统给出了权限被拒绝的提示.
换回redheat用户,执行删除操作
$ rm -rf redheat_file $ ll total 0
命令可以正常执行.
再次创建该文件,并使用root用户将文件的属组更改为myuser
# chown .myuser redheat_file # ll total 0 -rwxrwxrwx. 1 redheat myuser 0 Jun 29 17:18 redheat_file
再次使用myuser用户执行删除命令
$ ll total 0 -rwxrwxrwx. 1 redheat myuser 0 Jun 29 17:18 redheat_file $ rm -rf redheat_file rm: cannot remove `redheat_file': Operation not permitted
仍然是不可以删除的.
使用root用户,将目录的sticky权限去掉,同时将redheat_file文件的所属组改回redheat用户
# chmod o-t sticky_test # ll -d sticky_test drwxrwxrwx. 2 root root 4096 Jun 29 17:18 sticky_test # chown redheat.redheat sticky_test/redheat_file # ll sticky_test/redheat_file -rwxrwxrwx. 1 redheat redheat 0 Jun 29 17:18 sticky_test/redheat_file
使用myuser用户可以成功删除该文件
$ rm redheat_file $ ll total 0
总结:当目录设置了sticky权限之后,属组或其他用户,即使对该目录下的文件拥有权限,也无法对该文件执行删除操作.
命令:
对目录设置777权限,同时增加sticky权限 # chmod 1777 sticky_test 对目录设置sticky权限 # chmod o+t sticky_test 删除目录sticky权限 # chmod o-t sticky_test
本博客内容都是博主试验通过的方案与方法.
如需交流,请发邮件至qjyyn#qq.com