SDB:以 root 用户身份登录

跳转到:导航搜索

情况

在Unix/Linux系统中,有一个用于系统管理的特殊用户。这个用户的UID是0,用户名为root。它也被称为“超级用户”。在日常生活中,它简单地被称为:root。Root可以做任何事情,因此以root身份犯的任何错误都可能毁掉一个系统。此外,当未经授权的人成为root时,你就完蛋了。


一位客户的原话,应作为警告

... now an accident happened to me, because I've worked as root. With the
hope of getting any sound, I have typed "ls > /dev/hdb2" instead of
"/dev/dsp" by mistake - unfortunately, /dev/hdb2 is my root partition.

备注:/dev/hdb2 *曾是*他的根分区。但是,除了幸灾乐祸,我们也深表同情 ;-)


多年的Unix和Linux系统经验得出结论,以root身份在系统上进行“正常”工作是不安全的。

  • 以root身份在系统上进行“正常”工作(意外做坏事的风险太高,且用户数据和系统数据混杂会严重污染系统),并且只在真正需要时才成为root。
  • 不要直接以root身份登录,尤其是在使用网络时(有嗅探的危险),此规则有一些例外,我们稍后会解释。

流程

我们将研究如何在openSUSE中遵守这些规则。

不要在日常工作中使用root

openSUSE助您一臂之力

在安装过程中,系统会要求您向用户数据库添加至少一个普通用户。这是您应该用于日常工作的用户,例如登录GUI(例如KDE或Gnome),以及处理邮件、播放音乐、上网等。我们将此用户ID称为:happy,以代表您作为快乐的openSUSE用户。

通过点击列出的用户以root身份登录GUI,这并非易事,这是有意为之。当您被告知不要更改此设置时,您不会感到惊讶。

还能做些什么

当有更多人使用系统时(例如您的丈夫、孩子),给他们每个人一个用户ID。这样他们就可以在磁盘上拥有自己的空间,不被他人触及,因此他们可以自行选择桌面管理器、壁纸等。虽然此建议与我们的root用户问题只有远距离关联,但它显示了“普通”用户和root之间的优势区别。可以有许多普通用户,但只有一个root。并且root密码的知识必须受到限制!只有一个“普通”用户(happy)的情况是多用户Linux的一种特殊情况。这导致了以下建议。

考虑为系统管理员的任务和数据安装一个用户。我们称这个用户为:admin(例如)。现在,您可以在系统管理员的角色中完成和存储那些不需要以root身份完成的事情,将其与您作为happy用户完成和存储的事情分开。

顺便说一句,您可以使用YaST > 安全和用户 > 用户管理来引入用户。

通过网络

在我们继续之前,首先提一下网络。由于Telnet、Rsh和Rlogin等协议在当今网络中即使是日常使用也被认为非常危险,因此,切勿在您以任何方式通过它们发送root密码时使用此类协议。始终使用ssh等安全协议。

不要直接以root身份登录

所有成为root的操作都会要求您输入root密码。这不仅是为了防止其他人成为root,也是为了提醒您在接下来的操作中要特别小心。

我们之前已经讨论过在GUI中以root身份登录。这在openSUSE中并非易事,而且理应如此。这并不意味着我们不能使用面向GUI的程序来管理我们的系统,即使它们需要root权限。

自行处理此问题的程序

一个例子是YaST。当YaST启动时,它会发现自己不是以root身份运行,然后会请求root密码,之后将以root身份继续。当YaST完成所有操作后,不会留下任何root进程。


一些程序有特殊选项可以生成这种类型的动作,例如

  • konsole --type su将启动终端模拟程序Konsole,在终端窗口中请求root密码,它还将使用不同颜色的背景来提醒您root状态;
  • konqueror --profile filemanagement将请求root密码并打开一个文件管理窗口。

这些例子无需牢记,因为当您前往KDE 菜单 > 系统 > 终端 > 终端程序(系统管理模式)时,将启动第一个例子,同样,KDE 菜单 > 文件管理 > 文件管理器(系统管理模式)将启动第二个例子。

使用kdesu/gnomesu启动任何GUI程序

您可能知道可以通过KDE 菜单 > 执行命令或按键组合Alt-F2来执行命令。使用kdesu开头,后面跟着您要以root身份执行的命令(程序名称),例如:kdesu xterm将启动同名的(有点过时的)终端模拟器,但请注意:您在那里输入的内容是以root身份输入的!Gnome的等效命令是gnomesu


以这种方式启动Firefox然后上网冲浪和下载可能不是一个好主意。因此,请了解您以root身份运行什么以及为什么运行。

在终端会话期间以root身份执行命令

在Linux中,使用命令行非常普遍,尤其是对于root用户。如上所述,您可以直接以root身份启动CLI(命令行界面)终端模拟器(konsole,xterm),但当您并非一直输入需要root权限的语句时,最好以admin/happy身份启动终端模拟器,并将root权限的使用限制在必要的语句上。为此使用sudo语句,例如

