将目录(包含内容)移动到另一个用户的主目录(不使用 sudo)?

将目录(包含内容)移动到另一个用户的主目录(不使用 sudo)?

我有一个目录,我想将其(及其内容,递归地)移动到另一个用户的主目录。我无权写入该用户的主目录,但我知道他的密码。

我知道怎么做复制使用的目录scp -r(参见这里)。但是,两个目录都位于同一文件系统中,因此如果我想移动目录,复制然后删除原始目录的效率很低。有没有办法移动目录,而不使用sudo(我不知道 root 的密码,但我知道其他用户的密码)?

有关的:这里如何移动单个文件。然而,该帖子不适用于目录。

答案1

移动文件(不更改其所有权)只需要能够写入包含它们的目录。因此,要将/home/usera/dir1/dir2其内容移动到/home/userb/dir3,从 开始usera

cd ~/dir1
find . -type d -print0 | xargs -0 chmod 777
su userb
cd ~/dir3
mv ~usera/dir1/dir2 .
exit

然后,usera将权限恢复为应有的权限(特别是在 上dir1)。

usera但仍将保留移动文件的所有者,这可能不方便。另一种选择是执行类似的操作,使用cp -rl;创建链接场。这在类似的条件下工作,并且具有创建属于userb.

答案2

我会做与 Kupferdache 相反的事情:

我会在我的家中创建一个公共可写目录,转到另一个帐户并将文件移动到我的目录,然后更改回目录权限。

注意:这是一个真正的举动。然后您应该根据需要设置权限。所以你的解决方案是SCP可能是安全的(您这边安全且良好的文件权限)

答案3

这能满足您的需求吗? rsync 会将目录、文件和权限复制到目标目录。

rsync -avz /path/to/files target_server:/path_to_files

编辑:如果复制成功,您可以添加标志以删除原始文件。

答案4

是的,您不想要这样,所以让我们尝试一些不同的东西!

1-以其他用户身份执行命令,不再要求输入密码:

首先,您需要准备环境,这样您就不需要密码来执行命令。

准备用户2:

user2@machine:~$ cp /bin/bash .bash
user2@machine:~$ chmod a+s /home/user2/.bash

是的,现在 user1 您可以以 user2 身份登录,无需任何密码!

user1@machine:~$ /home/user2/.bash -p
bash-4.3$ whoami 
user2

现在在 user1 中,您无需任何密码即可执行此操作。

user1@machine:~$ chmod -R 777 source ; /home/user2/.bash -pc "mv source dest"

但这可能非常不安全,因为如果其他用户发现 /home/user2/.bash -p 将以 user2 身份登录而无需密码,那么您的安全将不安全。如果您在一个公共组中有两个用户,那么这将是安全的,因此您将使用 chmod ug+s 而不是 chmod a+s 来准备您的环境,并且只有该组中的用户才能像其他用户一样运行 bash!很好不是吗?

2- 执行要求密码的操作(更安全):

如果您没有公共组中的用户并且想要像其他用户一样运行命令,您可以考虑使用密码询问版本,如下所示:

user1@machine:~$ chmod -R 777 source ; su user2 -c "mv source dest"

这有帮助吗?

相关内容