禁用命令行中用户的sudo权限

我已在Ubuntu中激活了root用户,并希望将Ubuntu用作无桌面环境的服务器。为此,我想禁用授予第一个用户的sudo特权。我该如何在命令行中完成这个操作?我知道可以使用图形界面,但如何通过命令行来实现呢?


根据您设置的群组,输入visudo。 - wojox
3个回答

该用户具有sudo特权,因为它属于"admin"组。正如wojox所评论的那样,您可以使用"visudo"命令从"admin"组中删除sudo特权,但这将使得所有"admin"组的成员都失去sudo权限,而不仅仅是一个用户。
或者,您可以将该用户从"admin"组中移除。如果以屏幕为导向的"vi"被认为足够命令行,可以运行"vigr"命令并从相应行中删除用户名。
对于一个纯粹的命令行解决方案,可以尝试使用"gpasswd"命令,因为它管理/etc/group文件,并可以添加和删除用户到组中。
root@toki:~# id -Gn username
username adm dialout cdrom plugdev lpadmin admin sambashare
                                         # ^- the group to remove
root@toki:~# gpasswd -d username admin
Removing user username from group admin

root@toki:~# id -Gn username
username adm dialout cdrom plugdev lpadmin sambashare
                                        # ^- username not a member
root@toki:~# gpasswd -a username admin
Adding user username to group admin
root@toki:~# id -Gn username
username adm dialout cdrom plugdev lpadmin admin sambashare

以下是我在意识到有一种更简单的方法之前给出的第一个答案。
如果你想要一个更复杂的方法来做这个,你可以使用usermod
这是usermod手册页中的一句引用:
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
    A list of supplementary groups which the user is also a member of.
    Each group is separated from the next by a comma, with no intervening
    whitespace. The groups are subject to the same restrictions as the
    group given with the -g option.

    If the user is currently a member of a group which is not listed, the
    user will be removed from the group. This behaviour can be changed via
    the -a option, which appends the user to the current supplementary group
    list.

所以你必须为用户指定除了“admin”之外的所有组。
root@toki:~# id username
uid=1000(username) gid=1000(username) groups=1000(username),4(adm),20(dialout),24(cdrom),46(plugdev),111(lpadmin),119(admin),122(sambashare)

root@toki:~# usermod -G 4,20,24,46,111,122 username

root@toki:~# id username
uid=1000(username) gid=1000(username) groups=1000(username),4(adm),20(dialout),24(cdrom),46(plugdev),111(lpadmin),122(sambashare)

最后,虽然这违背了问题的本意,但是可以在命令行中输入users-admin来修改用户和组。

看起来在Precise上要删除的组现在是sudo - Joril

无论以上答案中可能存在的智慧是什么,我已经解决了启用根帐户并禁用指定用户的sudo问题。
首先启用根帐户:
$ sudo passwd root

更多信息请参阅Ubuntu文档

然后:

  • 切换为root用户
  • 备份并编辑/etc/group文件
  • 再次切换为普通用户以测试更改

即:

$ su
# cp /etc/group /etc/group.bak
# nano /etc/group               # find a line like 'sudo:x:27:guest', remove the
                                # user name (i.c. 'guest') and save the file
# exit,
$ [try any sudo command]

用户'guest'已从sudoers文件中移除。如果一切顺利,任何sudo命令都应该返回类似于以下的消息:
guest is not in the sudoers file.  This incident will be reported.

在这台计算机上登录的访客无法再意外或故意搞乱系统了,因为需要root权限才能这样做。当然,如果您添加新用户,就需要重复编辑/etc/group。
祝好!
-- linuxrev
(Ubuntu 12.04)

警告

小心,这样做可能会锁定您自己的系统!始终确保根用户保留其权限并且您可以访问它。事先打开一个根终端,以便您可以撤消更改。在关闭根终端之前,请在另一个终端中测试设置!

soduers

另一个答案所述。通过在shell中调用visudo来编辑/etc/sudoers

sudo select-editor # this is optional. it will allow you to select your default editor in shell
sudo visudo

然后改变这一行,它说的类似于这个:

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

转换为:

# root may gain root privileges
root ALL=(ALL) ALL

如果你确定你的根用户账户已启用,那么请删除这行。

默认用户是“admin”组的成员。如果你愿意,你也可以撤销用户的成员资格。只需按照我最后给出的链接操作,或者从/etc/group文件中的admin:x:120:defaultuser行中删除他的名字即可:

cp -n /etc/group /etc/group.bak && \
sed -i 's/\(admin:x.*\)defaultuser\(.*\)/\1\2/g' /etc/group

1@psusi:不,你错了。他可以删除它。正如他所说的“我已在Ubuntu中激活了root用户”意味着,他可以始终以root用户身份登录以获得访问权限。请纠正您对我的帖子的反对投票。 - con-f-use