当前位置: 首页>>技术教程>>正文


sudo 服务有什么作用?

问题描述

据我所知,other people have the same opinion sudo 似乎是一个以管理权限执行某些操作的命令。

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

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

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

最佳方案

简短回答

撤销用户重启时的’cached’认证操作。它不是守护进程,只是在启动时运行的脚本。


广泛的答案

通过检查“启动服务”的初始化文件 /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 中的一些文件,使其具有非常旧的修改时间戳。因此,’cached’ 授予的身份验证操作将在服务启动时被撤销(这在引导时发生)。

有关 /var/lib/sudo 目录和时间戳的更多详细信息,好吗?好吧,从 sudo(8) 的Map页面来看:

[...]
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

次佳方案

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


关于sudo的详细解释

下面的所有解释都是为了为阅读此问题的每个人获取所有信息,然后解释服务文件夹中的 sudo 文件在那里做什么。

当您安装 Ubuntu 或使用 sudo 的任何其他发行版时,root 与使用 sudo 获取 “root like” 权限(管理或超级用户权限)的用户之间的区别如下:

作为根用户

  • 在会话中运行的每个或所有命令都不会要求您输入密码

  • 默认情况下,并非所有您执行的命令都会被记录

  • 系统假设您知道自己在做什么(每次执行命令时它不要求输入密码的原因)

  • 如果您犯了错误,就没有第二次机会或最后一刻的选择

作为须藤

  • 系统会要求您输入在会话中运行的每个或所有命令的密码。例如,如果您打开终端并执行需要管理权限的命令,它将询问该会话的密码一次,直到您关闭终端或注销。这取决于您使用的命令和位置。它可能会询问一次或多次。

  • 您执行的所有命令都将被记录,因为您实际上是在请求使用超级用户特权命令的权限。

  • 系统假设您暂时请求许可,并且管理权限将暂时借出(直到您注销、关闭终端等..)

  • 您可以在最后一刻选择纠正任何错误。这是在您被要求输入密码时完成的。

为什么创建 SUDO

SUDO 的创建是因为在过去,使用 root 带来的问题多于解决方案。用户拥有所有权利,这意味着如果他们进行一些春季清理并从字面上删除 /usr/lib/bin 文件夹(因为他们认为不需要它们)..猜猜会发生什么。过去的很多问题都是因为用户不知道自己在使用root时所拥有的权限。基本上他们有root权限,但不了解Linux、文件系统层次结构、哪些文件重要等等。(就像拥有一辆法拉利却不知道如何在高速公路上开车一样!)

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

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

最后,如果您有台式电脑或服务器,您确实不希望每个人都是 root,也不希望拥有所有管理员权限。如果您的小妹妹或小兄弟开始想知道如果 /boot 遇到 DEL 密钥会发生什么,那就太糟糕了。这就是 sudo 发挥作用的地方,以减少发生不良情况的可能性。

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

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

有关如何在终端中使用 sudoers 文件类型 man 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 身份运行 sudo 执行 killkillall 命令,而无需输入密码。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13951.html,未经允许,请勿转载。