问题描述
受此question …启发….
我是12.04使用我系统的唯一人员。每次我发出一个sudo
命令;系统要求输入用户密码(这是很好的方式)。但我在想,无需激活root帐户;我怎样才能执行不会要求用户密码进行验证的sudo命令。
注意:我想要执行sudo命令而不通过密码进行身份验证;只有当他们通过终端执行时。我不想从使用“Ubuntu软件中心”的其他功能中删除额外的安全层,或者通过drag-drop something.sh文件执行bash脚本到终端。
最佳解决思路
如果您不希望在系统(或其他系统)中进行修改时每10分钟输入一次密码,并且您不想修改任何系统文件,那么sudo -i
就是要走的路。
它会使用sudo
用户密码将您切换到root用户,当您关闭控制台或键入exit
时,您将恢复为普通用户。
次佳解决思路
解决你的问题的方法是把你的用户放在sudoers文件中,就像你看到的那样。
打开终端窗口并键入:
sudo visudo
在文件底部,输入以下内容:
username ALL=(ALL) NOPASSWD: ALL
其中用户名是您系统中的用户名。保存并关闭sudoers文件(如果你还没有改变你的默认终端编辑器(你会知道你是否有)),按ctl + x退出nano
(但注意下面的屏幕截图显示的是vim
),它会提示你保存)。
]
在此之后,您可以在终端窗口中键入sudo <Whatever you want>
,而不会提示您输入密码。
这仅适用于终端窗口中的sudo
命令。例如,当您尝试在软件中心安装软件包时,系统会提示您插入密码,如您在下一个屏幕截图中所看到的。
我认为这是你想要的。
第三种解决思路
根sudo超时是最简单和最安全的方式。我会列举所有的例子,但是要警告说,尽管这样做更安全,但这样做非常危险:
sudo visudo
这将打开一个编辑器并将其指向sudoers文件 – Ubuntu默认为nano,其他系统使用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! Enter
。
点击Ctrl
+ X
,然后点击Y
,然后点击Enter
保存您的文件并退出nano。
您可能需要阅读sudoers和vi手册页以获取更多信息。
man sudoers
man vi
重置超时值使用:
sudo -k
这些说明将在使用sudo命令时删除提示输入密码。尽管如此,sudo命令仍然需要用于root访问。
编辑sudoers文件
打开一个终端窗口。输入sudo visudo
。将以下行添加到文件的END(如果不是最后它可以被更新条目取消):
<username> ALL=NOPASSWD: ALL
用您的用户名替换<username>
(不含<>
)。这是假设Ubuntu已经创建了一个名称与您的用户名相同的组,这是典型的。您可以交替使用小组用户或您所在的任何其他此类小组。只要确保您在该小组中。这可以通过进入系统 – >来检查。管理 – >用户和组。
例:
michael ALL=NOPASSWD: ALL
键入^ X(Ctrl
+ X
)退出。这应该提示保存文件的选项,键入Y保存。
注销,然后重新登录。现在应该允许您运行sudo命令而不提示输入密码。
根帐户
启用root帐户
很少需要启用root帐户。几乎所有你需要做的Ubuntu系统管理员都可以通过sudo或gksudo完成。如果您确实需要持久的root登录,最好的选择是使用以下命令来模拟Root登录shell:
sudo -i
但是,如果您必须启用root登录,则可以这样做:
sudo passwd root
Re-disabling您的根帐户
如果由于某种原因,您启用了您的root帐户并希望再次禁用它,请在终端中使用以下命令:
sudo passwd -dl root
System-wide组sudo
root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
注销,然后返回。
重置sudo超时
您可以确保sudo在下次运行时要求输入密码:
sudo -k
第四种思路
授予个人(或组)权限的首选方法是在/etc/sudoers.d
下添加文件
这将分离本地更改与默认策略,并节省时间以防发行者文件更改。
例如:
sudo echo "username ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
将非常清楚哪些用户被授予权限。
同样,可以使用一个文件来管理多个指令:
sudo echo "username ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers.d/local
有关更多信息,请参阅/etc/sudoers.d/README
。
第五种思路
当然不建议你想要做什么。过了一段时间,虽然进入sudo
变得如此自动化,以至于它的用处减少了。
另一种方法是让你的sudoers文件保持原样,并在你的数百台服务器上执行一些复杂的操作时,输入sudo bash
。这将给你一个shell,它将被认证为root,直到你退出它。
第六种思路
Nice one-liner为当前用户移除sudo提示
sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'