![在 openSUSE 中使用 sudo 而无需实际更改为 root 用户(即,就像在 Ubuntu 中一样)](https://linux22.com/image/30663/%E5%9C%A8%20openSUSE%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20sudo%20%E8%80%8C%E6%97%A0%E9%9C%80%E5%AE%9E%E9%99%85%E6%9B%B4%E6%94%B9%E4%B8%BA%20root%20%E7%94%A8%E6%88%B7%EF%BC%88%E5%8D%B3%EF%BC%8C%E5%B0%B1%E5%83%8F%E5%9C%A8%20Ubuntu%20%E4%B8%AD%E4%B8%80%E6%A0%B7%EF%BC%89.png)
在使用 Ubuntu 几年后,我最近开始尝试 openSUSE 12.3。我仍然习惯 openSUSE 对su
(和sudo
) 的处理与 Ubuntu 对sudo
.我一直在阅读 openSUSE 手册,但无法找到两个相关问题的答案:
1)在上一个问题中https://askubuntu.com/questions/236859/are-there-adverse-effects-from-or-a-better-way-than-writing-to-run-or-dev-sh,我询问如何使用该标志gpg
临时写入解密文件,以便解密文件永远不会接触硬盘。然而,为了写入,我需要在 Ubuntu 中使用(即)。/run
gpg --output
/run
sudo
sudo gpg --output '/run/temporary_file_name' etc.
当我尝试在 openSUSE 中执行相同的操作(使用sudo
或su
)时,我收到来自 的错误消息gpg
,大概是因为 root 用户无法看到我的用户帐户的 gpg 密钥。可以使用``sudo from Ubuntu, in which
sudo seems to use the same preferences / gpg keys as the regular user, be replicated in openSUSE? I could use
gpg 等吗? tee 等,我想,但是与 Ubuntu 的做事方式相比,这似乎很笨拙。
2) 我有几个来自 Ubuntu 的 bash 脚本,它们需要某些(但不是全部)行的 root 权限(例如,复制我不想由 root 拥有的文件,但随后安装需要 root 权限的新软件)。在 Ubuntu 中,我可以只让一些行以sudo
.sudo some_command
不过,在 openSUSE 中似乎并不总是有效。使 openSUSE 适应这些脚本以su -c 'command'
在脚本的这些行上使用的最佳方法是吗?如果我su
在脚本中单独使用,则在输入 root 密码后脚本将停止工作。
请注意,虽然我具体询问的是 openSUSE,但这个问题可能适用于许多非 Ubuntu 发行版。
答案1
sudo 是否保留HOME
环境变量或将其设置为目标用户的主目录取决于其配置(详细信息请参阅手册)。并不是 Ubuntu 做对了而 SuSE 做错了,反之亦然:这两种选择都有优点和缺点。作为编剧,你的工作就是应对这两种情况。 (1) 的解决方案是运行sudo -H
或传递--homedir
给 gpg。
然而,以 root 身份运行 gpg 绝对是错误的方法。这给了 gpg 太多的权限,并且可能有访问权限~/.gnupg
(例如,如果用户的主目录位于 NFS 上)。以拥有密钥的用户身份运行 gpg,并使其将数据打印到标准输出。管道接入tee
是输出到需要特殊权限才能写入的文件的标准方法(我不知道为什么你认为它“笨拙”):
gpg -d foo.gpg | sudo tee /run/foo
是否su
需要sudo
成为root取决于系统管理员的选择。同一台机器上的不同用户可以使用其中之一。除非您控制将运行脚本的所有计算机上的配置,否则请考虑这两种可能性(例如,将选项传递给脚本)。
如果您的脚本在 Ubuntu 上运行,sudo
但在其他发行版或 上失败su
,您可能依赖于(几乎)完全重置的环境。这是sudo
Ubuntu 上的默认配置,但其他系统的行为可能有所不同。修复您的脚本,使其不依赖于正在重置的环境。
答案2
这主要是对问题 1 的回答,因为另一个问题是一个单独的问题,我现在没有时间解决。
Ubuntu 在安全性方面采取了一些捷径,以吸引那些不希望或不需要完全权限分离带来的额外复杂性的典型桌面用户。但是,如果您正在处理非常敏感的数据,以至于您不想将其写入磁盘,那么您就不是这样的用户,不应该通过实施 Ubuntu 风格的sudo
规则来绕过标准安全架构。
警告:仅仅因为您将某些内容放入 RAM 并不意味着其他人就无法访问它。最明显的罪魁祸首是磁盘交换,它最终可能会无限期地存储 RAM 上的内容。 但其他妥协也是可能的。
因此,如果您已禁用交换分区并认为这已经足够了:
比写入 /run 更好的选择可能是创建自己的 tmpfs 挂载,由将要使用它的用户拥有。例如,如果您的用户 ID 和组 ID 均为 500:
mount -t tmpfs tmpfs /home/jl/realtmp -ouid=500,gid=500
该命令必须作为 运行root
,但是一旦您完善了此设置,您可以将其添加到您的文件中fstab
以使其永久化:
tmpfs /home/jl/realtmp tmpfs uid=500,gid=500 0 0
答案3
我会启用 sudo。这是通过编辑 /etc/sudoers 文件并添加行 user ALL=(ALL) ALL 来完成的。与所需的用户。这必须以 root 身份完成。