tky*_*ass 3 linux users sudo cp files
我正在尝试将文件从我的主目录复制到另一个用户的目录。我有一个没有密码的其他用户的 sudo 访问权限。我尝试做类似的事情:
sudo secondUser cp /home/firstUser/file /home/secondUser
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我也没有 root 访问权限,也不知道 secondUser 的密码。
编辑:有是一种方式,没有额外的设置快速,轻松地做到这一点。
cat ~firstUser/file | sudo -u secondUser tee ~secondUser/file >/dev/null
Run Code Online (Sandbox Code Playgroud)
这将准确传输所有文件的内容。如果您关心文件权限和/或时间戳是否与原始文件匹配,则需要使用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
Run Code Online (Sandbox Code Playgroud)
如果可以安排,更好的选择是创建一个仅包含您和 的组secondUser,并将chgrp其中的文件副本/tmp归该组所有。这样您就不需要使文件世界可读,而只能由组(使用chmod g+r /tmp/file)读取。但是,groupadd它本身需要 root 访问权限,因此这不太容易安排。根据情况(如果您经常尝试与其共享/协作secondUser可能适用),您可以考虑要求您的管理员设置此组以备将来使用。
问题在于:
sudo -u secondUser cp /home/firstUser/file /home/secondUser
Run Code Online (Sandbox Code Playgroud)
就是一旦你成为了secondUser,你就无权访问/home/firstUser/file。
secondUser解决方案是您需要打开as的文件firstUser并secondUser继承该文件描述符。
作为一项安全措施,将关闭除、和 之外sudo的所有文件描述符;但是,在这种情况下,这就是您所需要的(您可以显式允许继承更多文件描述符):012
sudo -u secondUser < /home/firstUser/file sh -c 'cat > /home/secondUser/file'
Run Code Online (Sandbox Code Playgroud)
tar对于具有可能的元数据保存的更通用的解决方案,您可以将类似或的输出放在cpio流程sudo的stdin:
tar c file1 file2 file3 | sudo -u secondUser tar x -C ~secondUser
Run Code Online (Sandbox Code Playgroud)