为什么几乎所有内容都必须使用sudo?


64

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

它使我想起了Window的UAC,人们可以禁用它,也可以将其配置为不需要密码(只需单击即可)。此外,许多人的Windows用户也是管理员帐户。

另外,我看到有些人显示的命令要求sudo特权而没有sudo。他们是否以sudo不需要的方式配置了系统?


25
您需要使用sudo任何方式来进行涉及更改系统的操作,如果您仅在自己的文件/桌面上进行操作,则不会影响其他任何人,因此不需要提升的特权。如果您在不使用sudo的情况下执行特权命令,则您可能已经是超级用户(即root),通常不建议将sudo用于特定的系统级任务
Eric Renouf

75
“从源代码安装程序……普通用户可以做的任何事情” ---我认为您高估了普通用户的技术技能。
乔纳森·

7
sudo在不该使用的时候使用?普通的Unix用户命令应主要由cd,,ls移动,复制,删除和编辑他们有权访问的文件组成。如果您的常用命令不包含此内容,则您可能不是常规的Unix用户。
user530873

20
小提示:如果您执行某些需要sudo的操作,但忘记将sudo放入命令中,则可以使用sudo !!该命令重新运行最后一个在sudo前面键入的命令。
2015年

6
您是否不花费大部分时间使用已安装的软件?那不应该涉及sudo。如果没有,为什么要安装它?
OrangeDog

Answers:


75

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

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

作为那件事

普通用户所做的任何事情

在典型的多用户系统中,这些不是普通的用户操作。系统管理员会为此担心。然后,普通用户(非“特权”用户)可以使用系统而不必担心其维护。

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

使用起来真的有这么难sudo吗?请记住,如果只是您的系统,那么您没有理由既无法进入root外壳程序(sudo -s-参阅此帖子以获取获取根外壳程序的各种方法的概述)和/或配置为sudo不提示输入密码。


47
没有理由不配置sudo而不提示输入密码。我不建议您启动恶意脚本,使其能够充当系统的root用户。
AL

5
如果输入sudo密码使您非常烦恼,以至于您基本上可以自动引导密码输入,那么它也无济于事。您需要在理智与安全之间取得平衡。我已经自动驾驶sudo至少删除了操作系统的主要部分。
尼尔森2015年

33
就我个人而言,我喜欢sudo-这就像进行健全性检查。
Max Williams

6
@MaxWilliams,是的,确切地说,那是红色大按钮上面的透明塑料翻盖,问,你确定知道自己在做什么吗?
KlaymenDK

15
@AL:如果我要运行未知脚本,则最好不要恶意,否则无论是否运行sudo都会令我感到困惑。在我的个人桌面上,重要的是我自己的(非根)数据,而不是机器本身的(根)配置。
jrw32982

31

每当您执行标准用户不具备的能力时,都将使用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.

尤其是#2,在键入之前要三思。这是sudo存在的重要原因,当您键入命令并踢回“必须是root用户才能执行此操作”时,它会迫使您停止并思考您的实际操作。


19

另外,我看到有些人显示的命令要求sudo特权而没有sudo。他们是否以sudo不需要的方式配置了系统?

您必须以超级用户身份执行这些命令,但不必使用来执行它们sudo。例如,您可以改用sudoas(用OpenBSDs代替sudo),也可以简单地以root用户身份登录。

因此,如果他们在此处显示命令而没有sudo假定读者会以其最喜欢的方式以超级用户身份执行这些命令。
无疑,这并不意味着他们可以以普通用户身份执行这些命令。


4
您还可以使用sudo -i或类似方法获取root shell,然后开始运行您的root命令,而无需在每个命令前加上sudo
cas

2
通常的步骤,需要以root身份运行显示了根提示符例如# vi /etc/hosts,而不是一个非特权提示$ vi /etc/hosts(bash将按照惯例,如果您使用\$PS1
格特·范登贝尔赫

16

提供的一项安全功能sudo是您可以拥有一个没有root密码系统,从而使root用户无法直接登录。这为选择弱密码的用户提供了额外的保护-尝试通过SSH或其他方式强行破解密码的攻击者必须首先输入有效的用户名。

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


1
而且,即使配置了root密码,它也允许您授予用户访问需要root特权的命令的权限,而无需提供root密码,这意味着如果它是公司服务器并且被解雇,则只需禁用其用户,而无需更改root密码。
Gert van den Berg

13

关键是,从历史上看,系统实际上是由多个用户共享的,这些用户只需登录,执行一些操作然后注销即可。因此,管理员和普通用户之间的区别。这样的系统仍然存在于大学实验室中,如果您使用这样的计算机,您会感到与众不同。家用PC是您的唯一用户,而且恰好必须充当管理员,这实际上是后来的发展。


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

@Wildcard大声笑。我想举个例子,马上就跳到我的脑海。
xji 2015年

10

