关于chown命令的奇怪问题
都知道在linux系统中,chown 命令用来修改文件或目录的属组,而 chown 后加 -R 参数,则会修改指定目录即该目录下的所有文件的属组。
那么 chown 命令修改一个软连接文件的权限呢? 比如: chown hack:hack link,结果如下
当然是改软连接指向的目标文件的属组,如果target是目录也一样。
ok, 继续执行 chown -R 操作软连接文件看看,chown -R hack:hack dirlink,此时软连接dirlink指向一 个目录,结果如下
纳尼!居然仅仅改了链接文件本身的属组,不科学呀,其他OS上面能把目标路径及路径下的文件属组改了,难道OS不一样实现的机制不同,亦或是高版本的linux内核已做了相关的防御措施?这个问题留着再验证下…
我的问题在于,chown -R 在操作目标目录时,如果该目录下存在软链接文件,能否把链接指向的目标文件属组篡改?执行 chown -R hack:hack targetDir,结果如下
结果显示,chown -R 会将目标目录及该目录下的所有文件、目录、链接文件的属组修改,但是并没有改变软链接指向的 /etc/passwd 文件的属组,即得到的答案是:chown -R 不能修改链接指向的目标文件或目录属组
奇怪的是,在内核为 3.x 版本的Linux OS 中是可以把链接指向的目录属组改了,目前是在内核4.4版本的系统中试验,可能高版本的内核加了一些防护,之后做下查证。
但这里也证明 chown -R 不同于 chown,chown -R 不能修改软链接指向的目标文件的属组,但低版本的内核是可以改链接的目录的属组的。
chown -R 误区
之前一直认为,chown -R 同 chown 一样,会把软链接指向的目标文件属组修改,只是一个操作多个目录文件,chown 操作一个目录文件。因此做了一些试验,也验证了chown -R 不能修改链接指向的目标文件或目录属组,本篇博客就记录到这,之后分析相关源码看看其区别吧,知道其具体缘由的大佬,欢迎评论区留言~~ ^_ ^