以root特权身份运行命令,对初用linux 很又用

来源 :http://book.csdn.net/bookfiles/1056/100105631562.shtml

1.1 以root特权身份运行命令

有些命令可能会损坏文件系统或者让操作系统瘫痪,还 有一些命令可能会侵犯用户的隐私或者降低系统的安全性。为了让系统始终可用,同时能够安全地运行,Ubuntu被配置成不允许普通用户执行某些命令以及访 问特定文件。为了让系统信任的用户执行这些命令以及访问这些文件,Linux提供了几种方法。系统信任的默认用户具有这些全系统的操作权限,他的用户名是 root。具有root的这些特权的用户被称为超级用户(superuser)。正如本节所讲解的那样,Ubuntu能够让指定的普通用户以root特权 身份运行命令,而该用户只需要以自己的身份登录即可。

以root特权身份运行的用户拥有以下权力(还有其 他更多的特权)。

l    有些命令(比如用来添加新用户、硬盘分区以及修改系统配置的那些命令)只能由具有root特权身份的用户执行。这类用户可以使用某些工具(比如sudo) 将特定权限授予指定用户;有了这些权限,被指定用户就能够执行那些通常预留给具有root特权身份的用户的任务。

l    文件的读、写以及执行访问权限和目录访问权限并不能影响具有root特权身份的用户。具有root特权身份的用户能够读取、写入和执行所有文件,也可以在 所有目录中进行操作。

l    有些命令内置了一些限制和防护措施,但它们并不适用于具有root特权身份的用户。举例来说,具有root特权身份的用户可以修改任何用户的口令而无需知 道该用户的旧口令。

安 全:系统控制台的安全性 

Ubuntu Linux不能让系统免受来自控制台用户的安全威胁。设置引导加载程序口令和BIOS口令之类的其他安全措施可以有助于提供控制台的安全性。但是,如果用 户能够通过物理途径访问到系统硬件(控制台用户通常具备这些条件),那么要想让系统免受来自该用户的安全威胁非常困难。

警 告:最小特权 

当你在计算机上 进行操作的时候,特别是以系统管理员身份(以root特权身份运行)操作的时候,都要以尽可能小的特权来执行任何一项任务。如果仅以普通用户登录就能够执 行任务,那就以普通用户登录和操作。如果必须以root特权身份运行某个命令,那么以普通用户身份执行尽可能多的任务,然后再使用sudo取得root特 权,完成必须以root特权身份才能执行的那部分任务,之后尽可能快地恢复为普通用户。因为人们在忙碌中更容易犯错,所以最好是在没来得及出错之前,就尽 可能地堵住一切可能出错的途径。

当你在命令行环境中以root特权身份运行的时 候,shell会按照惯例显示一种特殊的提示符,以便提醒你当前所处的状态。默认情况下,该提示符为#号(#)或者以#结尾。可以按照以下几种方法获得或 者授予超级用户特权。

l    如果系统启动之后进入恢复模式(参见1.3.3节),你就是以root用户登录系统。

l    sudo实用工具可以让指定的用户仍然以自己的用户身份登录,但以root特权身份运行选中的命令。可以设置sudo允许某些用户执行特定的需要root 特权的任务,而不需要将全系统的root特权授给这些用户。有关sudo的更多信息请参见1.1.1节。

l    有些程序在启动的时候会向你询问你的用户口令。如果设置sudo让你具有root特权,那么当你提供自己的口令之后,这个程序就能够以root特权身份运 行。如果某个程序在启动的时候需要口令,那么在退出该程序之后,就不再以特权用户身份运行。当你不再需要或者不希望以root特权身份进行操作的时候,这 样的设置能够让你不再以特权身份登录。

l    任何用户都能够创建setuid(set user ID,设置用户标识)文件。setuid程序能够以该文件所有者的身份运行,并且具有该所有者的所有访问特权。当以超级用户身份运行时,你可以将所有者为 root的文件的权限修改为setuid。如果一个普通用户执行一个所有者为root的文件,并且该文件设置了setuid权限,那么这个程序具有 root的全部特权。换句话说,这个程序能够做到root可以做的任何事情以及由这个程序去做或者允许用户去做的事情。用户的特权不会改变。当这个程序运 行完毕,所有的用户特权都将恢复到程序开始执行之前的状态。所有者为root的setuid程序的功能非常强大,但是它对系统安全也是极大的威胁,这也是 系统中这样的程序只有很少几个的原因。所有者为root的setuid程序的示例包括passwd、at和crontab。更多信息请参见《基础篇》 6.6.3节。

