为什么我必须对几乎所有事情都使用 sudo?

use*_*248 76 sudo

如果我正确理解 Linux 哲学,sudo应该谨慎使用,并且大多数操作应该作为低权限用户执行。但这似乎没有意义,因为我总是不得不输入sudo,无论是管理包、编辑配置文件、从源代码安装程序,还是你有什么。这些甚至都不是技术性的东西,只是普通用户所做的任何事情。

它让我想起了 Window 的 UAC,人们要么禁用它,要么配置为不需要密码(只需单击一下)。此外,许多人的 Windows 用户也是管理员帐户。

另外,我看到有些人显示sudo不需要sudo. 他们是否以sudo不需要的方式配置了他们的系统?

roa*_*ima 76

你提到了这些系统管理功能

管理包、编辑配置文件、从源代码安装程序

作为事物

普通用户所做的任何事情

在典型的多用户系统中,这些不是普通的用户操作;系统管理员会担心这一点。普通用户(不是“特权不足”)可以使用该系统而无需担心其维护。

在家庭系统上,是的,您最终必须管理和使用系统。

用起来真的有那么难sudo吗?请记住,如果这只是您的系统,那么您没有理由不能弹出rootshell(sudo -s-有关获取 root shell 的各种方法的概述,请参阅此帖子)和/或配置为sudo不提示输入密码。

  • *没有理由不能[...] 配置 sudo 以不提示输入密码。* 我不建议这样做,如果您启动恶意脚本,它将能够在您的系统上以 root 用户身份运行。 (48认同)
  • 我个人喜欢`sudo` - 这就像一个健全的检查。 (34认同)
  • @AL:如果我要运行一个未知的脚本,它最好不是恶意的,否则无论它是否运行 sudo 我都被搞砸了。在我的个人桌面上,重要的是我自己的(非根)数据,而不是机器本身的(根)配置。 (15认同)
  • @MaxWilliams,是的,正是红色大按钮上的透明塑料翻盖问,呃,你确定你知道你在做什么吗? (7认同)
  • 如果输入 sudo 密码让您非常恼火,以至于您基本上自动引导密码输入,那么它也无济于事。您需要在理智与安全之间取得平衡。我已经自动驾驶 sudo 至少一次删除了操作系统的主要部分。 (5认同)
  • @KalleMP 我不是这么说的;我是说在我的个人桌面上,我自己的文件比系统本身(根保护文件)更重要。如果我运行一个不可信的脚本,我可能已经失去了游戏(我的数据),无论脚本是否可以通过使用 sudo 获得 root 访问权限而无需使用密码。因此,在我的场景中,使用 NOPASSWD sudo 配置对我来说是一个很大的便利,并且不会损失安全性。 (3认同)
  • @AL 我也不会在生产系统上这样做。但是对于在我的笔记本电脑上运行的非必要 VM,它有很多优点。这就是我喜欢 `sudo` 的原因——它是可定制的,所以一些命令 cab 可以无密码运行,但其他命令需要安全检查。 (2认同)
  • @KlaymenDK:同意。对我来说,输入“sudo”(不输入密码)是红色大按钮上的透明塑料小翻盖。我在个人桌面上将 sudo 设置为 NOPASSWD。 (2认同)
  • @jrw 这就是为什么你有磁盘外备份的原因,不是......? (2认同)
  • @klaymenDK - 和 `sudo su -` 是“我不知道我在做什么,无论如何让我一个人呆着”按钮。尽管我同意 @jrw32982 ......在一天结束时,我们大多数人只是在出现提示时执行 `sudo !!` 并且不检查脚本内容。在那种情况下它*真的*保护我们吗?当我们决定完全运行脚本时,我们可能受到了影响。 (2认同)
  • @jrw32982:会有一些攻击,比如安装键盘记录器,这会影响恶意脚本是否获得 sudo。但这是输得很惨和输得很惨之间的区别:就像你说的,如果 sudo 是你的防线,那么你肯定输了。需要密码可能会影响您损失多少。 (2认同)

Gra*_*avy 33

