如何从登录 shell 启动非登录 shell?

如何从登录 shell 启动非登录 shell?

我有一个脚本,用于在全新安装操作系统后设置我的系统。它执行的大部分操作都需要超级用户权限,但有些命令会在主目录下创建文件(例如锁定文件),而主目录的所有者必须对该文件具有写入权限。为了避免在我自己的主目录下而不是下为超级用户创建文件/root,我要求使用脚本运行sudo -isudo -iu "$SUDO_USER"以我的身份执行命令。

这在大多数情况下都很有效,但我现在需要执行一个命令,就像我用它运行它一样sudo不是 sudo -i。我该怎么办?

一个糟糕的解决方案可能是这样的:

sudo -iu "$SUDO_USER" << LF
sudo [command]
LF

上面的问题是sudo [command]可能会提示输入密码,并且该脚本必须是非交互式的。

答案1

正如@Xen2050 所建议的,我暂时允许自己以超级用户身份执行命令,无需进行身份验证。

/etc/sudoers.d我通过使用指令在目录下添加文件来实现此目的NOPASSWD。为了安全起见,我使用了visudo,因此我必须在 here-doc 中使用 ed 脚本,而不是直接使用 here-doc。运行命令后,我删除了该文件。

#!/bin/bash

EDITOR=ed visudo -f /etc/sudoers.d/[file] << LF
a
$SUDO_USER $(hostname) = NOPASSWD: [command]
.
wq
LF
sudo -iu "$SUDO_USER" bash << LF
sudo [command]
LF
rm /etc/sudoers.d/[file]

请注意,[command]ed 脚本中必须包含命令的完整路径。我[file]以命令命名。在我的例子中,我正在运行 TeX Live 的安装程序,install-tl所以我选择它作为文件的名称。

相关内容