sudo /etc/rc.d/apache2 restart

Apache重启完成后(您通常会看到此操作期间生成的任何输出),您将再次成为admin/happy用户。要编辑fstab,您可以使用sudo vi /etc/fstab。但如果那是您喜欢的编辑器,kdesu kwrite /etc/fstab也是一个选项。

在终端会话期间以root身份执行带有GUI的命令

要以 root 身份启动 GUI 程序,您需要访问由您登录用户拥有的 DISPLAY。sudo xeyes 命令会给出:unable to open Display:。为了解决这个问题,您可以使用 -E 选项启动 sudo 以保留环境。要使其永久生效,请遵循以下步骤:sudo /usr/sbin/visudo 找到包含 Defaults env_keep= " LANG LC_ADDRESS ... 的行,将 DISPLAY 和 XAUTHORITY 添加到此列表中。现在该行的开头看起来像这样:Defaults env_keep = "DISPLAY XAUTHORITY LANG LC_ADDRESS ... 保存文件,现在您可以输入 sudo xeyes,而无需 -E 选项。

更长的root终端会话

当需要更长的root访问时,使用su命令。一个新的shell将以root权限启动。强烈建议使用选项-(或-l--login),因为它将root的shell作为登录shell启动。这意味着在正常登录期间运行的所有初始化都会完成,并且其中包括为您提供正确的PATH变量。如果不这样做,您将拥有happy/admin的PATH变量,其中可能包含意外的目录,这些目录可能包含危险的可执行文件。最臭名昭著的是目录.(您的工作目录)。当普通用户例如在/tmp/或其主目录中创建一个名为ls的脚本,其中包含

Icon-warning.png
警告:以下代码是一个反例,说明什么不应该做。如果您运行以下代码,它将破坏您的系统,删除所有内容。以下代码可与deltree C:\相媲美
#!/bin/sh
cd /
rm -rf *

/tmp/或他/她的主目录中,root可能会无意中擦除整个系统。即使.是PATH中的最后一个目录,也无法避免因打字错误而无意中调用本地程序(例如,输入la而不是lsi -a)。因此,要以root身份进行更长的会话

happy@system:~> su -
Password:
system:~ #

请注意不同的提示符(在某些终端模拟器中甚至显示为红色)。要结束您的root会话

system:~ # exit
logout
happy@system:~>

真实的控制台

读者应该明白,本节最初是在 SysVint 时代,也就是 systemd 之前创建的。尽管 Linux 子系统随着 systemd 发生了根本性变化,但只要 systemd 支持大多数遗留概念,本节在很大程度上仍然有效,但可能并非总是如此,读者应该警惕例外情况。在大多数情况下,tty1 和 tty7(alt-ctl-f1 和 alt-ctl-f7,在某些机器上还需要添加 fn 键)在大多数时候仍然可以预期,但可能并非总是如此,现在新的显示很可能会在 tty2、tty3 等而不是 tty8、tty9 等上调用。Lennart Poettering 的以下博客解释了这一点。

http://0pointer.de/blog/projects/serial-console.html

.


您系统的真实控制台是您已经熟悉的键盘屏幕组合,因为它也用于您的GUI。为了允许多重使用,有几个“逻辑屏幕”可用。这些可以通过组合键Ctrl-Alt-Fn访问。您的GUI通常在Ctrl-Alt-F7。您可以同时拥有第二个(或更多)GUI登录,在Ctrl-Alt-F8等处找到。真实控制台在Ctrl-Alt-F1。当您在启动后第一次尝试此组合键时,您将看到该启动的最后几行输出和一个终端登录提示符。这与终端仿真器相同(以admin/happy身份登录并使用sudo和/或su,但不能使用kdesugnomesu)。


在Ctrl-Alt F2 ... Ctrl-Alt-F6处还有更多的终端登录等待着您,但它们不太美观,几乎没有人使用它们(也许当1号崩溃时会使用其中一个)。


由于真实的控制台很难被嗅探,您可以直接以root身份登录此控制台。当您的/home无法访问时(如果它在单独的分区上,这是好事,它可能因为问题或在例如更新/安装期间需要而被卸载),这甚至可能是必要的。那时您无法以普通用户身份登录。但root的主目录不在/home中,它在/中。这是这样做的一个原因。

参考书目

  • Simson Garfinkel 和 Gene Spafford 著《实用 UNIX 安全》(O'Reilly 系列,ISBN 0-937175-72-2)
  • Æleen Frisch 著《系统管理精要》(O'Reilly 系列,ISBN 1-56592-127-5)
  • Deborah Russell 和 G.T. Gangemi Sr 著《计算机安全基础》(O'Reilly 系列,ISBN 0-937175-71-4)

链接

<keyword>root,login</keyword>