现在的位置: 首页 > 综合 > 正文

Linux 学习笔记(三)超级用户

2013年03月09日 ⁄ 综合 ⁄ 共 2337字 ⁄ 字号 评论关闭
文章目录

su: 替换用户身份

访问 root 账号稍好一些的方式是使用 su 命令。在 Fedora 发行版本上可以直接调用su 命令,那么它将提示用户输入 root 的口令,然后启动一个 root shell,而在Ubuntu 发行版本上,默认情况下,系统根本没有合法的 root 口令,必须使用sudo 来获得 root 访问权。

# sudo su

如果知道某人的口令,那么通过执行 su username 就能够直接访问这个人的帐号。与 su 到 root 帐号的情况一样,此时也会提示用户输入username 的口令。你也可以首先 su 到 root 帐号,然后再 su 到其他帐号,roo 帐号不需要提供密码就可以 su 到其他任何帐号。

sudo: 受限的 su

由于超级用户帐号的特权不可分割(至少不能随意分割),所以很难既给某个人完成一件任务的权力而又不给这个人自动运行系统的权力。针对这些问题,最广泛采用的解决方案是使用一个叫做sudo 的程序,这个程序目前由Todd.Miller 维护,官方网址是:http://www.sudo.ws,不过中国的电信网络访问该网址真是蛋疼,所以最好使用代理或者GoAgent
来访问,效果会好很多。在我所测试的发行版本FedoraUbuntu 上均已经提供了该软件。

sudo 命令参数

命令 说明
sudo -h Help 列出使用方法
sudo -V Version 显示版本信息
sudo -l List 列出当前用户可以执行的命令
sudo -u username|#uid User 以按下用户的身份执行命令。后面的用户是除 root 以外的,
可以是用户名,也可以是 #uid
sudo -k Kill 清除“入场卷”上的时间,下次再使用 sudo 时要再输入密码
sudo -K Sure kill 与 -k 类似,但是它还要删除时间戳文件
sudo -b command Background 在后台执行指定的命令
sudo -p prompt command Prompt 可以更改询问密码的提示语,
其中 %u 会代换为使用者帐号名称,%h 会显示主机名称。
sudo -e file Edit 不是执行命令,而是修改文件,相当于命令 sudoedit
sudo command 用 root 权限执行命令 command

/etc/sudoers 文件

sudo 采用命令行作为参数,然后以 root 身份(或另一个受限用户)执行。sudo 读取文件/etc/sudoers 这个文件列出了授权使用sudo 的人以及允许他们在主机上运行的命令。下面是一个典型的例子:

# Define aliases for machines in CS & Physics departments
Host_Alias  CS = tigger, anchor, piper, moet, sigi
Host_Alias  PHYSICS = eprince, pprince, icarus

# Define collections of commands
Cmnd_Alias  DUMP = /sbin/dump, /sbin/restore
Cmnd_Alias  PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias  SHELLS = /bin/sh, /bin/tcsh, /bin/bash, /bin/ash, /bin/bsh

# Permissions
mark,ed    PHYSICS = ALL
herb       CS = /usr/sbin/tcpdump : PHYSICS = (operator) DUMP
lynda      ALL = (ALL) ALL, !SHELLS
%wheel     ALL, !PHYSICS = NOPASSWD: PRINTING

前 5 个非注释行定义了主机组和命令组,这些组供这个文件后面的权限说明来引用。这个列表可以原封不动地逐字包括在说明中,但使用别名会让 sudoers 文件更容易阅读和理解,还能让文件以后更容易更新。还可以为用户集合或以其身份运行命令的用户集合定义别名。

每一行权限说明包括的信息如下:

  • 这一行所适用的用户
  • 应该注意这一行的主机
  • 指定用户可以运行的命令
  • 可以以其身份执行命令的用户

第 1 行权限说明适用于 PHYSICS 组机器(eprince, pprince 和 icarus)上的用户 mark 和 ed。sudo 内建的命令别名 ALL 允许他们运行任何命令。由于在小括号中没有指定用户列表,所以sudo 将只以 root 身份运行命令。

第 2 行权限说明允许用户 herb 在 CS 组机器上运行 tcpdump,并在 PHYSICS 组机器上运行与
dump
有关的命令。不过,dump 命令只能够以 operator 的身份而不能以 root 身份运行。用户 herb 键入的实际命令行则类似下面这样:

$ sudo -u operator /sbin/dump 0u /dev/hda2

用户 lynda 能够以任何用户的身份在任何机器上运行命令,但不能够运行几个普通的 shell,难道这就意味着 lynda 不能够得到一个 root shell?当然不是:

$ cp -p /bin/bash /tmp/bash
$ sudo /tmp/bash

一般说来,任何试图设定“除……以外的所有命令”的做法都注定要失败,至少在技术角度来看是这样。但是,按照这种方式建立一个 sudoers 文件,作为不鼓励使用 root shell 的提醒信息仍然是值得的。这种做法可能会用户不经意的使用。

最后一行允许组“wheel”中的用户以 root 身份在除了 eprince, pprince 和 icarus 之外的任何机器上运行 lpclprm,而且运行这些命令不需要任何口令。

要修改 /etc/sudoers,请使用 visudo 命令,这个命令检查以确保没有其他人正在编辑这个文件,接着调用一个编辑器编辑该文件,然后先验证文件编辑修改后的语法无误,再安装它。最后这一步骤尤其重要,因为无效的sudoers 文件可能会不让用户再用sudo 去修复它。

抱歉!评论已关闭.