每当您执行标准用户不应有能力执行的操作时,就会使用 Sudo/Root,以免以系统管理员通常不允许的方式损坏/更改系统配置。

无论我是管理包、编辑配置文件、从源代码安装程序,还是你有什么。

从技术上讲,所有这些都是管理功能,如果执行不正确的操作,可能会严重损坏您的系统。在公司环境中,作为系统管理员,我不会让我的用户在我不知情的情况下做这些事情,因此 sudo。

例如,如果可以在没有提升权限的情况下修改包/配置文件,那么对于外部源来说,简单地执行可能会破坏/危害您的系统的远程代码将是非常简单的。通过强制这些操作需要 root 访问权限,它会强制您作为用户来决定是否发生这些操作。

UAC与 windows非常相似,它实际上是 windows 获得UAC.

您第一次使用 sudo 时收到的报价非常合适,而且非常重要:

我们相信您已经收到了当地系统管理员的常规讲座。通常归结为以下三点:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Run Code Online (Sandbox Code Playgroud)

尤其是#2,打字前要三思。这是 sudo 存在的一个重要原因,当您键入一个命令时,它会反击“必须是 root 才能执行此操作”,它会迫使您停下来思考您实际在做什么。


Tho*_*ner 20

另外,我看到有些人显示sudo不需要sudo. 他们是否以sudo不需要的方式配置了他们的系统?

您必须以超级用户身份执行这些命令,但不必使用sudo. 例如,您可以改为使用sudoas(OpenBSDs 替换为sudo),或者您可以简单地以 root 身份登录。

因此,如果他们在这里显示他们的命令而sudo不是他们假设读者将只是使用他最喜欢的超级用户身份执行这些命令的方式。
这当然并不意味着他们可以作为普通用户执行这些命令。

  • 您还可以使用 `sudo -i` 或类似方法来获取 root shell,然后开始运行您的 root 命令,而无需在每个命令前加上 `sudo` (4认同)
  • 通常需要以 root 身份运行的步骤显示为 root 提示符,例如 `# vi /etc/hosts` 而不是非特权提示符 `$ vi /etc/hosts`(如果你使用 `\$`,Bash 将遵循约定在“PS1”中) (2认同)

Dmi*_*yev 17

提供的一项安全功能sudo是您可以拥有一个没有root密码系统,因此root用户无法直接登录。这为选择弱密码的用户提供了额外的保护——试图暴力破解密码(通过 SSH 或其他方式)的攻击者必须首先确定一个有效的用户名。

另一方面是更细粒度的权限管理。以 root 身份考虑make; sudo make installvs 做make; make install。期间很多事情都可能出错make。配置不当的工具可能会尝试覆盖重要的系统文件、“清理”/lib而不是当前目录、消耗所有可用 RAM 并挂起系统等,这make install是一个很小的简单操作,发生致命错误的可能性要小得多。


xji*_*xji 15

关键是,从历史上看,一个系统实际上是由多个用户共享的,这些用户只是登录、做一些事情然后注销。从而区分管理员和普通用户。这样的系统仍然存在于大学实验室中,如果您使用这样的计算机,您会明显感觉到差异。您是唯一用户并且碰巧必须充当管理员的家用 PC 确实是一个较晚的开发。

  • “仍然存在于大学实验室中”……是的,地球上每个以技术为中心的公司,以及大多数非技术公司也是如此。尽管如此,+1 给出了 OP 显然缺失的确切区别,而大多数其他回答者都没有强调。 (6认同)

小智 12

电脑是一种工具。让我们尝试用另一种工具进行类比,比如说煎锅。有时,您必须照顾好您的煎锅。例如,您必须用洗洁精清洁它。您会说洗洁精是您使用煎锅制作的任何食谱的必需成分吗?你永远不会看到“洗洁精”列为烹饪书中的一种成分。是需要的,但是工具的准备是另外一回事,所以烹饪书上没有提到。煎锅必须清洁,但这不是它的用途。

