我正在尝试将文件从我的主目录复制到另一个用户的目录。我对其他用户有 sudo 访问权限,没有密码。我尝试做类似的事情:
sudo secondUser cp /home/firstUser/file /home/secondUser
有没有办法做到这一点?我也没有 root 访问权限,也不知道第二个用户的密码。
答案1
编辑:有是一种无需额外设置即可快速轻松完成此操作的方法。
cat ~firstUser/file | sudo -u secondUser tee ~secondUser/file >/dev/null
这将传输所有文件的内容确切地。如果您关心文件权限和/或时间戳是否与原始文件匹配,则需要使用chmod
和分别修复它们touch
。
原答案:
这里的问题是:
secondUser
无权访问您的主目录。- 您无权访问
secondUser
的主目录。
因此,无论您cp
以您自己的身份还是以 的身份运行该命令secondUser
,都无法执行文件复制。
鉴于您说您没有root
访问权限,显而易见的答案是通过中间世界可读位置复制文件,例如/tmp
并将文件的权限更改为世界可读。但是,如果文件中的数据敏感,您可能不想这样做,因为服务器上的任何人都可以在文件传输过程中读取该文件。如果它是不是敏感数据,只需执行以下操作:
cp file /tmp/
chmod a+r /tmp/file
sudo -u secondUser cp /tmp/file ~secondUser
rm /tmp/file
如果您可以安排的话,更好的选择是创建一个仅包含您和 的组secondUser
,并且chgrp
中的文件副本/tmp
归该组所有。这样你就不需要制作文件了世界- 可读,但只能由组可读(带有chmod g+r /tmp/file
)。然而,groupadd
它本身需要 root 访问权限,因此这不太容易安排。根据具体情况(如果您经常尝试与之共享/协作secondUser
可能适用),您可以考虑要求管理员设置此组以供将来使用。
答案2
问题在于:
sudo -u secondUser cp /home/firstUser/file /home/secondUser
就是一旦你成为了secondUser
,你就无权访问/home/firstUser/file
。
secondUser
解决方案是您需要打开as的文件firstUser
并继承secondUser
该文件描述符。
作为一项安全措施,将关闭除、和sudo
之外的所有文件描述符;但是,在这种情况下,这就是您所需要的(您可以显式允许继承更多文件描述符):0
1
2
sudo -u secondUser < /home/firstUser/file sh -c 'cat > /home/secondUser/file'
tar
对于具有可能的元数据保存的更通用的解决方案,您可以将类似或的输出放在cpio
流程sudo
的stdin
:
tar c file1 file2 file3 | sudo -u secondUser tar x -C ~secondUser
答案3
sudo 的 -u 标志将允许您指定应在其下运行命令的用户帐户,但要求您知道其他用户的密码。
sudo -u secondUser cp file /home/secondUser/file
如果您不知道其他用户的密码,您可能无法执行此操作。这是系统正常权限分离设计的一部分,理想情况下应该无法绕过。
您还可以将该文件移动到两个用户帐户都可以访问的位置(例如 /tmp),并让第二个用户将其移动到自己的主目录。
答案4
将文件复制到 /tmp 并将权限更改为 777.
su
给第二个用户。从 /tmp 复制文件。
该命令sudo secondUser
无效。