介绍
特权分离是在Linux和类Unix操作系统中实现的基本安全模式之一。普通用户以有限的特权操作,以便将其影响范围减小到其自己的环境,而不是更宽的操作系统。 一个特殊的用户,被称为root
,具有“超级用户”的特权。这是一个没有普通用户存在的限制的管理帐户。用户可以以多种不同的方式使用“超级用户”或“root”权限执行命令。 在本文中,我们将讨论如何正确,安全地获得
root
权限,特别注重对编辑
/etc/sudoers
文件。 我们将在Ubuntu 16.04服务器上完成这些步骤,但是大多数现代Linux发行版应该以类似的方式运行。 本指南假定您已经完成了
最初的服务器设置在这里讨论。以正常,非root用户身份登录到您的服务器,然后继续下面。
如何获取根权限
有三种基本方法来获得root
权限,这在他们的复杂程度而有所不同。
作为根登录
获得的最简单,最直接的方法root
权限只是登录到你的服务器的
root
从一开始用户。 如果您登录到本地计算机(或使用了带外控制台访问如果您正在使用DigitalOcean),只需输入“根”作为您的用户名在登录提示符下,输入
root
当问及密码。 如果您是通过SSH登录,指定
root
之前,你的SSH连接字符串中的IP地址或域名的用户:
ssh root@server_domain_or_IP
如果你还没有设置SSH密钥为
root
用户,请输入
root
提示时密码。
使用“su”成为Root
登录为root
通常不建议,因为它很容易开始使用非管理任务系统,这是危险的。 获得超级用户权限的下一个方法可以让你成为
root
用户在任何时间,因为你需要它。 我们可以通过调用做到这一点
su
命令,它的全称是“替代用户”。 为了获得
root
权限,只需键入:
su
你会被提示输入
root
用户的密码,之后,你会被投进一个
root
shell会话。 当你完成需要的任务
root
权限,通过键入恢复到正常的shell:
exit
使用“sudo”以root执行命令
获得的最后,也是最复杂的,路root
特权,我们将讨论与
sudo
命令。 该
sudo
命令允许您与执行一次性命令
root
权限,而不需要产生一个新的shell。它执行如下:
sudo command_to_execute
与
su
中,
sudo
命令会要求用户
调用命令,而不是的密码
root
密码。 由于它的安全隐患的,
sudo
访问默认情况下不授予用户,并且必须设置其正确运行之前。 如果按照
最初的服务器设置向导,你已经完成了最基本的配置。 在下一节中,我们将更详细地讨论如何修改配置。
什么是Visudo?
该sudo
命令通过设在一个文件中配置
/etc/sudoers
。
警告
切勿使用常规文本编辑器编辑此文件! 切勿使用普通的文本编辑器编辑这个文件!始终使用visudo命令! 因为语法不当
/etc/sudoers
文件,可以让你有一个系统,就不可能获得提升的权限,使用是很重要的
visudo
命令编辑文件。 该
visudo
命令打开一个文本编辑器像正常的,但它验证在保存文件的语法。 这可以防止配置错误
sudo
操作,这可能是唯一的获得方式
root
权限。 传统上,
visudo
将打开
/etc/sudoers
与文件
vi
文本编辑器。 Ubuntu的,然而,已配置
visudo
使用
nano
文本编辑器来代替。 如果您想改回
vi
,发出以下命令:
sudo update-alternatives --config editor
OutputThere are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
选择与您要选择的选项相对应的数字。 在CentOS,您可以通过添加以下行来修改这个值你
~/.bashrc
:
export EDITOR=`which name_of_editor`
源文件以实现更改:
. ~/.bashrc
在配置
visudo
,执行命令来访问
/etc/sudoers
文件中:
sudo visudo
如何修改Sudoers文件
您将看到呈现/etc/sudoers
中选定的文本编辑器文件。 我已经从Ubuntu 16.04复制和粘贴文件,删除评论。 CentOS的
/etc/sudoers
文件有更多的线路,其中一些我们不会在本指南中讨论。
/ etc / sudoers
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
#includedir /etc/sudoers.d
让我们来看看这些行是什么。
Default行
第一行“Defaults env_reset”重置终端环境以删除任何用户变量。这是用来从清除潜在的有害环境变量安全措施sudo
会话。 第二行,
Defaults mail_badpass
,告诉系统坏邮寄通知书
sudo
密码尝试配置的
mailto
的用户。 默认情况下,这是
root
帐户。 第三行,它与“默认secure_path = ...”,开始指定
PATH
将用于对(在文件系统中的地点的操作系统将查找应用)
sudo
操作。这防止使用可能有害的用户路径。
用户权限行
第四行,这决定了root
用户的
sudo
特权,是从前面的线的不同。让我们来看看不同的字段意味着什么:
root ALL=(ALL:ALL) ALL
第一个字段表示,该规则将适用于(用户名root
)。demo ALL =(ALL:ALL) ALL
第一个“ALL”表示此规则适用于所有主机。demo ALL=( ALL :ALL) ALL
这种“ALL”表示root
用户可以运行所有的用户命令。demo ALL=(ALL: ALL ) ALL
这种“ALL”表示root
用户可以运行所有组的命令。demo ALL=(ALL:ALL) ALL
最后的“ALL”表示这些规则适用于所有命令。
root
用户可以通过运行任何命令
sudo
,只要他们提供他们的密码。
组权限 行
接下来的两行类似于用户权限的线条,但他们指定sudo
团体的规则。 以“%”开头的名称表示组名称。 在这里,我们看到“admin”组可以作为任何主机上的任何用户执行任何命令。同样,
sudo
集团能够具有相同的权限,但可作为任何团体执行为好。
includedir /etc/sudoers.d 行
最后一行可能看起来像一个注释乍一看:
/ etc / sudoers
. . .
#includedir /etc/sudoers.d
它有一个开始
#
,这通常表示注释。 然而,这行实际上表明内的文件
/etc/sudoers.d
目录将采购和应用。 该目录中的文件遵循相同的规则
/etc/sudoers
文件本身。 任何文件中不结束
~
并且不具有一个
.
在将要读取并施加到
sudo
配置。 这主要意味着应用程序改变
sudo
安装时的特权。 把所有的在一个单一的文件中的相关规则
/etc/sudoers.d
目录可以很容易地看到哪些特权与占关联,轻松倒车凭据,而不必试图操纵
/etc/sudoers
文件直接。 如同
/etc/sudoers
文件本身,你应该总是在中编辑文件
/etc/sudoers.d
与目录
visudo
。编辑这些文件的语法是:
sudo visudo -f /etc/sudoers.d/file_to_edit
如何给用户Sudo权限
用户希望当管理来完成的最常见的操作sudo
权限是授予新用户一般
sudo
访问。如果您想授予帐户对系统的完全管理访问权限,这将非常有用。 在设置了通用管理组(如本指南中的Ubuntu系统)的系统上执行此操作的最简单的方法实际上是将相关用户添加到该组。 例如,在Ubuntu 16.04中,
sudo
集团拥有完整的管理权限。我们可以通过将用户添加到组中来向用户授予这些相同的权限,如下所示:
sudo usermod -aG sudo username
在
gpasswd
命令还可以用于:
sudo gpasswd -a username sudo
这些都将完成同样的事情。 在CentOS,这通常是
wheel
组,而不是
sudo
组:
sudo usermod -aG wheel username
或者,使用
gpasswd
:
sudo gpasswd -a username wheel
在CentOS,如果将用户添加到该组不立即工作,您可能需要编辑
/etc/sudoers
文件来取消该组的名称:
sudo visudo
/ etc / sudoers
. . .
%wheel ALL=(ALL) ALL
. . .
如何设置自定义规则
现在我们已经熟悉了文件的一般语法,让我们创建一些新的规则。如何创建别名
该sudoers
文件可以通过各种“别名”的分组事情更容易组织。 例如,我们可以创建三个不同的用户组,具有重叠的成员资格:
/ etc / sudoers
. . .
User_Alias GROUPONE = abby, brent, carl
User_Alias GROUPTWO = brent, doris, eric,
User_Alias GROUPTHREE = doris, felicia, grant
. . .
组名必须以大写字母开头。然后,我们可以让成员
GROUPTWO
更新
apt
通过创建这样一个规则数据库:
/ etc / sudoers
. . .
GROUPTWO ALL = /usr/bin/apt-get update
. . .
如果我们不指定用户/组为如上运行,
sudo
默认为
root
用户。 我们可以让成员
GROUPTHREE
关闭并通过创建“命令别名”,用在一个规则重新启动机器
GROUPTHREE
:
/ etc / sudoers
. . .
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE ALL = POWER
. . .
我们创建命令别名叫做
POWER
包含的命令来关闭电源,重新启动计算机。 然后,我们允许成员
GROUPTHREE
来执行这些命令。 我们还可以创建“运行方式”别名,它可以替换指定用户执行命令的规则部分:
/ etc / sudoers
. . .
Runas_Alias WEB = www-data, apache
GROUPONE ALL = (WEB) ALL
. . .
这将允许任何人谁是其成员
GROUPONE
执行命令的
www-data
用户或
apache
用户。 请记住,当两者之间存在冲突时,稍后的规则将覆盖先前的规则。
如何锁定规则
有许多的就可以实现在如何更好地控制的方式sudo
反应以一个呼叫。 该
updatedb
与相关联的命令
mlocate
包是一个单用户系统上相对是无害的。 如果我们要允许用户与执行它
root
权限
,无需输入密码,我们可以做出这样的规则:
/ etc / sudoers
. . .
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb
. . .
NOPASSWD
是一个“标签”,这意味着没有密码将被要求。 它有一个叫做伴侣命令
PASSWD
,这是默认的行为。标记与规则的其余部分相关,除非被其后面的“双”标记所覆盖。 例如,我们可以有这样的行:
/ etc / sudoers
. . .
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .
另一个有用的标记是
NOEXEC
,它可用于防止在某些方案的一些危险的行为。 例如,一些程序,如“less”,可以通过在其界面中键入这些命令来产生其他命令:
!command_to_run
这基本上执行任何命令,用户给它与“少”运行相同的权限,这可能是非常危险的。 为了限制这一点,我们可以使用这样的行:
/ etc / sudoers
. . .
username ALL = NOEXEC: /usr/bin/less
. . .
杂项信息
有一些更多的信息与交易时可能有用的sudo
。 如果您在配置文件中指定了一个用户或组作为“运行方式”,则可以分别使用“-u”和“-g”标志执行这些用户的命令:
sudo -u run_as_user command
sudo -g run_as_group command
为方便起见,默认情况下,
sudo
将节省你的验证信息进行了一定的时间在一个终端。这意味着您不必再次键入密码,直到计时器用完。 出于安全考虑,如果希望在完成运行管理命令后清除此计时器,可以运行:
sudo -k
如果,另一方面,你要“素”的
sudo
命令,这样你就不会在后面提示,或更新您的
sudo
租赁,你可以键入:
sudo -v
系统将提示您输入密码,这将被缓存后
sudo
使用,直到
sudo
时限到期。 如果你只是想知道为你的用户名定义了什么样的权限,你可以输入:
sudo -l
这将列出所有在规则
/etc/sudoers
文件适用于你的用户。 这给你的,你会或不会被允许与做一个好主意,
sudo
任何用户。 有很多次,当你将执行一个命令,它会失败,因为你忘了要与它前面加上
sudo
。为了避免重新键入命令,您可以利用意味着“重复最后一个命令”的bash功能:
sudo !!
双重感叹号将重复最后一个命令。我们与它之前
sudo
快速改变无特权命令特权命令。 对于一些乐趣,您可以将下面的行添加到您
/etc/sudoers
文件,
visudo
:
sudo visudo
/ etc / sudoers
. . .
Defaults insults
. . .
这将导致
sudo
返回一个愚蠢的侮辱当用户类型为不正确的密码
sudo
。 我们可以使用
sudo -k
来清除以前的
sudo
缓存的密码尝试一下:
sudo -k
sudo ls
Output[sudo] password for demo: # enter an incorrect password here to see the results
Your mind just hasn't been the same since the electro-shock, has it?
[sudo] password for demo:
My mind is going. I can feel it.
结论
您现在应该对如何读取和修改的一个基本的了解sudoers
文件,并可以使用获得的各种方法把握
root
权限。 请注意,由于某种原因,超级用户权限不会授予普通用户。至关重要的是,你了解每个命令的,你与执行的
root
权限。不要轻率地承担责任。了解为您的用例使用这些工具的最佳方法,并锁定不需要的任何功能。