Sudo是Unix/Linux平台上非常有用的工具,它允许系统管理员分配一些合理的“权限”给普通用户来执行一些只有超级用户或其他特权用户才能完成的任务。
例如,运行一些命令,如mount、halt、su,或者编辑一些系统配置文件,如/etc/mtab、/etc /samba/smb.conf等。这样不仅减少了root用户的登录次数和管理时间,还提高了系统的安全性。
一、sudo的特点
Sudo的角色注定了它在安全上要格外谨慎,否则会导致非法用户抢夺root权限。同时也兼顾了易用性,让系统管理员使用起来更加有效方便。sudo设计者的目的是给用户尽可能少的权限,但仍然允许他们完成自己的工作。所以,须藤有以下特点:
# 1.sudo可以限制指定用户在指定主机上运行某些命令。# 2.sudo可以提供日志,如实记录每个用户用sudo做了什么,并将日志传输到中央主机或日志服务器。# 3.sudo为系统管理员提供配置文件,允许系统管理员集中管理用户的使用权和使用的主机。它的默认存储位置是/etc/sudoers。# 4.sudo使用时间戳文件来完成一个类似于“检票”的系统。当用户执行sudo并输入密码时,用户获得一张“入场券”,默认生存期为5分钟(默认值可以在编译时更改)。超时后,用户必须重新输入密码。
二。sudo命令
sudo程序本身是一个设置了SUID位的二进制文件。我们可以检查它的权限:复制代码如下:$ ls-l/usr/bin/sudo-s-x-x2 root 106832 02-12 17:41/usr/bin/sudo
它的所有者是root,所以每个用户都可以像root一样执行程序。具有SUID集的程序可以在运行时给用户所有者的EUID。这也是为什么用SUID设定的程序必须认真编写的原因。但是设置命令文件的SUID和用sudo运行它是不同的概念,它们扮演着不同的角色。
sudo的配置记录在/etc/sudoers文件中,我们将在下面详细解释。配置文件指示哪些用户可以执行哪些命令。要使用sudo,用户必须提供指定的用户名和密码。注意:sudo需要的不是目标用户的密码,而是执行sudo的用户的密码。如果不在sudoers中的用户通过sudo执行命令,sudo会向管理员报告这个事件。用户可以通过sudo -v v查询自己是否在sudoers,如果是,它还可以更新你“准考证”上的时间;如果没有,它会提示您,但不会通知管理员。
sudo命令的格式如下:复制代码如下:sudo-k-l-v-h-k-l-v sudo[-hpsb][-a auth _ type][-c class-][-p prompt][-u username # uid]{-e file[.]-I-S。
我们来看看sudo的其他一些常用参数:
选项含义sudo-hHelp列出了用法和退出。Sudo-VVersion显示版本信息并退出。Sudo-lList列出了当前用户可以执行的命令。只有sudoers中的用户可以使用该选项。Sudo-uusername#uidUser以指定用户的身份执行命令。以下用户不是root,可以是用户名或#uid。
Sudo-kKill会清除“准考证”上的时间,下次使用Sudo时,要重新输入密码。
Sudo-KSurekill类似于-k,但是它要撕掉“准考证”,也就是删除时间戳文件。
Sudo-bcommandBackground在后台执行指定的命令。
Sudo-ppromptcommandPrompt可以更改询问密码的提示,其中%u将被替换为用户帐户名,%h将显示主机名。非常人性化的设计。Sudo-efileEdit不执行命令,而是修改文件,相当于命令sudoedit。
还有一些不常见的参数,可以在手册页sudo(8)中找到。
三。配置sudo
要配置sudo,您必须编辑/etc/sudoers文件,并且只有超级用户可以修改它。您还必须用visudo编辑它。使用Visudo有两个原因。首先,它可以防止
两个用户同时修改;其次,它还可以进行有限的语法检查。所以,即使你是唯一的超级用户,你也最好用visudo检查一下语法。
Visudo默认在vi中打开配置文件,并使用vi修改文件。我们可以在编译时修改这个默认项。Visudo不会在没有授权的情况下保存有语法错误的配置文件。它会提示你问题,询问如何处理,就像:复制代码code如下:sudoersfile:syntaxerror,line22此时我们有三种选择:键入“e”重新编辑,键入“x”退出不保存,键入“q”退出保存。如果你真的选择了Q,那么sudo就不会再运行了,直到错误被纠正。
现在,让我们来看看神秘的配置文件,并了解如何编写它。先说一个简单的例子:让用户Foobar通过sudo执行所有根可执行命令。以visudo为root打开配置文件,可以看到如下几行:复制代码如下:# runasalias specification # userprivilegesispecificationrootall=(all)all
一看就明白,差不多。root拥有所有权限,只需以现有root为例。下面再加一行(最好用tab作为空白):复制代码代码如下:foobaral=(ALL)ALL保存退出后,切换到foobar用户,我们以其身份执行命令:复制代码代码如下:[foobar @ localhost ~]$ ls/rootls:/root:权限不足[foobar @ localhost ~]$ sudols/root password:anaconda-ks . cfgdesktopinstall . log . syslog
好吧,让我们限制福巴为所欲为的权利。比如我们只是想让他像root一样使用ls和ifconfig,把那一行改成:复制代码如下:foobarlocahost=/sbin/ifconfig,/bin/ls再次执行命令:复制代码代码如下:[foobar @ localhost ~]$ sudo head-5/etc/shadow password:抱歉,Userfoobarsnoallowedtoexecute '/usr/bin/head-5/etc/shadow ' asrootonlocalhost . local domain .[foobar @ localhost ~]$ sudo/sbin/shadow.第一个ALL指的是网络中的主机。我们后来将其更改为主机名,这表明foobar可以在这台主机上执行以下命令。第二个括号中的ALL指的是目标用户,即将要执行命令的用户。最后的ALL当然指的是命令名。例如,我们希望foobar用户在linux主机上以jimmy或rene的身份执行kill命令,并编写如下配置文件:
FOBAR Linux=(jimmy,rene)/bin/kill但是还有一个问题。福巴是以吉米还是雷内的身份被处决的?这个时候应该想到了sudo-u,这种时候用的。Foobar可以使用sudo-ujimmykillPID或者sudo-urenekillPID,但是这个比较麻烦。事实上,我们可以将rene或jimmy设置为默认目标用户,而无需每次都添加-u。向其中添加另一行:
defaults:foobarunas _ default=Rene defaults如果后面有冒号,则是以下用户的默认值;如果没有,则是所有用户的默认设置。就像配置文件附带的行一样:
Defaultsenv_reset的另一个问题是,很多情况下,我们已经登录了,每次使用sudo都要输入密码,很麻烦。我们能停止输入密码吗?当然,我们像这样修改配置文件:
foor localhost=no passwd:/bin/cat,/bin/ls再来sudo:复制代码如下:[foobar @ localhost ~]$ sudols/root anaconda-ks . cfgdesktopinstall . log
install.log.syslog
当然你也可以用说“有些命令用户foobar无法运行”!运算符,但这不是一个好主意。因为,用!操作员从所有命令中“挑选”一些命令通常是无效的。用户可以将该命令复制到另一个地方,更改其名称并再次运行它。四。日志和安全性
Sudo在安全方面考虑的很周到,不仅可以记录日志,必要时还可以向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员打开。为此:复制代码code如下:# touch/var/log/sudo # VI/etc/syslog . conf。
在syslog.conf的末尾添加一行(必须用制表符分隔)并保存它:
Local2.debug/var/log/sudo重启日志等待过程,
Psauxgrepsyslogd按如下方式填写获得的syslogd进程的PID(输出的第二列是PID):
杀死-琥珀。这样sudo就可以写日志了:复制代码如下:[foobar @ localhost ~]$ sudols/rootanaconda-ks . CFG
desktop install . log install . log . syslog $ cat/var/log/sudo jul 2822:52:54 localhostsudo:foobar:TTY=pts/1;PWD=/home/foobar;用户=root命令=/bin/ls/root
不过有个小“瑕疵”就是sudo的日志不是很忠实:复制代码如下:[foobar @ localhost ~]$ su docat/etc/shadow/dev/null[foobar @ localhost ~]$ cat/var/log/sudo.PWD=/home/foobar;用户=root命令=/bin/cat/etc/shadow
重定向没有记录!为什么?因为shell在命令运行之前就完成了重定向,所以sudo根本没有看到重定向。这样也有下面手段不会成功的好处:复制代码代码如下:[foobar @ localhost ~]$ sudols/root/etc/shadow bash:/etc/shadow:权限不足sudo自有办法保护安全。以root身份执行sudo-V并检查sudo的设置。出于安全考虑,有些环境变量没有传递给sudo背后的命令,或者是经过检查后才传递,比如PATH、HOME、SHELL等。当然,也可以通过sudoers配置这些环境变量。
正如您所看到的,sudo对于控制和审查root的访问非常有帮助,它使系统管理员能够更有效和安全地管理系统。掌握sudo的正确用法对系统管理员来说也是一个很好的训练。本文只是简单介绍一下sudo的用法。有关更多信息,请参考sudoers(5)和sudo(8)的手册页。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。