计算机是一种工具。让我们尝试使用另一个工具(例如煎锅)进行类比。有时,您必须照顾好煎锅。例如,您必须用洗洁精清洁。您会说洗碗皂是您使用煎锅的任何食谱中必不可少的成分吗?您将永远不会在烹饪书中看到“洗洁精”被列为成分。它是必需的,但是工具的准备是另一回事,因此烹饪书中没有提及它。煎锅必须清洁,但这不是它的用途。

您的计算机也是如此。必须对其进行配置和维护,但这并不是它的目的。您会照顾好它,对其进行配置,以便它可以正常工作。完成此操作后,您可以以用户身份使用它,而不是以系统管理员的身份使用。这就是它的目的。当您是用户时,就不再需要sudo了。只需使用预先准备的工具即可。当然,您有时需要使用root特权,就像您需要经常使用它来烹饪时一样清洁煎锅一样。

因此,没有夸大太多了,我们可以说,你永远需要须藤(或root密码)使用您的计算机。仅用于准备计算机。


2
很好的类比,但有时您需要肥皂才能从锅中取出一些烧焦的残骸,然后再炒鸡蛋,即,两者很容易连接。使用您拥有的计算机,您几乎可以立即用它“洗” /“炸”它,sudo也可以直接去做大厨su
Armfoot

似乎您应该需要root用户权限才能烹饪,因为这样做更危险。
deltaray

6

我敢打赌,这是因为您使用GUI软件执行除系统管理任务以外的所有操作,或者您在谈论Linux服务器,在这种情况下,大多数访问权限自然是系统管理。因此,可能需要执行shell所需的任何操作sudo

也可以将外壳用于日常任务。~使用Shell 管理个人文件,编辑文件,在IRC上聊天,编译代码,浏览网络,所有这些操作都可以在Shell中完成。我什至使用bc我的计算器。通过GUI可以更轻松地完成某些操作,而通过Shell则更容易完成某些操作-即使您更喜欢使用GUI,该Shell也会在批处理操作和自动化方面表现出众(例如shell脚本)。我个人使用最适合手头任务的工具。

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

我认为配置sudo为不需要密码不是一个好主意。它使使用一个错误键入的命令或恶意脚本破坏整个系统变得非常容易。

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


5

[...]但这似乎没有任何意义,因为无论我是管理软件包,编辑配置文件,从源代码安装程序还是拥有什么,我都必须输入sudo。[...]

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

在多用户设置中,您分别在/usr和下具有预安装的软件及其系统范围的配置/etc。触摸这些位置将需要root权限。但是由于考虑到Unix软件是针对多用户编写的,因此您可以在$HOME 目录2下编译和安装软件,并在自己的家中拥有自己的配置文件,在此您可以自由地编辑文件而无需超级用户。

除了在家中安装自己的软件之外,大多数系统范围的软件$HOME在首次从中读取配置后,都会立即从中读取用户特定的配置/etc。这使您无需进行任何操作就可以自定义大多数内容root

使用家用PC,您可以在一个主要用户设置中使用sudo并以自己的方式找到自己喜欢的东西。但是习惯上不要触摸应用程序配置,/etc而总是在家里提供用户特定的配置。这样,您可以允许软件包管理器在升级时重置系统范围的配置。在单用户设置中,在整个系统范围内安装新软件都可以。发行版软件包不采用替代方案,因此这是一个简单的方法。

我将让我的包管理器在全球范围内安装东西,但是所有我自己制作的从源代码编译和自制的东西都将留在$HOME。我不必为此而udo嘘。

如果您有数据文件,可以在外部存储$HOME,也可以随意使用目录chownchgrp名称目录,以便无需即可访问文件 sudo

[1](有点讽刺意味,因为Unix被认为是Multics操作系统的“单用户”版本)

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


2

在UNIX(以及后来的Linux)设计用于的多用户系统中,这些不是普通的用户操作。系统管理员可能会执行这些操作,但不是典型用户,因此系统会要求确保sysadmin实际上要执行此操作。

但是,即使在单用户家庭系统中,这些也不是普通的用户操作。最初设置系统时,通常可能必须执行这些操作,但是一旦完成,典型的用户就不必经常执行这些操作。大多数典型用户仅使用已安装的程序/软件包来处理其主目录(或其子目录)中的文件,而您不需要这样做sudo。或者它们可能在系统上为此目的预留的其他地方的特殊目录中工作,您需要sudo进行设置,但通常只需要执行一次即可。

为什么这么重要?因为“单用户”是用词不当:您不是计算机的唯一用户,即使您可能是计算机的唯一人工用户。即使在典型的家庭Linux安装中,也可以设置许多程序来以各种方式使用计算机,这些程序通常模拟人在有时间和精力的情况下可能会做的事情:备份,更新,恶意软件扫描以及喜欢。在大多数情况下,这些用途是完全良性的,但即使对于其中某些用途,仍然要确保用户真正想要这样做是谨慎的。当这些情况出现时,这就是sudo目的。计算机只是在签入,以确保确实是您想要执行某人(也许您,也许是程序)说过的事情。而且,这甚至还没有涉及恶意软件的可能性,您当然也不想伪装这种恶意软件。


