![`cp` 无法写入文件/目录,而 `cat >` 和 `echo` 工作正常](https://linux22.com/image/130820/%60cp%60%20%E6%97%A0%E6%B3%95%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6%2F%E7%9B%AE%E5%BD%95%EF%BC%8C%E8%80%8C%20%60cat%20%3E%60%20%E5%92%8C%20%60echo%60%20%E5%B7%A5%E4%BD%9C%E6%AD%A3%E5%B8%B8.png)
在基于 RHEL 7.2 的系统上,我尝试将文件复制到 smb 安装位置:
cd /target
cp /tmp/foo .
此操作失败并显示以下错误消息:
cp: cannot create regular file ‘./foo’: Operation not permitted
我可以看到创建了一个 0 字节大小的文件。
当我cat
或echo Thisisfoobar>foo
这个工作正常并且文件包含我想要的内容时。但更奇怪的是,当我这样做时它也有效:
cd /target
echo Thisisfoobar>foo
cp /tmp/foo .
我完全不知道为什么这行不通。我已经对两种变体运行了strace
(一种foo
不存在,一种foo
存在并被覆盖)并比较了输出,但没有发现相关差异。唯一的区别是句柄和文件大小,如下所示:
stat("./foo", {st_mode=S_IFREG|0700, st_size=12, ...}) = 0
我们在这台机器上不使用selinux。在运行上面提到的命令之前,我需要执行 a sudo adm
(这实际上给了我类似 root 的权限,这是 CyberArk 施加的限制),并从这个 adm shell 中我做了一个简短的su tu
(或者su - tu
,没有任何区别)说话of smb:tu
是有权在 smb 安装的设备上写入的组的成员,tu
是 Active Directory 的成员。
ls -laZ /tmp/foo
产生以下信息:
-rwx------ tu user ? foo
我dmesg
在运行命令时检查了输出,但没有附加任何条目。