将解密的密码通过管道传输到命令

将解密的密码通过管道传输到命令

我想修改它,这样我的密码就永远不会被看到。该方法需要独立运行并在脚本中运行。

echo fake | sudo -S thunar

答案1

从你的问题来看,你所说的“永远不可见”是什么意思还不清楚。如果你不想输入密码,那么密码就需要存储在某个地方。但你可以让它在命令行中不可见。

使用您的密码创建一个文件:~/.userpass

userpass="fake"

使其仅对您可见:

chmod 600 ~/.userpass
#or 400 to make it readonly

然后你可以运行如下命令:

source ~/.userpass # once per session
echo "$userpass" | sudo -S thunar

或者,您可以编辑sudoers文件以允许通过sudo所有或某些命令进行无密码访问。

sudo visudo    

并将以下行添加到文件末尾:

username ALL = (ALL) NOPASSWD:ALL

或者

username ALL = NOPASSWD: /usr/bin/thunar

(将用户名更改为您的实际用户名)

答案2

@RoVo回复已经回答了您关于如何传递密码的问题,sudo -S但我想关注纯粹的sudo解决方案。

我认为这有一些优点:

  1. 您不需要维护包含明文密码的文件。如果您更改密码,您也需要~/.userpass相应地更改文件。
  2. 用户root可以在自己的环境中或通过简单地发出 来查看您的密码cat ~fixit/.userpass。虽然root 不需要您的密码来代表您做某事(因为他总是可以做su - fixitsudo -u fixit -i),但知道密码可能并不可取root。这取决于您的密码,但如果是类似的东西 ubuntu-Ak5"l,$7sH,那么他可能会猜测您的亚马逊或网上银行密码。

话虽如此,我还是建议已经建议的内容:添加一个条目sudo– 但略有不同:

我建议将文件放在目录中,/etc/sudoers.d/而不是直接操作文件/etc/sudoers。最后一行/etc/sudoers显示

#includedir /etc/sudoers.d

虽然由于前导 ,这看起来像一条注释#它不是。这是对通常注释的一个例外。此指令意味着当其工作时,下面的所有文件/etc/sudoers.d也将被考虑。请参阅以了解更多详细信息。sudo/etc/sudoers.d/README

为了完全确保万无一失,您需要两个终端窗口:一个以用户身份 root,另一个以用户身份fixit(我假设这是您的用户名)。打开两个终端窗口。在第一个窗口类型

sudo -i

并输入您的密码。现在您有一个 root shell 来编辑 sudoers 内容,并在出现问题时回滚。

在里面第一个窗口类型

cd /etc/sudoers.d
visudo -f fixit

这将打开一个编辑器(通常是nano),其中包含文件fixit。名称无关紧要,只要它不包含点(因此使用例如fixit.sudo)。添加行

fixit ALL = NOPASSWD: /usr/bin/thunar

到该文件并保存。使用visudo 而不是常规的编辑器visudo会检查文件的语法,并拒绝保存格式错误的文件。此外,它还会正确设置文件的权限。 保持第一个窗口打开!

现在去你的第二个窗口并尝试(作为用户fixit

sudo thunar

它应该不需要密码就可以工作。如果不行,请切换回第一个窗口(您为此目的使用 root shell 保持打开状态),然后修复该文件 /etc/sudoers.d/fixit或直接删除该文件并重新开始。

如果您想添加更多命令/etc/sudoers.d/fixit,只需添加更多行(或以逗号分隔的命令列表):

fixit ALL = NOPASSWD: /usr/bin/thunar
fixit ALL = NOPASSWD: /usr/bin/othercommand
fixit ALL = NOPASSWD: /usr/bin/3rd_command, /usr/bin/4th_command, \
                      /usr/bin/5th_command_in_another_line

我认为这种方法有一些优点:

  • 你甚至不需要触摸出厂设置 (因此/etc/sudoers当操作系统更新时不会出现问题)。
  • /etc/sudoers.d/fixit只需将文件复制到不同的计算机即可。
  • 您可以通过删除文件轻松撤消更改。或者重命名文件,使其包含一个点,因为文件名中带有点的文件会被机制忽略include ,例如fixit.bakfixit.disabled

相关内容