受此问题启发。...

我是在12.04上使用系统的唯一人。
每次我发出sudo命令;系统要求输入用户密码(以自己的方式输入)。
但是我在想;无需激活根帐户;

注意:我想执行sudo命令而不通过密码进行身份验证;仅当它们通过终端执行时。
我不想在使用“ Ubuntu软件中心”或通过拖放something.sh文件执行bash脚本的同时从其他功能中删除此额外的安全层。终端。

评论

因此,您只想在终端中要求输入密码,而在其他地方则不需要,或者反过来?无论哪种方式,我都认为这是高度安全漏洞

我希望该系统仅在终端中时才可能不询问密码...出于任何其他目的,系统必须询问密码。该要求只是暂时的,在配置n个安装新服务器时将使用此要求。在全新服务器安装期间,使用sudo命令进行配置实际上需要花费数小时。每15分钟发出一次密码。头疼。我不想使用root帐户。

您需要在以下位置阅读讨论内容:askubuntu.com/questions/135428/…

当然可以延长超时时间。另外,如果您经常进行全新的服务器设置,则应考虑使过程自动化。您不必付打字的钱,而需要付钱解决问题和完成任务。

相关:如何在没有密码的情况下运行sudo命令?

#1 楼

您可以将sudo配置为从不要求输入密码。

打开终端窗口并键入:

sudo visudo


在文件底部,添加以下行:

$USER ALL=(ALL) NOPASSWD: ALL


$USER是您系统上的用户名。
保存并关闭sudoers文件(如果尚未更改默认值)终端编辑器(如果知道的话),按Ctl + x退出nano,它会提示您保存。

从Ubuntu 19.04开始,该文件现在应类似于在此之后,您可以在“终端”窗口中键入# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL ,而无需提示输入密码。

这仅适用于在终端中使用sudo <whatever you want>命令。如果您(例如)尝试从软件中心安装软件包,系统仍会提示您输入密码。



评论


建议使用sudo visudo而不是直接编辑它。此外,更改sudoers的权限可能会使您无法登录。用vim编辑时,使用:wq!写入只读文件并退出编辑器。这样,不需要权限644。

– Lekensteyn
2012年6月6日13:49

这是一个严重的安全风险,任何接管具有sudo权限的帐户的任何人都可以控制整个系统,并锁定对该计算机的任何进一步访问权限,严重不建议这样做。

–布鲁诺·佩雷拉(Bruno Pereira)
2013年9月12日上午9:06

@ wil93您遗漏了一点:在这种情况下,调用sudo install crapware的脚本将不会要求输入密码,并且可能会弄乱您拥有的所有内容,并且您不需要在机器旁边就可以分发脚本了我检查了...这只是一个例子。

–布鲁诺·佩雷拉(Bruno Pereira)
2014年8月28日在12:46

@BrunoPereira如果您计划运行不受信任的脚本,那将带来安全风险(即使sudo要求输入密码,恶意脚本也总是会造成rm -rf〜搞砸了很多事情)。总的来说,我不会将“严重的安全风险”称为从sudo轻松删除密码提示。

–wil93
14年8月29日在0:54

同意@ wil93。当运行不受信任的脚本时,输入密码仅是取消该过程的机会,但我怀疑它对大多数人没有用。关键是您知道脚本的来源及其作用。

–狮子座
16-09-4在8:49

#2 楼

如果您不想在系统(或其他系统)上进行修改时每10分钟输入一次密码,并且不想修改任何系统文件,则可以通过sudo -i进行操作。

当您关闭控制台或键入sudo时,它将使用您的exit用户密码切换到root用户。

评论


我只输入一次密码,直到我退出之前,这是否成立?天气5小时或15 ....发出任何sudo命令时,系统不会要求通过密码进行身份验证。

–巴维什·迪万(Bhavesh Diwan)
2012年6月7日在21:10

@ Z9iT,直到您键入exit或关闭终端仿真器窗口为止。

–布鲁诺·佩雷拉(Bruno Pereira)
2012年6月8日在8:33

谢谢。接受此答案是因为它的目的是在不进行密码身份验证的情况下发出sudo命令n小时,直到我们退出之前。

–巴维什·迪万(Bhavesh Diwan)
2012年6月8日9:58

这实际上并不能回答问题,因为此时您仍然需要输入密码才能成为root用户。

–亚当F
2015年6月2日22:00

如果您是在安全的环境中运行虚拟机,而您只是希望事情立即执行某些操作,并且不想处理密码,则不会。这个答案虽然可以说是有用的信息,但却不能回答问题。我同意亚当·F

–乔纳森·科玛(Jonathan Komar)
16年8月10日在8:34



#3 楼