这对你的电脑来说是一样的。它必须被配置和照顾,但这不是它的目的。你照顾它,你配置它,所以它可以正常工作。完成此操作后,您可以使用它,而不是作为系统管理员,而是作为用户。这就是它的目的。当您是用户时,您不再需要sudo。只需使用您事先准备好的工具。当然,有时您需要使用 root 权限,就像您必须像使用煎锅一样经常清洁煎锅一样。

因此,毫不夸张地说,我们可以说您永远不需要sudo(或 root 密码)来使用您的计算机。只准备你的电脑。

  • 很好的类比,但有时在煎炒鸡蛋之前,您需要用肥皂从锅中取出一些令人讨厌的烧焦残留物,即两者很容易连接。使用您拥有的计算机,您几乎可以立即使用 `sudo` 对其进行“清洗”/“煎炸”,或者您只需去主厨做一个 `su`。 (2认同)

Mat*_*nen 7

我敢打赌,这是因为您将 GUI 软件用于除系统管理任务之外的所有任务,或者您正在谈论 Linux 服务器,在这种情况下,大多数访问自然是系统管理。因此,感觉就像在 shell requires 中做任何事情一样sudo

也可以将 shell 用于您的日常任务。管理您的个人文件~、编辑文件、在 IRC 上聊天、编译代码、浏览网页,所有这些都可以在 shell 中完成。我什bc至用作我的首选计算器。有些事情通过 GUI 更容易完成,有些事情通过 shell 更容易完成——即使你更喜欢使用 GUI,shell 通常在批处理操作和自动化方面表现出色(想想 shell 脚本)。我个人使用最适合手头任务的方法。

在某些情况下,设置您的系统是个好主意,这样您就不需要sudo每次都使用默认情况下需要 root 但不太可能导致问题的操作。一个例子是,我使用涉及使用串行端口的硬件,并且我已经设置了 udev 规则,以便以我的普通用户身份访问设备,而不必是 root。

我认为配置sudo为不需要密码不是一个好主意。使用一个错误输入的命令或恶意脚本很容易弄乱整个系统。

如果您需要始终执行绝对需要 root 的任务,为什么不在sudo -s终端窗口中运行持久的root shell?然后它就可以使用而无需输入密码,并且不那么容易意外使用。我什至在 root shell 中将我的 shell 提示设置为鲜红色。


mik*_*996 6

[...] 但这似乎没有意义,因为我总是不得不输入 sudo,无论是管理包、编辑配置文件、从源代码安装程序,还是您有什么。[...]

与所有这些相关的隐含形容词是它们是系统范围全局的变化。您必须将 Unix 的起源视为一个多用户系统1,其中多个用户将远程使用相同的安装。一个外行用户允许更改所有用户的全局设置是没有意义的。这是系统管理员的、根的、特权和责任。

在多用户设置,你有预装软件,并在他们的系统级配置/usr/etc分别。触摸这些位置需要 root 权限。但是由于Unix软件是考虑多用户编写的,所以你可以在$HOME 目录2下编译安装软件,并且在你的家下有你自己的配置文件,你可以在那里自由编辑文件,而不是超级用户。

除了在家里安装自己的软件外,大多数系统范围的软件会$HOME在第一次从/etc. 这使您可以自定义大部分内容而无需进行任何操作root

使用家用 PC,在单个主用户设置中,您可以使用sudo自己喜欢的方式并根据自己的喜好进行设置。但它习惯以不接触的应用程序配置/etc,而是始终提供家庭用户特定的配置。这样你就可以让你的包管理器在升级时重置系统范围的配置。在单用户设置中,在系统范围内安装新软件非常好;发行版软件包不假设替代品,因此这是一个简单的出路。

我会让我的包管理器在全局安装东西,但任何从源代码编译的东西和自制的东西我都留在$HOME. 而且我不必为此执行任何操作。

如果您有外部的数据文件,存储$HOME,随意chownchgrp目录到你的名字,所以你可以访问这些文件没有 sudo

[1](有点讽刺,因为 Unix 本来就是 ​​Multics 操作系统的“单用户”版本)

[2](如果系统允许通过不将主分区挂载为 noexec)