我已经使用 user1 登录到 UNIX 环境,在这个环境中,我有一个 shell 脚本,其中包含一些需要在不同路径上使用不同用户(例如 user2)完成的任务,因为 user1 无权访问该路径。
我想在 shell 脚本中从 user1 切换到 user2 来执行该任务,完成任务后我想再次从 user2 切换到 user1。
请建议我如何实现这个场景。
我正在用 java 调用 shell 脚本,所以如果你有其他方法,请建议
答案1
您可以通过以下方式实现您想要的sudo
:您可以允许 user2 以 user1 的身份执行它需要的脚本,从而允许仅有的该脚本将被执行,从而保护系统的安全(user2 不能像 user1 一样使用 shell)。您可以通过以下方式做到这一点:
sudo visudo
(编辑 sudo 配置文件)- 将其添加到文件末尾:
user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
- 保存并关闭文件。
现在,如果您以 user2 身份打开 shell,则可以以sudo -u user1 /path/to/your/script.sh
user1 身份执行它;您可以在 java 中使用同样的命令。安全性得以保留,因为 user2 无法执行 shell,因为 user1:sudo -u user1 bash
将被拒绝。
然而,我认为只需创建一个 user1 和 user2 将共享的组,并使用该组来管理文件的执行权限,就可以实现更干净的解决方案。根据您的要求,chmod 4700 /path/to/your/script.sh
如果预计有更多用户以 user1 身份执行该脚本,您可能还需要考虑 ACL 或 setuid 位(例如 )。
答案2
我假设 user1 没有无密码 sudo 访问权限,对吗?如果是这样,您可以使用 runuser 命令。
runuser -l user2 -c 'whoami'
如果您设置了 sudo 权限,则可以只使用 su/sudo。
su - user2 -c 'whoami'
不过,我假设您没有无密码 sudo 和/或您可能没有 user2 的密码。您可能会比较棘手,为 user1 生成 RSA 密钥对,然后将 id_rsa.pub 密钥附加到 user2 的 $HOME/.ssh/authorized_keys 文件以启用 RSA 公钥身份验证,然后使用 SSH 无需密码即可完成此操作。
以用户 1 身份运行以下命令:ssh keygen 只需根据提示按 Enter 键即可 然后运行以下命令自动添加密钥(您可以手动执行此操作)。如果您使用此命令,则仅在第一次时需要用户 2 的密码。
ssh-copy-id -i $HOME/.ssh/id_rsa.pub user2@主机名
如果这有效,您应该能够以 user1 身份登录,然后运行 ssh user2@localhost 以 user2 身份登录,无需密码。确保服务器上的 /etc/ssh/sshd_config 已启用公钥身份验证。
然后要远程执行命令,您可以运行类似的命令;
ssh user2@localhost“远程命令1;远程命令2”