安 全:所有者为root且设置setuid的程序极端危险 

因为所有者为 root的setuid程序允许不知道root口令的人拥有超级用户权限,所以对于恶意用户而言它们是“诱人的”攻击目标。系统中这样的程序应该尽可能 少。在挂载文件系统的时候,如果带上nosuid选项(参见2.3.1节)的话,就可以在文件系统级别上禁用setuid程序。要想使用命令列出本机系统 中所有的setuid文件,请参见1.4节。

※选读

下面这两种获取root特权的方法依赖于1.1.3 节讲解的root特权账号的解锁(设置root口令)。

l    如果以自己的用户身份登录,就可以使用su(substitute user,替换用户)命令。此时如果提供root口令,你将具有root特权。更多信息请参见1.1.3节。

l    一旦系统启动并进入多用户模式(1.3.4节)运行,就可以以root身份登录。当提供root口令之后,你将以root特权身份运行。

有 几种技术可以用来限制普通用户切换到超级用户身份的途径。举例来说,PAM(参见1.9节)控制着登录用户、登录时间和登录方式。通过/etc /securetty文件可以控制用户从哪些终端(tty)登录才能具有root身份。/etc/security/access.conf文件为登录控 制添加了另一种控制尺度(详细信息请参考该文件中的注释)。

安 全:不要允许root通过因特网访问 

禁止 root通过网络使用login,这是Ubuntu的默认策略,它由PAM的securetty模块实现。/etc/security /access.conf文件必须包含所有用户名和终端/工作站的名称,只有这些用户在这些指定的终端/工作站上才能够以root身份登录。初始情况 下,access.conf文件中的所有行都被注释掉了。

但是如果 使用ssh的话,就可以通过网络以root身份登录。Ubuntu发行中的ssh并没有按照securetty和access.conf文件中的配置运 行。此外,在/etc/ssh/sshd_config中,Ubuntu将PermitRootLogin设置为yes,以便允许root使用ssh(参 见8.4.6节)登录。

1.1.1 sudo:以root特权身份运行命令

用户获取root特权的传统方式是以root身份登 录或者输入一条su命令并输入root口令。当普通用户在图形界面环境下执行某一条享有特权的命令时,系统将提示用户输入root口令。近来 sudo(www.sudo.ws)的使用已经取代了这些获取root特权身份的传统方法。

提 示:存在root账号但是没有root口令 

Ubuntu 安装之后没有提供root口令,从而达到将root账号锁定的目的。这种设置能够阻止任何人以root账号登录(除非启动系统进入恢复模式)。然而,系统 中确实存在root账号(用户名为root的用户,请查看/etc/passwd文件的第一行)。这个账号/用户是一些文件的所有者(输入命令1S–1 /bin,看看输出结果),并且运行了一些进程(输入命令ps –ef,看看输出结果左侧列)。对于Ubuntu系统的正常运转,root账号至关重要。

sudo实 用工具能够用来运行命令,就像你以root身份登录后的身份运行该命令一样。本书使用短语“以特权身份运行”来强调。虽然你没有以root身份登录,但是 当你使用sudo时,就具有root用户的权限。

Ubuntu强烈鼓励使用sudo。事实 上,Ubuntu发行时将root账号锁定(它没有口令),这样你就没有办法使用传统的办法。就系统管理而言,与使用root账号相比,使用sudo具有 如下很多优势。

l    当使用sudo时,它要求你输入口令(不是root的口令),这样你只需要记住一个口令即可。

l    sudo实用工具将它执行的所有命令记入日志。这种日志对于操作失误后的操作步骤回顾以及系统审计都非常有用。

l    sudo实用工具能够允许实现比使用su和root账号更细粒度的安全策略。通过使用sudo,可以允许特定的用户来指定特定的命令,而使用传统的 root账号设置没有办法完成有些事情。

