我想修改它,这样我的密码就永远不会被看到。该方法需要独立运行并在脚本中运行。
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
解决方案。
我认为这有一些优点:
- 您不需要维护包含明文密码的文件。如果您更改密码,您也需要
~/.userpass
相应地更改文件。 - 用户
root
可以在自己的环境中或通过简单地发出 来查看您的密码cat ~fixit/.userpass
。虽然root
不需要您的密码来代表您做某事(因为他总是可以做su - fixit
或sudo -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.bak
或fixit.disabled
。