#14599·coreutils

mv: 通过路径对跨设备的叶节点执行 chown 操作,这与上面的注释相矛盾( GNU 使用 fchown)

作者: sylvestre创建于 2026年9月16日更新于 2026年9月16日
标签U - mv

`src/uu/mv/src/mv.rs:1466' 的文件,该代码未充分规定:

zz
// 打开src/dst与O NOFOLLOW,并保持fds活过副本,
//chown, xattr, 和chmod 这样一个并行的路径- swap 无法重定向任何
/走入不同的inode.

收到 Xattr 和 Chmod 都尊重它 ```cown'不.**保有-所有权 ' (mv.rs:1527')取两path',再取symlink-metadata()',并称为wrap-chown(to.)'' (15:44')-一种以路径为基础的lchown',而不是dst-file' fd上的操作,该fd是开放的,范围就在这里。

在`be00b4c4e'上, " main " 与 " main " 相对应。

□ 追踪

交叉设备作为根移动, 由 uid 1000 拥有源 :

控制台 uutils: open (.../dst/k), O WRONLY|O CREAT|O TRUNC|O NOFOLLOW|O CLOEXEC, 第0600页=4 lchown (.../dst/k), 1000, 1000) < 路径 fchmod( 4, 0664) <- fd- based

GNU: openat(AT FDCWD,"./dst/k2",O WRONLY|O CREAT|O EXCL,0600) = 4. fchown (4, 1000, 1000) <- fd- based fchmod (4, 第0100664页)


控制:GNU creautils 9.11.130 (主机).

两种差异:GNU将描述符划出,而GNU的创建带了"O EXCL",其中"创建-dest restive(to, no follow= true)"("mv.rs:1481")没有.

□ 建议修正

- `保留所有权'应取已打开的``文件'并使用`rustix:fs:fchown()';
- 在创建`mv'目的地后加上`O-EXCL';
- ** 更正`mv.rs:1466`**'的评论——如书面所述,它声称一项担保是不存在的,这是最有可能阻止下一任审查人查阅的部分。

-- -- . . .

由@RelunSec(InsiteTech.jp)报道. 三角形作为正确性/robustness bug:没有找到原始到攻击者尚未控制的文件(`lchown'不遵循同义词;`fs.被保护的-hardlinks=1' 阻断了硬通路),但与GNU的分出是真实的,错误的评论应该去.

内容来源: uutils/coreutils