ubuntu
中没有配置时,Ubuntu Server 12.04的AWS映像上的sudo
用户如何对所有命令都使用无密码的/etc/sudoers
?我想要添加一个行为与默认Ubuntu用户相同的新用户。具体来说,我想为这个新用户提供无密码的sudo
。 所以我添加了一个新用户,然后编辑了
/etc/sudoers
(当然使用visudo)。通过读取该文件,似乎默认的ubuntu
用户已成为sudo
组的成员而获得了无密码的admin
。所以我添加了新用户。哪个没有用。然后,我尝试将NOPASSWD
指令添加到sudoers
。这也没有用。 无论如何,现在我很好奇。如果
ubuntu
用户未在/etc/sudoers
中定义,则如何获得无密码特权。允许这样做的机制是什么?#1 楼
好的,我已经找到了答案,因此也可以将其放在此处以求完整。在/etc/sudoers
的末尾,我认为只是一条注释:#includedir /etc/sudoers.d
但是实际上它包含该目录的内容。其中是文件
/etc/sudoers.d/90-cloudimg-ubuntu
。其中具有预期的内容# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL
所以这就是默认ubuntu用户的sudo配置所在的地方。
您应该使用visudo。以下命令将使您使用visudo编辑正确的文件。
sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu
并添加如下一行:
评论
我很确定我必须完全重新启动。
–aychedee
13年2月14日在20:40
新的sudo规则将用于每个新登录的用户-因此您至少需要重新登录
– bluszcz
13年2月27日在10:17
'sudo服务sudo restart'的工作:)
– Laice
2013年6月11日在2:23
在更高版本(例如14.04)中,包含的文件是/etc/sudoers.d/90-cloud-init-users(以便进行编辑。.sudo visudo -f /etc/sudoers.d/90-cloud-init-users )。尽管创建其他文件比编辑生成的文件更干净。请注意,包含的文件。或以〜结尾的内容将不包括在内。
– Molomby
15年8月27日在5:29
@ Phil_1984_最有可能的是,它被添加为注释,以允许与其他(标准?)版本的sudo兼容,该版本不允许包含,但不会被奇怪的注释绊倒。 (标准很难!;-)
– jpaugh
16年11月23日14:39
#2 楼
我发现,为了在多个服务器上轻松复制此行为,最直接的方法是:sudo visudo
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
对此行:
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
并将其移动到此行下:使用密码:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
,对于需要sudo访问的每个用户,不使用密码:
# 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"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
(在旧版本的ubuntu上,可能需要):
sudo adduser <user> sudo
就这样!
编辑:您可能必须添加管理组,因为我认为默认情况下不存在该管理组。
sudo adduser <user> admin
还可以添加默认组通过以下命令将AWS
ubuntu
用户添加到admin
组: br />评论
自我注意:这是一种惯例,可以将限制较少的权限降低到堆栈中的较低位置。但是不这样做不会影响功能。
– poweratom
2014年9月5日在9:47
正如jiminikiz解释的那样,我必须在我的Ubuntu GNOME 16.04 LTS上的%sudo之后放置%admin。另外,我的Ubuntu上的管理员组ID完全不是admin,而是adm。无需重新启动。
– hata
17-10-26在10:52
#3 楼
我将在/etc/sudoers.d/目录下创建自己的文件-如果进行任何更新,Amazon Cloud创建的文件可能会被覆盖。在/etc/sudoers.d中创建文件后,添加此条目,<your user name> ALL=(ALL) NOPASSWD:ALL
重新引导系统,这将起作用。
#4 楼
不使用任何编辑器的简短答案(在bash上测试,在远程主机上执行非常冒险)。配置sudo以在不使用当前用户密码的情况下工作: class =“ lang-bash prettyprint-override”>
echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
使用以下方法检查编辑:
sudo visudo -c
验证是否可以在没有密码的情况下使用sudo:
sudo cat /etc/sudoers | grep "$USER"
...或简单地尝试:
sudo <anything>
评论
这是非常危险的建议...复制并粘贴错误的内容,您将无法使用自己的服务器。因此建议使用visudo。在保存到磁盘之前,它将检查语法是否正确。因此,对于任何想要使用此功能的人。不要在您关心的远程服务器上执行此操作。您可能要在答案中包含有关此内容的警告。
–aychedee
2014年8月14日9:25
不使用visudo是一个可怕的想法。相信我,我知道。
– gn
2015年9月9日在17:22
恕我直言,复制粘贴比手动编辑更安全。略作简化:echo“ $ USER ALL =(ALL)NOPASSWD:ALL” | sudo tee -a / etc / sudoers
–theartofrain
16-4-5在23:56
@theartofrain-通常,我会同意,但是visudo特别适合不允许您破坏sudoers文件,从而不会将您锁定在计算机之外(或至少是sudo)。
–乔恩五世
17 Mar 15 '17 2:43
@JonV您也可以通过visudo失去管理员权限,但通常不会偶然,因为visudo只保存根据sudoers文件的语法正确形成的更改。大多数错误在语法上都是错误的,因此它们不会对visudo造成伤害。如果/ etc / sudoers或/etc/sudoers.d中的文件格式错误,sudo拒绝将任何人的特权提升作为安全措施,这就是为什么不使用visudo的危险。 (尽管有时pkexec可以在不重新启动的情况下对其进行修复。)
– Eliah Kagan
17年9月28日在12:29
#5 楼
在研究这一点时,我意识到/etc/sudoers
文件中的一行不是注释,而是一条指令,该指令使目录/etc/sudoers/*
下的任何文件或文件夹都覆盖/etc/sudoers
的内容。此是一个偷偷摸摸的小指令,乍一看似乎是一条注释行。它看起来像这样:
#includedir /etc/sudoers.d
这就是我如何在临时Docker映像中实现非root用户,无密码的用户,以便在具有基础的CICD管道中使用
ubuntu:18.04
的图像:RUN \
useradd -U foo -m -s /bin/bash -p foo -G sudo && passwd -d foo && passwd -d root && \
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 "Customized the sudoers file for passwordless access!" && \
echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
echo "foo user:"; su foo -c 'whoami && id' && \
echo "root user:"; su root -c 'whoami && id'
上面的代码会发生什么:
创建用户和组
foo
。用户
foo
被添加到foo
和sudo
组中。主目录设置为
/home/foo
。 将外壳设置为
/bin/bash
。删除
foo
和root
的密码。sed
命令对/etc/sudoers
文件进行内联更新,以允许foo
和root
用户无密码访问sudo
sed
命令禁用#includedir
指令,该指令将允许子目录中的任何文件覆盖这些内联更新。
评论
相关:不使用密码执行sudo吗?