l    sudo的使用使得恶意用户获取系统访问机会变得更加困难。如果将root解锁,那么恶意用户在开始攻击之前就能够知道他想要破解的账号的用户名。而如果 不将root解锁,该恶意用户就必须确定用户名和口令才能侵入系统。

有些用户质疑sudo的安全性能是否弱于su。因为 二者均依赖于口令,所以它们的强度和弱点都是一样的。如果口令被破解,那么系统就会被破解。然而,如果sudo所允许执行某项任务的用户的口令被破解,整 个系统并不会处于危险境地。因此,如果使用得当,sudo具有的更加细微粒度的权限结构将使其成为一款比su更加安全的工具。此外,如果使用sudo调用 单条命令,那么与用户使用su打开一个root shell相比,用户试图在完成指定任务之后继续以root特权身份进行操作的可能性更小。

警 告:使用gksudo而不是sudo来运行图形界面程序 

当运行那些需要 root特权身份的图形界面程序时,请使用gksudo(在KDE下面为kdesu)而不是sudo。尽管两款实用工具都能够以root特权身份运行程 序,但是sudo使用用户的配置文件,而gksudo使用root的配置文件。大多数时候这种区别并不重要,但有时候却非常关键。有些程序如果用sudo 来调用的话,就不能正常运行。使用gksudo能够阻止不正确的权限被应用到主目录中与X窗口系统相关的文件。在少数情况下,错误应用这些权限会导致你不 能再次登录。此外,在桌面或面板上,你可以在启动器(参见《基础篇》4.3.3节)中使用gksudo。

使用sudo并不总是设置系统的最好、最安全的方 法。在只有一个用户使用的系统上,使用sudo与小心使用su和root口令之间没有太大的差别。而在一个有多个用户的系统中,特别是在集中管理的系统网 络中,使用sudo比使用su更加安全。如果你是一个不能对sudo感到满意的彻底的UNIX/Linux用户,那么想要切换到su也很简单:为root 账号指定一个口令,然后使用su。参见1.1.3节。

在安装Ubuntu的时候,所设置的第一个用户包含 到admin组中。sudo安装的时候被配置成允许admin组的成员以root特权身份运行。因为没有root口令,所以初始情况下在命令行下执行享有 特权的管理任务的唯一方法是第一个用户使用sudo来运行它们。图形界面程序调用其他程序(比如gksudo,参见上面的提示),它又会调用sudo进行 身份验证。

时间戳

默认情况下,sudo第一次运行的时候会要求你 输入你的口令(不是root口令)。此时sudo为你设置时间戳。在提供口令之后,sudo(根据你的时间戳)在15分钟之内不会再次向你询问口令。

在下面的示例中,Sam试图以用户sam(非特 权用户)的身份来设置系统时钟。date实用工具显示一条错误消息,后面跟着他刚输入的日期的展开形式。当他使用sudo来运行date设置系统时钟的时 候,sudo向他询问其口令,然后该命令成功运行。

接下来,Sam使用sudo卸载文件系统。因为 他在距离前一条sudo命令不超过15分钟之内输入这条命令,所以他不需要再次输入口令:

现在,Sam使用选项-l查看sudo允许他运 行哪些命令。因为他是这个系统中第一个注册用户(因而他是admin组成员),所以他被允许以任何用户的身份运行任何命令。

派生root shell

如果你需要以root特权身份运行多条命令,那 么使用下面的方法将使这件工作变得更加容易:派生一个root shell,输入命令而无需在每条命令前面敲入sudo,然后从该shell退出。这种方法会使sudo内置的一些防护措施失效,因而要小心使用,并记得 要尽可能快地返回到非root shell。(请查阅1.1节中关于最小特权的提示信息。)使用sudo的-i选项来派生root shell:

在这个 示例中,sudo派生出一个root shell,该shell显示提示符#,提醒你正在以root特权身份进行操作。id实用工具显示运行该shell的用户的身份信息。exit命令(还可 以使用组合键Control+D)终止root shell,让用户返回到他的正常状态以及之前的shell和提示符。

sudo环境