根sudo超时是最简单,最安全的方法。我将列出所有示例,但要警告您,尽管这样做更安全,但是这样做很冒险:
sudo visudo

这将打开一个编辑器,并将其指向sudoers文件-Ubuntu默认值纳米,其他系统使用Vi。您现在是编辑系统上最重要文件之一的超级用户。没压力!
(Vi的特定说明带有(vi!)。如果使用nano,请忽略这些。)
使用箭头键移至Defaults行的结尾。
(vi!)按A(大写“ a”)键移动到当前行的末尾并进入编辑模式(追加到该行的最后一个字符之后)。
现在键入:
,timestamp_timeout=X

其中X是超时到期时间(以分钟为单位)。如果指定0,将始终要求您输入密码。如果指定负值,则超时将永远不会过期。例如。 Defaults env_reset,timestamp_timeout=5
(vi!)按Escape键返回命令模式。现在,如果您对编辑感到满意,请键入:w Enter写入文件,然后键入:q Enter退出vi。如果输入有误,也许最简单的方法是从开始重做,不保存就退出(按Escape键进入命令模式),然后键入:q!输入。
先按Ctrl + X,然后按Y,然后按Enter以保存文件并退出nano。
您可能需要阅读sudoers和vi手册页以获取更多信息。 />使用以下命令重置超时值:
man sudoers
man vi

这些说明是在使用sudo命令时删除提示输入密码的提示。仍然需要使用sudo命令进行root访问。
编辑sudoers文件
打开“终端”窗口。输入sudo visudo。将以下行添加到文件的末尾(如果不在末尾,则可以由以后的条目将其取消):
sudo -k

用您的用户名替换<username>(不使用<>)。假设Ubuntu创建了一个与您的用户名相同的组,这是典型的。您可以交替使用组用户或您所在的任何其他此类组。只需确保您在该组中即可。可以通过转到系统->管理->用户和组进行检查。
示例:
<username> ALL=NOPASSWD: ALL

键入^ X(Ctrl + X)退出。这应该提示您选择保存文件,键入Y保存。
注销,然后重新登录。这现在应允许您运行sudo命令而无需提示输入密码。
根帐户
启用根帐户
几乎不需要启用根帐户。作为Ubuntu系统管理员,您几乎需要执行的所有操作都可以通过sudo或gksudo完成。如果您确实需要持久的root登录,最好的选择是使用以下命令来模拟Root登录外壳:
michael ALL=NOPASSWD: ALL

但是,如果必须启用root登录,则可以这样进行: br />
sudo -i

重新禁用您的根帐户
如果由于某种原因启用了根帐户并希望再次禁用它,请在终端中使用以下命令:
sudo passwd root

系统范围内的sudo组
sudo passwd -dl root

注销,然后重新登录。 />
root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers


评论


我在添加之前就发布了此内容,以了解实现此操作的系统范围的方法,其他内容请参见此处:

–user209328
13-10-30在1:17

这是一个较晚的答案,但是在它为您提供的选项方面是最全面的。

– Jemming
17 Mar 4 '17 at 23:12

嗯,在Ubuntu 18.04 MATE上这可以完美地工作,而在Ubuntu 18.04 GNOME上做同样的事情,则引起了“用户名不在sudoers文件中……”的困扰。现在,这就是为什么这么多pple只讨厌linux的原因-cuz很少是“因果关系的”:D以防万一U遇到相同的情况...这是解决问题的方法:tecmint.com/…

–彼得
18年11月12日在20:33

EDITOR环境变量可以设置使用的编辑器...例如sudo env EDITOR = / bin / nano visudo可以在nano中可靠地编辑sudoer。 (update-alternatives也可以用于设置编辑器)

– Gert van den Berg
18年11月19日在12:10

#4 楼

授予个人(或组)权限的首选方法是在/etc/sudoers.d下添加文件。

这会将本地更改与默认策略分开,并在分发sudoers文件更改时节省了时间。

要使当前登录的用户a sudoer并使sudo不提示他们输入密码,请使用

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER


这将创建一个名为/etc/sudoers.d/$USER的文件(其中$USER是您在运行该命令时登录的用户的用户名),以明确授予哪些用户权限。上面命令中带有其他用户名的$USER实例。

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser


类似地,一个文件可用于管理多个指令:

有关更多信息,请参见/etc/sudoers.d/READMEman sudoers

评论


即使我是root,echo命令也会失败。但是,我添加了文件并直接对其进行了编辑,并且可以在最新的ubuntu上使用(而没有将用户直接添加到sudoers中!)

–scape
17-10-24在13:43

正确的方法是使用tee命令。

– woto
18年1月19日在8:10

