CentOS 6和CentOS 7之间的硬链接权限行为不同

Modified on: Sat, 30 Jun 2018 06:57:00 +0800

当我尝试创建硬链接时,我在CentOS 7中收到权限错误。使用CentOS 6中设置的相同权限,我没有收到错误。该问题以群组权限为中心。我不确定哪个操作系统版本是正确的,哪个错误。

让我说明发生了什么。在我当前的工作目录中,我有两个目录:源和目标。一开始,目的地是空的; source包含一个文本文件。

[root@tc-dlx-nba cwd]# ls -l
total 0
drwxrwxrwx. 2 root root  6 Jun 12 14:33 destination
drwxrwxrwx. 2 root root 21 Jun 12 14:33 source
[root@tc-dlx-nba cwd]# ls -l destination/
total 0
[root@tc-dlx-nba cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[root@tc-dlx-nba cwd]# 

正如您所看到的,关于权限,这两个目录是777,所有者和组都设置为root。文本文件的所有者和组也都设置为root。但是,文本文件的权限对于所有者是可读写的,但对组来说是只读的。

当我以root用户身份登录时,在目标目录中创建指向文本文件的硬链接(在源目录中)没有问题。

[root@tc-dlx-nba cwd]# ln source/test.txt destination/
[root@tc-dlx-nba cwd]# ls destination/
test.txt

但是,如果我以其他用户身份登录,在本例中为admin,我无法创建链接。我得到:“不允许操作。”

[root@tc-dlx-nba cwd]# rm -f destination/test.txt 
[root@tc-dlx-nba cwd]# su admin
bash-4.2$ pwd
/root/cwd
bash-4.2$ ln source/test.txt destination/
ln: failed to create hard link ‘destination/test.txt’ => ‘source/test.txt’: Operation not permitted

实际上对我来说有什么意义,但由于上面的内容在CentOS 6中被允许,我想检查一下我是否误解了一些东西。对我来说,似乎CentOS 6中的一个错误已在CentOS 7中修复。

任何人都知道是什么给出的?我是否相信上述行为是正确的行为? CentOS 6是正确的吗?或者,两者都是正确的,也许还有一些我遗漏的微妙的群体权限问题?感谢。


编辑:我刚才在Debian v7虚拟机上尝试了同样的测试。 Debian同意CentOS 7:“不允许操作。”


编辑#2:我在Mac OS X(Yosemite)上尝试过同样的事情。这就像CentOS 6那样。换句话说,它允许创建链接。 (注意:在OS X上,根组称为“wheel。”这是唯一的区别,据我所知。)

作者:,Mario

最佳答案

我制作了一些新的CentOS 6和7 vm,并且能够重现你展示的确切行为。在进行了一些挖掘之后,事实证明,这实际上是内核中关于硬链接和软链接的默认行为的变化,以保证安全性。以下几页向我指出了正确的方向:

http://kernel.opensuse.org/cgit/kernel/commit /?ID = 561ec64ae67ef25cac8d72bb9c4bfc955edfd415

http://kernel.opensuse.org/cgit/kernel/commit /?ID = 800179c9b8a1

如果您使文件成为可写文件,您的管理员用户将能够创建硬链接。

为了恢复系统范围内CentOS 6的行为,增加了新的内核参数。在/etc/sysctl.conf中设置以下内容:

fs.protected_hardlinks = 0
fs.protected_symlinks = 0

然后运行

sysctl -p

至于为什么你的程序选择使用链接而不是复制文件,为什么要创建一个指向原始块的条目时需要使用的文件的精确副本?这节省了磁盘空间,并且在CPU和I / O方面操作成本更低。新的硬链接是相同的文件,只是具有不同的元数据/ inode。如果您在创建硬链接后删除原始文件,则不会影响链接。删除所有链接后,文件才会被“删除”。

作者:,Sean

相关问答

添加新评论