如何更改用户pi sudo权限;如何添加具有不同权限的其他帐户?


14

由于我偶尔会通过SSH使用Pi,因此我了解到允许SSH访问sudo命令是危险的。因此,我计划在不久的将来关闭此许可。但是,当我安装软件包时,通常必须重新启动。当前,仅允许通过超级用户使用。

sudo reboot

有什么方法可以编辑pi用户的权限,以使其重新启动(和安装)软件包?

我可以拥有多个具有不同权限的帐户吗?

谢谢


1
提供的任何答案是否有帮助?他们中有人吗?然后,请标记为已回答。
安德斯

是。如果您仍然有兴趣,我将其更新到2017年6月-这个问题是在4年零2个月前提出的,它使我找到了今天解决问题的方法。看看下面的答案:
SDsolar

Answers:


22

澄清一下:没有“ sudo命令”,只有需要root特权才能正确运行sudo的命令,并且是一个命令获得它们的命令:sudo只需以root身份运行给定命令(必须将“ sudo”读为命令)句子“超级用户,做点什么!”)。有关哪些用户可以执行此操作的规则记录在中/etc/sudoers。在默认的Raspbian安装中,默认用户“ pi”已获得此行的权限:

pi ALL=(ALL) NOPASSWD: ALL

这意味着:“允许所有主机上的用户'pi'切换为所有用户,并且在使用ALL(read:any)命令时不必键入其PASSWD”。(我在这里使用了疯狂的语法来保留行的顺序..关于为什么有一种区分主机的注释:这样,同一sudoers文件可以分发到网络上的多台计算机上,因此网络管理员的工作量较少) 。

也许可以使用sudo来运行命令而无需发出管理员密码,这就是为什么您认为通过SSH使用sudo会很危险的原因(我还没有听说过这样做的一般问题...所以您可以解释您到底意味着什么危险?)。

确保您可以有多个具有不同权限的用户。但是,恐怕使用sudo仍然是管理这些权限的最佳方法。

因此,我希望这里是您需要的这个小食谱:

$ sudo adduser admin

这将创建一个用户“ admin”,询问密码,创建他的主目录,等等。

$ sudo adduser admin sudo
$ sudo adduser admin adm

这会将“ admin”用户放入“ sudo”和“ adm”用户组。并且由于在Linux中通过将用户添加到用户组来管理权限,因此,这为“管理员”用户提供了他所需的所有特权和权限。其中有一行代码,/etc/sudoers它允许用户组“ sudo”中的任何用户以root用户身份执行任何命令。而此特权正是管理员用户所需要的(将他添加到“ adm”中使他/var/log无需使用sudo其他操作即可读取一些日志文件)。sudo当您以admin身份登录时,仍然需要使用-但是sudo每次大约五分钟不使用sudo时,都会一次又一次询问管理员的密码。

现在注销并以“ admin”用户身份登录。检查是否

$ sudo apt-get update
$ sudo apt-get upgrade

作品。如果是这样,您可以撤消“ pi”用户的某些特权,因为现在您可以确定管理员用户具有正确的特权:

$ sudo deluser pi sudo
$ sudo deluser pi adm

这会将用户“ pi”从用户组“ sudo”中抛出。

$ sudo visudo

这将启动一个允许您进行编辑的编辑器/etc/sudoers#在以“ pi”开头的行之前放置一个哈希标记(),将其注释掉(或简单地将其删除)。然后保存并退出编辑器,然后visudo将立即重新加载特权规则。现在,用户“ pi”不再被允许使用sudo。

之后,您可以重新登录为用户“ pi”。如果您想切换到某些命令的管理员,请使用su(“切换用户”):

$ su - admin

如果要添加更多用户sudo adduser <name>,请使用上面的方法,然后检查用户“ pi”具有的用户组列表:

$ groups pi
pi : pi dialout cdrom audio video plugdev games users netdev input

使用sudo adduser <username> <groupname>你的新用户添加到几个这些用户组的,使他能够使用的音频,视频加速,使用可拔插设备,等等。如果不确定的话,他添加到所有这些群组中(而不是“命令”!)。


2
visudo是一个将使用默认编辑器编辑sudoers文件的命令。不带文件就编辑该文件可能会很麻烦,因此建议这样做。您可以通过发布sudo update-alternatives --config editor
EarthmeL13年

或者您可以VISUAL=vim visudo暂时尝试此操作。但是,这是更改默认程序(例如编辑器)的绝佳示例。
Anders 2015年

6

是的,您可以配置sudo为仅允许用户以其他特权运行某些命令。您可以在/etc/sudoers文件中更改此设置,但建议不要直接执行此操作,而应使用sudo visudo命令进行更改。

在默认的系统安装中,您应该找到以下行:

pi ALL=(ALL) NOPASSWD: ALL

它告诉sudo允许用户pi以用户身份运行所有cammand,root甚至不提供密码。您可以最后更改ALL并指定允许以逗号分隔的命令列表(及其完整路径)。在您的情况下,应将此行更改为:

pi ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /sbin/shutdown

请注意,还有另外一行会sudoers影响pi用户:

%sudo   ALL=(ALL:ALL) ALL

此行允许组中的所有用户sudo%名称前面的字符表示它是组名而不是用户名)运行所有密码,只要他们知道 自己的OWN 密码即可。如果您离开此行,则用户pi将能够运行所有其他命令,但将要求输入密码。

