我看过很多博客文章说,这样做就足够了
aptitude install sudo
su root
adduser USERNAME sudo
但这只能保护aptitude
,换句话说:
aptitude install sendmail
会要求输入密码,你需要sudo
运行aptitude
apt-get install sendmail
不会询问密码,无需sudo
权限如果您编辑受保护的文件,例如其中的文件,
etc
则不会要求输入密码,无需任何sudo
权限您可以运行和停止诸如 之类的服务
apache
,它不会要求输入密码,不需要sudo
权限
如何解决这个问题?这是我的 sudoers 文件:
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:$
# Host alias specification
# User alias specification
# Cmnd alias specification
这是以下的输出sudo -l
:
Matching Defaults entries for root on this host:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User root may run the following commands on this host:
(ALL : ALL) ALL
(ALL : ALL) ALL
答案1
您尚未添加任何 sudo 规则,因此您无法使用 sudo 执行任何操作。
该命令adduser USERNAME sudo
将指定用户添加到名为 的组中sudo
。必须存在具有该名称的组;addgroup sudo
如果没有则创建它。将用户添加到组后,用户必须注销并重新登录才能使组成员身份生效。
sudo
不是一个特殊的组名。这是一个约定,允许被调用组中的用户sudo
通过该实用程序以 root 身份运行命令sudo
。这需要文件中包含以下行sudoers
:
%sudo ALL = (ALL) ALL
运行visudo
来编辑 sudoers 文件,切勿直接编辑。
我不知道你为什么相信“这只会保护能力”。资质方面并没有什么特别的。一旦您授权用户以 root 身份运行命令,该用户就可以运行sudo aptitude …
或sudo apt-get …
或sudo service …
或sudoedit
来编辑需要 root 权限才能编辑的文件。位于 sudoers 文件中并不会直接更改用户的权限,它的作用是允许您sudo
以 root 身份运行命令。仅当您通过 运行命令时,命令才以 root 身份运行sudo
。某些程序可能会自动执行此操作,尤其是 GUI 程序,其中用户界面运行时无需特殊权限,并且仅后端以 root 身份运行,但以 root 身份执行的命令始终由sudo
.
答案2
什么可能发生的事情是: sudo 正在缓存您的密码。因此,在您的系统上正确完成 sudo 的执行后,您必须输入 sudo 的密码第一的命令,然后它会被缓存一段时间。如果发生这种情况并且您运行该序列
sudo aptitude install sendmail
sudo apt-get install sendmail
然后,您必须在第一个命令上提供密码,但在第二个命令上不需要提供密码(至少在您仍在超时范围内时)。这可能感觉就像它只保护第一个命令,但不保护第二个命令。如果没有进一步的信息(完整的 shell 记录),就没有办法告诉......
答案3
如果您遵循上述答案,那么您就走在正确的道路上。至少在我的 Debian Jessie 中,我在路径 /sbin 中对命令的 /usr/bin 做了软链接。例如:/sbin/ifup,我把一个软链接(ln -s)到它的/usr/bin,我就可以使用它了。
另一件重要的事情是像这样放置 NOPASSWD:
User_Alias NET = goviedo
Cmnd_Alias ETH = /sbin/ifup
NET ALL = NOPASSWD:ETH