这是一种更好的工作方式:sudo sh -c'echo“ $(logname)ALL =(ALL:ALL)NOPASSWD:ALL”> /etc/sudoers.d/$(logname)',然后是sudo chmod 440 / etc / sudoers.d / $(日志名)

–天堂
18年11月14日在16:32

在sudo中,文件外壳重定向是在原始外壳中执行的,因此它只能在根外壳中工作。

–康斯坦丁Pelepelin
18年11月26日在13:23

tee方法,没有权限问题:echo“ username ALL =(ALL:ALL)NOPASSWD:ALL” | sudo tee /etc/sudoers.d/用户名

–叶振棠
18-11-27在9:42



#5 楼

当然,不建议您执行任何操作。过一会儿,尽管输入sudo变得如此自动以至于它的用处逐渐减少。

另一种方法是将sudoers文件保持不变,并且在对数以百计的服务器进行复杂处理的同时,输入sudo bash。这将为您提供一个将被身份验证为root的shell,直到您退出它为止。

评论


sudo -s或sudo -i可能都是比sudo bash更好的主意,因为它们确保环境和事物都健全。

– Darel
2012年6月27日20:59

“理智和事物”通常不在“更好的主意”的范围内,有人可以给出为什么sudo -s或sudo -i比sudo bash更好的技术解释吗? (编辑:这是一个相关的问题askubuntu.com/questions/376199/…)

– Nuzzolilo
16年1月2日在22:58



许多sudo命令(特别是sudo pip ...)需要sudo -H(设置HOME)才能使命令正常运行。在其他情况下,可能需要sudo -E(保留环境)。在大多数情况下,运行sudo bash可能会起作用,但在所有情况下都无法运行,如果不能运行,则不清楚原因。

–迈克尔
16-09-20在6:43

sudo su是切换角色并开始充当sys admin的传统方法。

–user1656671
18年1月21日在12:49

#6 楼

很好的一线功能,可删除当前用户的sudo提示

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'


评论


我认为您可以这样做:echo“ $ USER ALL =(ALL:ALL)NOPASSWD:ALL” | sudo env EDITOR =“ tee -a” visudo,毕竟只有visudo需要sudo(甚至在默认配置IIRC中甚至不需要env)。

–muru
16年6月27日在20:38

这里有太多可能出错的地方(当然,所有用户错误),以我的拙见,最好是直接编辑sudoer文件(sudo visudo),同时测试结果(仍然打开编辑器) ),以吸引那些可能会尝试使用此“单线”工具的新用户。

–迈克尔
16-09-20在6:47

感谢您的反馈!我只是快速尝试对易失性测试虚拟机中的sudo密码提示进行脚本化删除。随时提出改进建议:)

–埃里克·兰德里(Eric Landry)
16-09-21在16:35

您仍然需要sudo chmod 440 /etc/sudoers.d/$(logname)来更正该目录中自述文件中所述的文件权限。

–天堂
18年11月14日在16:33

#7 楼

这是一种单行解决方案,还可以按照/etc/sudoer.d/README中所述更改文件许可权:

#8 楼

来自超级用户的一个很好的答案:

使用-S开关从STDIN读取密码:

echo <password> | sudo -S <command>


用您的密码替换<password>

评论


不建议这样做,因为密码在shell历史记录文件中保持为cleartype。应用其他解决方案。

– HappyCactus
18年5月5日在15:02

@HappyCactus您可以在回声前面放置一次空格,以便它不会出现在历史记录中吗?

–WinEunuuchs2Unix
18年5月5日在15:09

是的,这样可以避免将明文密码暴露给历史记录文件。但是,您是否始终记得添加它? :-)

– HappyCactus
18年5月5日在15:38

@HappyCactus我倾向于偶然添加领先空间,然后在无法回顾历史时感到恼火:)无论如何,超级用户有129个投票,所以我认为离开这里是一个很好的答案。人们将阅读我们的评论,并了解风险和规避风险的步骤。

–WinEunuuchs2Unix
18-11-5在15:41



HISTCONTROL变量需要包含ignorespace,以便在前缀为“”时不保存该变量。这似乎是Ubuntu上的默认设置,但是可以更改...密码仍然可以在ps输出中显示...在sudoers中使用NOPASSWD(理想情况下仅限于某些命令)似乎更安全...

– Gert van den Berg
18年11月19日在12:08

#9 楼

一根衬纸

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'

#10 楼


扩展@upteryx的想法。
这是我如何在临时Docker映像中实现非root用户,无密码的用户,以用于CICD管道:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id


#11 楼

要在当前用户使用sudo时从不提示当前用户输入密码,请运行以下命令:
echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-sudo-password