如果要防止这种情况发生,可以删除此行或pisudo组中删除用户。

更改/etc/sudoers文件后,您可能需要通过调用sudo -l -U pi命令来检查它是否确实满足您的要求。

当然,您可以创建不同的帐户并进行配置,以sudoers赋予他们访问不同命令的权限。


1

2018年5月,这在概念上仍然很准确,但是该过程在更高版本中已更改:

首先, 应在vi或nano或leafpad或emacs中直接编辑文件-以您喜欢的文本编辑器为准。

该文件中未提及用户名pi:

/etc/sudoers

文件的最后一行是这样的:

#includedir /etc/sudoers.d

这是一个目录,其中包含一个名为

010_pi-nopasswd

包含这一行

pi ALL=(ALL) NOPASSWD: ALL

只要我以pi用户身份登录,其效果就不会提示您输入任何sudo命令。(请注意语法必须完全是这种方式)

这很棒。

组线 %sudo ALL=(ALL:ALL) ALL仍然在那里

因此,回答问题的第一部分:

当我将文件/etc/sudoers/sudoers.d/010_pi-nopasswd文件移动到一个目录级别以使包含失败时,然后等待了15分钟,这导致我的Raspbian系统在使用sudo时提示输入我自己的密码,只是就像我以前使用的Ubuntu 14.04 LTS系统一样。

然后,当我将其移回其所属位置时,即使10分钟后,它也不再提示我。

无需重新启动。瞧,使用sudo时不提示输入密码

我的lubuntu 14.04 LTS测试系统具有相同的设置,只是没有010_pi-nopasswd文件。lubuntu是使用pi作为root用户安装的。每次我使用sudo时都会提示我,然后在10分钟后没有提示我。

我将相同的文件添加到Ubuntu系统中,就像Raspbian的设置方式一样(记住,当您仍处于10分钟的窗口中时,请记住该文件上的chmod 0440)-和

瞧,即使我在15分钟后以pi身份登录,它也不再提示我输入自己的密码。

同样,更改会立即发生,无需重新启动。

这是2018年5月的答案,说明当以root用户pi登录时如何禁用和启用使用sudo命令的提示。可以用相同的方式配置其他用户和组。

--Ubuntu 16.04 LTS的更新此系统也非常相似。但是,最大的区别是16.04的文件权限要严格得多,因此必须在su模式下完成工作。如果您忘记了root密码,则可以使用sudo passwd rootThen在正常提示下将其重置,该su命令将起作用,您可以从那里开始。


刚刚通过Google找到了-因此,如果我关注这一点,则该用户仍需要位于sudoers组中,但/etc/sudo.d控制了要求特定用户输入密码的频率?
lonstar

1
是的 知道了 成为成员sudoers通常是在创建用户时完成的。使用示例:您会注意到,通用命令字符串sudo apt-get update && sudo apt-get upgrade两次调用sudo,但令人讨厌的是,它可能会停止并在升级之前再次要求输入密码。因此,我将我的帐户设置为从不提示输入我的登录名(pi),然后再使用sudo apt-get update -y && sudo apt-get upgrade -y它,这样它也不会停止询问OK进行较大的更改。使它更像Unix。照我说的做,就算我走开也要完成。
SDsolar

0

允许通过SSH进行sudo访问比允许任何用户安装软件包更安全。如果您真的很担心,请将其更改为/etc/sudoers

pi ALL=(ALL) NOPASSWD: ALL

pi ALL=(ALL) PASSWD: ALL

这意味着您第一次在任何会话中使用sudo时都会提示输入密码,并且在几分钟后再次提示输入密码。您不能/etc/sudoers直接编辑;使用sudo visudo这样做。

看起来Krzysztof跳到那里回答了。您确定每次安装新软件包都需要重新启动吗?除非您要安装新的内核或固件,否则不需要重启。这是我们这里提供的优质操作系统...


3
提及timestamp超时是个好主意。默认是15分钟,顺便说一句。请注意,这PASSWD是默认值(如果NOPASSWD在此命令列表的前面未指定)。另外请注意,/etc/sudoers如果您知道自己在做什么,则可以直接编辑而不会出现问题。通过使用visudo临时文件进行更改,防止在更改中间自动写入文件(这可能会导致语法错误和/或安全问题),它会锁定此文件以防止同时进行多次编辑,并在写入文件之前进行一些语法检查。
Krzysztof Adamski 2013年

我认为OP更新很少使他总是获得新的内核……或某个同事每次都告诉他重新启动,因为他不想解释OP如何在更新列表中发现内核软件包。
orithena

TNX对此评论@Krzysztof。我在回答中做了更正。您是正确的编辑。实际上,在我的16.04计算机上,我只是将pi行直接放入sudoers文件中,因为sudoers.d仅包含一个自述文件。我之所以把它留在里面是因为,但是至少pi权限正在处理中。(我最喜欢的编辑器是VI / VIM,顺便说一句,但是有时会使用Leafpad或Idle。不再精通emacs了-15年了很长的时间-而且在vim中我可以比在emacs中做更多,更快的工作,到目前为止。)再次感谢您。
SDsolar '17

0

只是scruss所说的替代方法,/etc/sudoers.d/010_pi-nopasswd通过运行删除文件sudo rm /etc/sudoers.d/010_pi-nopasswd。然后,编辑主要的sudoers文件会更轻松,更安全,这会破坏sudo。

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.