前一个示例中的pwd实用工具给出了选项 -i(参见下面的“选项”部分)建立的被修改的环境的一个方面。这个选项派生一个root登录shell(这个shell拥有以root身份登录的用户能 够拥有的一样的环境),同时执行root的初始化文件(参见《基础篇》9.2.1节)。在发出sudo -i命令之前,pwd内置命令显示/home/sam为Sam的工作目录;而在执行这条命令之前,它显示工作目录是/root,即root的主目录。使用 选项-s(参见下面的“选项”部分)在不修改环境的情况下派生一个root shell。如果调用sudo时不带任何选项,它将在一个未经修改的环境中运行你指定的命令。为了证明上面的说法,下面的示例让sudo运行pwd,不带 任何选项。在这种方式下运行的命令的工作目录没有发生变化。

输出重定向

下面的命令未能成功运行的原因在于,尽管 sudo派生的shell以root特权身份执行ls,但是用户正在运行的不享有特权的shell将输出重定向。用户的shell没有权限向/root目 录写入数据。

有几种解决这个问题的方法。最简单的方法是将整 个命令行传递给在sudo下面运行的shell:

bash的选项-c派生一个shell来执行紧 跟在这个选项后面的命令字符串,而后终止。sudo实用工具以root特权身份运行派生出来的shell。可以将这个字符串用引号引起来,防止非特权 shell解释其中的特殊字符。还可以用sudo –i来派生一个root shell,执行命令,然后从特权shell中退出。(参见前一节内容。)

※ 选读

处理sudo运行的命令的输出重定向问题的另一个方 法是使用tee(参见《基础篇》7.2.4节):

这条命令将ls的输出结果写入到文件中,同时还将其 显示出来。如果不想显示输出结果,那么可以让非特权shell将输出结果重定向到/dev/null(参见2.1节)。在下面的示例中,使用这个办法消除 屏幕输出,并使用tee的选项-a将输出追加到文件而不是重写其内容:

选项

可以使用命令行选项控制sudo如何运行命令。下面 是sudo命令行语法:

sudo [options] [command]

其中,options 是一个或多个选 项,command 是想要执行的命令。如果没有选项-u,sudo就会以root特权身份运行命令。下面是一些较为常见的选项,完整的选项 列表请参见sudo的手册页。

-b

(background, 后台)  在后台运行命令。

-i

(initial login environment,初始的登录环境)  派生/etc/passwd文件中为root(或者由-u指定的另一个用户)指定的shell,运行root(或者另一个用户)的初始化文件,除了一些例 外(比如TERM不会改变)。不要在这个选项后面带上一条命令。

-k

(kill, 杀死)  重置运行这条命令的用户的时间戳(参见1.1.1节),这就意味着该用户下次运行sudo的时候必须输入口令。

-L

(list defaults,列出默认值)  列出能够在sudoers文件的Defaults行(参见1.1.2节第3小节)中设置的参数。不要在这个选项后面带上一条命令。

-l

(list commands,列出命令)  正在运行sudo的这位用户能够在本地系统中运行的命令。不要在这个选项后面带上一条命令。

-s

(shell)  按照/etc/passwd文件指定的选项派生一个新的root(或者由-u指定的另一个用户)shell。与选项-i类似,但是它不会改变环境。不要在 这个选项后面带上一条命令。

-u user

user 的 特权身份运行命令。如果没有这个选项,sudo就会以root特权身份运行命令。

1.1.2 sudoers:配置sudo

安装好sudo之后,经过仔细的配置,它能够变得更 加安全、更加健壮。sudo的配置文件是/etc/sudoers。编辑sudoers文件的最好办法是输入以下命令以使用visudo:sudo visudo。visudo实用工具锁定、编辑并检查sudoers文件的语法。默认情况下,visudo调用nano编辑器。可以使用下面的命令来设置 环境变量VISUAL,让visudo调用vi:

可以将vi替换成你所选择的文本编辑器。将这条命令 发到某个初始化文件(参见《基础篇》9.2.1节)中去,这样每次登录的时候就可以自动设置这个变量。

警 告:永远使用visudo来编辑sudoers文件 

