sudo服务有什么作用?


17

据我所知,似乎其他人也有相同的看法,这 sudo是一个执行具有管理特权的命令的命令。

但是,当我运行时,rcconf我可以看到以下行:

[*] sudo    Provide limited super user privileges to specific users

那么,这项服务有什么意义呢?还是这甚至是一项服务?


这是我在搜索google-> Sudo时
adi 2012年

“这是sudo的用处-它允许授权用户(通常是“管理员”用户;有关更多信息,请参阅AddUsersHowto)以root身份运行某些程序,而无需知道root密码。” -这正是我在问题中所说的。
s3v3n 2012年

3
问题是关于服务的,而不是命令的
s3v3n 2012年

Answers:


22

简短答案

在重新启动时撤消用户的“缓存”身份验证操作。它不是守护程序,只是在启动时运行的脚本。


广泛的答案

通过检查/etc/init.d/sudo“启动服务” 的初始化文件,您可以轻松地看到它在做什么:

case "$1" in
  start)
        # make sure privileges don't persist across reboots
        if [ -d /var/lib/sudo ]
        then
                find /var/lib/sudo -exec touch -t 198501010000 '{}' \;
        fi
        ;;
  stop|reload|restart|force-reload)
        ;;
  *)
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

因此,基本上,它只是/var/lib/sudo在系统启动时触及一些文件,以使其具有很旧的修改时间戳。结果,在服务启动时(在启动时发生)撤销了“缓存的”授予的身份验证操作。

请提供有关/var/lib/sudo目录和那些时间戳的更多详细信息?好吧,从以下地图来看sudo(8)

[...]
Once a user has been authenticated, a time stamp is updated and the
user may then use sudo without a password for a short period of time
(15 minutes unless overridden in sudoers).
[...]
Since time stamp files live in the file system, they can outlive a
user's login session.  As a result, a user may be able to login, run a
command with sudo after authenticating, logout, login again, and run
sudo without authenticating so long as the time stamp file's
modification time is within 15 minutes (or whatever the timeout is set
to in sudoers).
[...]
/var/lib/sudo           Directory containing time stamps

完美答案:)
s3v3n 2012年

12

sudo服务文件存在以确保重新启动后不会保留要求的特权。基本上,它保证了重新引导后,需要root权限的普通用户将保留为普通用户。


关于sudo的详细说明

下面所有的解释是为所有阅读此问题的人提供所有信息,然后解释service文件夹中的sudo文件在做什么。

当您安装Ubuntu或任何其他发行版时,使用root和成为用来获得“ root like”特权(管理或超级用户特权)的用户sudo的区别是:sudo

作为根

  • 系统不会询问您在会话中运行的每个或所有命令的密码
  • 默认情况下,并非您执行的所有命令都会被记录
  • 系统假定您知道自己在做什么(原因为何每次执行命令时都不会要求输入密码)
  • 如果您犯了错误,则没有第二次机会或最后一分钟的选择

作为须藤

  • 要求您为会话中运行的每个或所有命令输入密码。例如,如果您打开终端并执行需要管理特权的命令,它将为该会话询问一次密码,直到您关闭终端或注销为止。这取决于您使用的命令和位置。它可能会询问一次或多次。
  • 由于您实际上是在请求使用超级用户特权命令的权限,因此您执行的所有命令都会被记录下来。
  • 系统假定您暂时请求许可,并且管理权限将被暂时借用(直到您注销,关闭终端等。)
  • 您可以在最后一分钟选择更正任何错误。在要求您输入密码时即完成此操作。

为什么创建SUDO

之所以创建SUDO,是因为过去使用root产生的问题多于解决方案。用户拥有所有的权利,这意味着,如果他们做了一些春天的清理和字面删除/usr/lib/bin文件夹(因为他们认为他们没有需要他们)..猜会发生什么。过去的许多问题是因为用户不知道使用root时拥有的功能。基本上他们有root但不了解Linux,文件系统层次结构,重要的文件等等。(有点像是一辆法拉利,却不知道如何在高速公路上开车!)

当GUI应用程序(如Update Manager)需要临时管理特权才能执行某项操作时,SUDO也会使用它们。他们只需要特定数量的命令(通常为1),然后便可以返回用户级别特权。这是为了避免始终拥有root特权,并且避免在用户决定删除系统的某些重要部分时犯错误。

此外,由于默认情况下禁用了root用户,因此它提供了更好的安全性。

最后,如果您有一台台式PC或服务器,您确实不希望每个人都成为root用户,也不希望拥有所有管理员权限。如果您的小妹妹或小兄弟开始怀疑如果/boot遇到DEL钥匙,将会发生什么,这是一个非常糟糕的主意。这是sudo为了减少发生不良情况的机会。

是什么给特定的用户提供有限的超级用户权限的意思吗?

一个或多个sudo用户实际上有一个配置文件,该文件告诉他们特定用户的sudo命令的限制或打开程度。该文件/etc/sudoers具有限制或授予sudo用户访问权限的所有信息。默认情况下,它具有对所有内容的访问权限,但是您可以根据需要配置或限制它。

有关如何man sudoers在终端中使用sudoers文件类型的信息。例如,正常格式为:

用户主机=命令

例如,cyrex server1 = /bin/ls将授予主机server1中的用户cyrex访问运行ls命令的权限。

例如,cyrex server1 (root) = /bin/ls将授予主机server1中的用户cyrex访问权,以root身份运行ls命令。

例如,cyrex ALL = /bin/ls将给所有主机中的用户cyrex访问以运行ls命令。

例如,cyrex ALL = ALL将使用户cyrex在所有主机中具有运行所有命令的权限。

例如,luis ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall允许我以root身份为killand killall命令运行sudo 而不要求输入密码。

在此处输入图片说明


2
他知道sudo命令的作用。问题是关于sudo的系统服务。
gertvdijk 2012年

1
@gertvdijk-我必须首先解释基础知识,因为不仅他会研究这个问题。最后一部分包括我在服务文件夹中看到sudo文件的唯一原因。
路易斯·阿尔瓦拉多

感谢Luis Alvarado-The Wolver提供了如此广泛的信息,并感谢引用了bang bang运算符的有趣的修改后的xkcd!!,但是该服务(不是命令)sudo有什么作用?如果您可以更新答案以真正回答问题,那就太好了。
s3v3n 2012年

1
有点
矫kill

1
@ LuisAlvarado-TheWolverine哈哈,你的权利。很好,您回答我是,我做了 ..谢谢
Lucio 2012年
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.