如何在Debian Wheezy上正确配置sudoers文件?


10

我看过很多博客文章说,这足以做到

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

3
之后su root,您以root用户身份登录,因此您可以完全访问所有内容。为了重新成为必须使用sudo特权操作的常规用户,请注销以运行的shell root
2013年

我是Linux新手,但Debian Wiki说-adduser
AntiCZ 2014年

Answers:


16

您尚未添加任何sudo规则,因此您无法对任何内容使用sudo。

该命令adduser USERNAME sudo将指定的用户添加到名为的组中sudo。具有该名称的组必须存在;addgroup sudo如果没有创建它。将用户添加到组后,用户必须注销然后重新登录,以使组成员身份生效。

sudo不是特殊的群组名称。约定允许组sudo中的用户通过该sudo实用程序以root 用户身份运行命令。这需要sudoers文件中的以下行:

%sudo ALL = (ALL) ALL

运行visudo以编辑sudoers文件,切勿直接对其进行编辑。

我不知道您为什么相信“那只会保护才能”。资质没有什么特别的。授权用户以root用户身份运行命令后,该用户可以运行sudo aptitude …sudo apt-get …sudo service …,或sudoedit编辑需要root权限才能编辑的文件。放在sudoers文件中并不会直接更改用户的特权,它的作用是允许您以sudoroot用户身份运行命令。仅当通过命令运行命令时,它们才以root用户身份运行sudo。某些程序可能会自动执行此操作,特别是GUI程序,其中用户界面在没有特殊特权的情况下运行,并且只有后端以root身份运行,但是以root身份执行的命令始终由sudo


他已经sudo -l以root身份运行。即使有对用户有用的定义,也不会显示它们。因此,您的猜测“您尚未添加任何sudo规则”可能是错误的。
Hauke Laging

@HaukeLaging我不明白您的评论。“您还没有添加任何sudo规则”,这并不是一个猜测:sudoers文件存在问题。
吉尔(Gilles)'所以

我快要沮丧了,意识到我太专注于sudo -l输出了,但是幸运的是……问题内容似乎不可能是整个文件,因为它与输出不一致。至少我的sudo版本没有声明“ User root可能运行以下命令”,sudoers而没有任何命令定义(例如问题中的命令)。
Hauke Laging

@HaukeLaging你是对的,我检查了一下,确实sudo -l说:“不允许用户root在darkstar上运行sudo。” sudo默认情况下,该组在sweyer文件中位于sudoers文件中。必要的条目可能已移至下的文件中/etc/sudoers.d。无论如何,无论sudoers文件包含什么,Fischer都不会做。
吉尔斯(Gillles)“所以-别再作恶了”

4

什么可能发生的是:sudo的是缓存您的密码。因此,在系统上正确完成sudo的实现后,您必须输入第一个命令的密码,然后将其缓存一段时间。如果发生这种情况,请运行序列

sudo aptitude install sendmail
sudo apt-get install sendmail

然后,您将必须在第一个命令上提供密码,但在第二个命令上不要提供密码(至少在您仍处于超时范围内时)。这可能会觉得像它的保护只是第一个命令,而不是第二。没有更多信息(完整的shell脚本),就无法告诉...


是。一个不排除另一个。正确答案很好地解释了如何正确设置sudo,从这个意义上讲,它回答了问题。用问题的话,它没有解释为什么“仅保护能力”。吉尔斯写道:“我不知道你为什么相信“那只会保护才能”。正如我所说,要真正了解这种现象,需要更多信息。考虑到我的回答在事实上是正确的,解决了原始问题并填补了现有答案中的空白,我认为不赞成投票有点苛刻。
2014年

好主意,这可能是菲舍尔困惑的根源。
吉尔斯(Gillles)“所以-别再作恶了”

0

如果您遵循上述答案,则说明您的做法正确。至少在我的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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.