sudoers 文件中的一个语法错误就会导致你不能使用sudo获取root权限。如果(不使用visudo)直接编辑这个文件,那么直到你发现自己不能使用sudo之 后,你才会知道自己在这个文件中引入了某个语法错误。在退出之前,visudo实用工具检查sudoers文件的语法。如果发现文件中存在语法错 误,visudo就会让你纠正该错误:或者不保存对文件的修改直接退出,或者保存修改并退出。后一项选择总是不好的,因而visudo将最后一项标记为 (DANGER!)(“危险!”)。

在sudoers文件中,注释均以#号开头,注释可 以出现在文本行的任何位置。除了注释之外,这个文件还保存了两种类型的项:别名和用户特权说明。每项占用一行,如果以反斜杠符号(/)作为行末的话,它就 可以跨越多个物理行。

1. 用户特权说明

用来指定用户特权的文本行的格式如下(等号两边的空 白符是可选的):

user_list host_list = [(runas_list)] command_list

l    user_list 指定该特权说明行适用的用户。这个列表可以包含用户名、组(以%开头)和用户别名(参见下一节)。

l    host_list 指定该特权说明行适用的主机。这个列表可以包含一个或多个主机名、IP地址或主机别名(将在下一节讨论)。可以使用内 置命令alias ALL让该行适用于所有引用这个sudoers文件的系统。

l    runas_list 指定当带着选项-u(参见1.1.1节的“选项”部分)调用sudo时能够以哪些用户的身份来运行命令列表command_list 中 的命令。这个列表可以包含用户名、组(以%开头)和runas别名(在下一节讨论)。必须用圆括号将该特权说明括起来。如果没有runas_list 的 话,那么sudo假设为root。

l    command_list 指定该特权说明行适用的实用工具。这个列表可以包含实用工具的名称、存放实用工具的目录名称以及命令别名(在下 一节讨论)。所有名称必须是绝对路径名,目录名称必须以斜杠(/)结尾。

如果在某个名称后面紧跟着两个相邻的双引号 (“”),那么该用户就不能指定任何命令行参数,包括选项。此外,你可以指定参数(包括通配符)以限制用户能够使用的参数。

示例

下面的用户特权说明允许Sam使用sudo挂载 和卸载引用包含这条特权说明的sudoers文件的所有系统(由ALL指定)上的文件系统(以root特权身份进行挂载和卸载):

(root) runas_list 是可选的。如果将其忽略,那么sudo将允许该用户以root特权身份运行命令列表command_list 中 的命令。在下面的示例中,Sam利用了这些权限。他不能直接运行umount。相反,他必须调用sudo来运行这条命令。

如果将上面讲解的sudoers中的那一行替换 成下面这行,那么Sam就不能卸载/p03,尽管他还能够卸载所有其他文件系统,并且能够挂载任何文件系统:

下面给 出了sudoers文件中的上面这行的结果。sudo实用工具没有提示输入口令,这是因为Sam在最近15分钟之内曾经输入过自己的口令。

下面这行限制Sam挂载和卸载那些挂载到 /p01、/p02、/p03和/p04的文件系统:

下面这些命令给出了结果:

admin组的默认特权

在发行的时候,sudoers文件包含下面几 行:

该用户特权说明适用于所有系统(由等号左侧的 ALL指出)。正如注释所说,这行让admin组成员(由组名前面加上前缀%指定:%admin)以任何用户的身份(最右侧的ALL)运行任何命令(圆括 号中的ALL)。如果调用的时候不带选项-u,sudo实用工具就以root特权身份运行你所指定的命令,大多数情况下人们都是以这种方式使用sudo 的。

如果sudoers文件中有下面这行,那么 wheel组成员将能够以任何用户的身份运行任何命令,但有一个例外:他们不能运行passwd来修改root口令。

※选 读

在%admin ALL=(ALL) ALL行中,如果将(ALL)替换成(root),或者将(ALL)忽略,那么你仍然能够以root特权身份运行任何命令。但是你不能使用-u选项从而以 另一个用户的身份来运行命令。通常,当你能够获得root特权身份时,这个限制不会带来什么问题。以另一个普通用户或者root的身份进行操作,这样你就 可以用尽可能小的特权来完成任务,这是一个好主意。

举例来说,如果你属于admin组,那么 sudoers文件中的默认项可以让你输入下面的命令来创建和编辑Sam主目录中的文件。因为你正在以Sam的身份进行操作,所以他将拥有这个文件,并且 能够读取和写入该文件。

