mv: 通过路径对跨设备的叶节点执行 chown 操作,这与上面的注释相矛盾( GNU 使用 fchown)
作者: sylvestre创建于 2026年9月16日更新于 2026年9月16日
标签U - mv
`src/uu/mv/src/mv.rs:1466' 的文件,该代码未充分规定:
// 打开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