1

这可能不像所表示的那样普遍,但是通常发生在内部偶然发生的事情需要更通用的特权系统调用来实现其结果的情况下,例如:

  • 卸下并随身携带USB随身碟。umount这是一个严肃的命令,因为您可以用它卸载很多东西。
  • 连接到本地无线网络。没什么特别的,但是网络配置(ifup,等)仅适用于超级用户。
  • 如果未更新,则拒绝运行的自我更新应用程序。更新=安装,这可能会安装很多东西,包括不需要的东西。

系统通常会不断发展以减少此类案件的数量。USB记忆棒现在可以用户安装,并且网络可以用户连接。但这并不总是这样。


0

假设:这是您的系统和数据。

您只需要权衡意外擦除数据或阻塞操作系统的风险,而不是sudo每次都无需键入就可以轻松完成工作。

我经常登录并以root用户身份在家庭服务器上工作,因为 我可以 更容易。

系统会告诉您,如果您不经过圣人,就可以发射核武器,sudo但现实是当今人们root在许多设备(电视,电话,烤面包机,Windows(例如您提到的))。Linux在这里没有什么不同,尽管许多人都认为不是。

BTW的UAC建模不是sudo因为它的角色(除了使您的生活痛苦),还可以确保您看到恶意软件何时想要代表您做事。

(*)root力量定义为核对重要数据的能力。格言是“权力越大,问题就越大”(或曾经发生过的话)。

如果我的假设是错误的,那么您仍然需要权衡上述风险,但是还有更多变量(您的工作,配偶拍摄的照片并存储在同一台笔记本电脑上,...)


1
根本权力不是核查重要数据的能力。您可以始终rm -rf ~/没有任何特殊权限。另一方面,如果不先扎根手机或电视,就无法对手机或电视进行砌砖。
德米特里·格里戈里耶夫

设备与它存储的数据及其提供的服务一样有用。下面的硬件和操作系统仅是商品。因此,强大的功能可以影响服务或数据。在电视上,您可以删除所有设置-电视无法使用(在恢复数据之前)。您可以删除手机上的所有数据,然后手机将成为硬件,无需任何使用。这就是我所说的“根本力量”
WoJ 2015年

1
确实,称这种“根源”为滥用。“ root”一词已经被重载,表示至少三个不同的东西(root用户,/目录和/ root目录),添加另一个是无济于事的。在单用户计算机上,即使非特权用户已经可以删除自己的文件,但是他无法执行某些管理任务而不使用sudo仍然可以保护他免受各种不良影响。
蒙迪·哈德2015年

1
您的电视类比不好。删除电视上的设置就像在Linux上删除用户的配置文件一样-通常这样做只会使系统根据该用户的默认设置运行,通常不会对系统造成任何损害。通过根目录,您可以修改系统本身-在电视上就像修改固件一样,在这种情况下,您可能会破坏它的实际运行能力。
JBentley

1
这就是为什么要进行风险评估的原因。您评估做某事的风险(有其优点和缺点),并接受,减轻或保证。恢复可以是简单的(docker,VM快照),也可以是困难的(从头开始安装)-这是计划和评估的问题。但是正如您提到的,我不了解root访问的含义。
WoJ 2015年

0

为了捍卫最初提出问题的人,过去几年来我曾提出过同样的问题,但是我采取了不同的方法。

这里的大多数答案都可以循环播放,因为它们都一直在强调有关sudo和root的观点。让我对此主题添加不同的观点:

我从内而外学习Unix和Linux的方法是将其中一台计算机用作“豚鼠”。我将安装SCO Linux,并最终安装Solaris,然后再安装Linux,之后我将一直以root用户身份愉快地进行试验,以便我可以读取和/或浏览目录层次结构以及具有不受限制的访问权限的所有文件,并在自己的家庭中创建“普通用户”帐户-增长的多用户Box,即使我是唯一的用户。我很高兴我这样做了。我对“ Unix哲学”和实验打算使用Unix的方式学到了很多东西。

我对安全性有了深刻的了解,还通过在终端中以root身份键入rm -rf / *来运行危险命令。(不要这样做!它会占用您的系统!!)我做了类似的事情以及许多其他命令,只是为了实时观察会发生什么。我做这些事情之前就已经知道后果了,但是我仍然从中学到了很多。在网络还没有出现之前,我就在使用SCO Unix LONG(是的,我那年纪大了!),尝试这种方式对我的学习非常宝贵。

因此,我要说的是,如果您不介意在出现问题时进行重新安装,请全部使用su或root用户身份登录并配置/破解!这样您将学到很多东西。

请记住,在这里重复了很多次的建议是有充分理由的:随着compsec的发展,最佳实践协议已经发展了几十年,您甚至应该以系统的家庭/单个用户的身份关注它们。这样,良好的系统管理员卫生/习惯将成为您的第二天性。

只是一些关于su和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.