2. 别名

别名可用来将用户、主机或命令重命名和分组。下面是 别名定义的格式:

alias_type alias_name = alias_list

其中,alias_type 是别名类 型(User_Alias、Runas_Alias、Host_Alias、Cmnd_Alias),alias_name 是别名名称(按 照约定全部大写),alias_list 是组成该别名的一个或多个元素构成的由逗号隔开的列表。在别名的某个元素前面添加感叹号(!)可将 其忽略。

User_Alias

用户别名的alias_list 与 用户特权说明(参见前一节的讨论)中的user_list 一样。下面这几行取自sudoers文件,定义了3个用户别名:OFFICE、 ADMIN和ADMIN2。定义第1个别名的alias_list 包含用户名mark、sam和sls,第2个包括两个用户名和admin 组成员,第3个别名包括除Max之外admin组所有成员。

Runas_Alias

runas别名的alias_list 与 用户特权说明中的runas_list (参见前一节的讨论)一样。下面的runas别名SM包括用户名sam和sls:

Host_Alias 

只有当运行在多个系统上的sudo同时引用这个 sudoers文件时,主机别名才有意义。主机别名的alias_list 与用户特权说明中的host_list (参见前一 节的讨论)一样。下面这行定义了LCL,它包括系统dog和plum:

如果希望在这个列表中使用全限定主机名 (hosta.example.com,而不仅仅是hosta),那就必须设置fqdn标志(参见下一节的讨论),这会降低sudo的性能。

Cmnd_Alias 

命令别名的alias_list 与 用户特权说明中的command_list (参见前一节的讨论)一样。下面的命令别名包括3个文件并包含该目录中的所有文件(通过包含一个 目录,由末尾的/指出)。

3. 默认值(选项)

通过使用Defaults关键字,可以修改配置选项 的默认值。这个列表中的大多数值是一些标志,它们是布尔值(可以是on或off)或者字符串。在Defaults行中,将某个标志列出,就可以将其打开, 而在名字前面加上!则可以将其关闭。下面这行取自安装好的sudoers文件,将lecture和fqdn关闭,而将tty_tickets开启:

本节列出了一些常见的标志。完整列表参见 sudoers的手册页。

fqdn

全限定域名(fully qualified domain name),对sudoers文件中的FQDN(参见术语表)执行DNS查找。如果设置了这个标志,就可以在sudoers中使用FQDN,但是这样做会 给sudo的性能带来一些负面影响,特别是在DNS不能正常工作的情况下。当设置这个标志之后,就必须使用本地主机的正式DNS名称,而不是别名。如果 hostname返回一个FQDN,那就不必设置这个标志。默认情况下,这个标志被打开。在Ubuntu发行的sudoers文件中,这个标志被关闭。

insults

当用户输入错误的口令时显示友善的、幽默的 提示。默认关闭。还可以参见passwd_tries。

lecture=freq  

控制sudo什么时候在口令提示符之前显示一条 用来提醒的消息。freq的可能值有:never(默认值)、once和always。指定!lecture与指定freq值为never一样。

mailsub=subj

将警告消息和错误消息的电子邮件主题的默认值由 默认的*** SECURITY information for %h ***修改为subj 。sudo实用工具将subj 中 的%h替换成本地系统的主机名。如果subj 中含有shell特殊字符(参见《基础篇》5.1节),那就用引号将其引起来。

mailto=eadd

将sudo警告消息和错误消息发送到eadd (电 子邮件地址,默认值为root)。如果eadd 中含有shell特殊字符(参见《基础篇》5.1节),那就用引号将其引起来。

mail_always    

每当用户运行sudo时向mailto用户发送 电子邮件。默认关闭。

mail_badpass 

如果用户在运行sudo时输入不正确的口令,就 向mailto用户发送电子邮件。默认关闭。

mail_no_host 

如果用户的用户名在sudoers文件中但他没 有权限在运行sudo的本地主机上运行命令,系统就向mailto用户发送电子邮件。默认关闭。

mail_no_perms 

如果运行sudo的用户的用户名在 sudoers文件中但他没有权限运行所请求的命令,系统就向mailto用户发送电子邮件。默认关闭。

mail_no_user 

当某个用户的用户名不在运行sudo的 sudoers文件中的时候,向mailto用户发送电子邮件。默认开启。

passwd_tries=num  

num 是用户能够在sudo口令 提示符之后输入不正确的口令的次数,超过这个次数后sudo退出。默认值为3。还可以参见insults和lecture。

rootpw

让sudo在提示符之后只接受root口令。因 为sudo在询问普通用户的口令和root口令的时候都会给出相同的提示符,所以开启这个标志可能会让用户感到迷惑。如果尚未将root账号解锁,那么不 要将这个标志打开(参见1.1.3节),否则修改之后不能使用sudo。要想修复这个问题,请引导系统进入恢复模式(参见1.3.3节),将这个标志关闭 (删除)。默认关闭,这会让sudo提示输入运行sudo的用户的口令。参见附件的提示信息。

提 示:使用root口令替代你的口令 

如果已经设置 root口令(参见1.1.3节),那么通过开启rootpw标志,可以让需要口令方能运行的图形界面程序请求输入root口令,而不是运行这个程序的用 户的口令。这个程序将继续询问你的口令,但是只接受root口令。这样修改之后,Ubuntu系统就可以按照类似于其他发行版使用该口令的方式使用 root口令。

shell_noargs 

让sudo(不带任何参数调用)派生一个 root shell而不改变环境。默认关闭。这个与sudo -s选项一样。

timestamp_timeout=mins  

mins 是sudo时间戳(参见 1.1.1节)保持有效的分钟数。默认值为15。将mins 设置为-1会让时间戳永久有效。

umask=val  

val 为sudo用来运行用户指 定的命令的umask(1.6.2节)。将val 设置为0777可以保留用户的umask值。默认值为0022。

1.1.3 root账号解锁(为root指派口令)

除了少数情况外,在Ubuntu系统中没有必要将 root账号解锁,而且Ubuntu建议不要这样做。下面的命令为root账号分配一个口令,从而将其解锁:

重新锁定root账号

如果你决定在将root解锁之后将其再次锁定, 那么输入命令sudo passwd -l root。可以使用上面的命令再次将其解锁。

1.1.4 su:获取另一个用户的特权

要想使用su获得root特权身份,就必须将 root账号解锁(参见前一节的讨论)。

su实用工具可以用指定用户的身份和特权来派生 shell或者执行程序。su命令行中紧跟着su的是某个用户的用户名。如果你是root或者如果你知道该用户的口令,就能够取得该用户的身份。如果输入 的su命令不带参数,su将默认切换到超级用户,你就可以派生一个带有root特权的shell(必须知道root口令)。

当你输入su命令成为超级用户时,系统生成一个新的 shell,该shell显示#提示符。终止该shell(按Control+D或者输入exit命令)之后就会返回到正常状态(回到前一个shell和 提示符)。如果只是输入命令su的话,就只会改变用户ID和组ID,对你的环境造成的影响非常小。PATH环境变量的值仍然与你以自己的身份登录时的值一 样。当你输入命令su -(可以用-l或者--login来代替连字符)的时候,你会得到root的登录shell:就像以root身份登录一样。不仅仅是用户ID和组ID被修 改成root的相应值,而且整个运行环境也是root所处的环境。这个登录shell在显示提示符之前执行了适当的初始化文件(参见《基础篇》9.2.1 节)。

实用工具id可以用来显示发生在用户ID和组ID以 及与用户关联的组中的变化:

su还有一个选项-c,可以用来以root特权身份 运行命令行,当命令执行完毕之后返回到原来的shell。下面的示例首先说明不允许某个用户杀死(参见1.6.1节)某个进程。但是如果使用su -c并提供root口令,就允许该用户杀死该进程。引号有必要存在,因为su -c将其命令作为单独的一个参数。

安 全:超级用户、PATH和安全 

当你以root 身份操作时,在环境变量PATH中存放的目录个数越少,以root身份执行不受信任的程序的可能性就越小。绝不要包括工作目录(也就是在PATH中的任何 地方出现.或者::,或者将:作为PATH最后的元素)。更多信息请参见9.3.3节中的“PATH:shell寻找程序的地方”部分。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值