今天,主机频道将与您分享如何在linux系统中使用sudo命令的相关知识点。内容详细,逻辑清晰。我相信大多数人都太了解这些知识了,所以我将分享这篇文章供您参考。希望你看完这篇文章后有所收获。让我们一起来看看吧。
例如,运行一些命令,如mount、halt、su,或者编辑一些系统配置文件,如/etc/mtab、/etc /samba/smb.conf等。这样不仅减少了root用户的登录次数和管理时间,还提高了系统安全性。一、苏多的特点
Sudo的角色注定要在安全方面格外谨慎,否则会导致非法用户抢夺root权限。同时,它应该考虑易用性,以便系统管理员可以更有效和方便地使用它。Sudo设计者的目标是给用户尽可能少的权限,但仍然允许他们完成工作。因此,sudo具有以下特征:
# 1.sudo可以限制指定用户在指定主机上运行某些命令。# 2.sudo可以提供日志,如实记录每个用户使用sudo做了什么,并可以将日志传输到中央主机或日志服务器。# 3.sudo为系统管理员提供了一个配置文件,允许系统管理员集中管理用户的使用权和所使用的主机。它的默认存储位置是/etc/sudoers。# 4.sudo使用时间戳文件来完成一个类似于“检票”的系统。当用户执行sudo并输入密码时,用户将获得一张默认生存期为5分钟的“票”(默认值可以在编译时更改)。超时后,用户必须重新输入密码。
二。sudo订单
Sudo程序本身是一个设置了suid位的二进制文件。我们可以检查它的权限:
复制代码代码如下:
$ ls-l/usr/bin/sudo-s-x-x 2 root 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-vsudo【-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-bcommandcbackground在后台执行指定的命令。
sudo-ppmptcommandprompt可以更改密码提示,其中%u将被用户帐户名替换,而%h将显示主机名。非常人性化的设计。Sudo-efileedit不是执行命令,而是修改文件,它相当于命令sudoedit。
还有一些不常见的参数,可以在手册页sudo(8)中找到。
三。配置sudo
要配置sudo,您必须编辑/etc/sudoers文件,并且只有超级用户可以修改它,您还必须使用visudo来编辑它。使用Visudo有两个原因。首先,它可以防止
两个用户同时修改它;其次,它还可以进行有限的语法检查。所以,即使你只是一个超级用户,你也最好使用visudo来检查语法。
默认情况下,Visudo在vi中打开配置文件,并使用vi修改文件。我们可以在编译时修改这个默认项。Visudo不会在未经授权的情况下保存有语法错误的配置文件。它会提示您出现问题并询问如何处理它们,就像:
复制代码代码如下:
& gt& gt& gtsudoersfile:syntaxerror,第22行& lt& lt
此时,我们有三种选择:键入“e”重新编辑,键入“x”退出而不保存,键入“q”退出并保存。如果真的选择了Q,sudo将不会再次运行,直到错误被纠正。
现在,让我们来看看这个神秘的配置文件,并了解如何编写它。让我们从一个简单的例子开始:让用户foobar通过sudo执行所有root可执行命令。以visudo为根用户打开配置文件,您可以看到以下几行:
复制代码代码如下:
# runasaliasspecification # userprivilegesispecificationrootall =(all)all
我们一眼就能看出root拥有所有权限,只需遵循root的现有示例即可。让我们在下面添加一行(最好使用tab作为空白):
复制代码代码如下:
foobarall =(all)all
保存并退出后,切换到foobar用户,我们将使用其身份执行命令:
复制代码代码如下:
【foobar @ localhost ~】$ ls/rootls:/root:权限不足【foobar @ localhost ~】$ sudols/root password:anaconda-ks . CFG desktop install . log install . log . syslog
好吧,让我们限制foobar的权利,防止他为所欲为。例如,我们只想让他像root一样使用ls和ifconfig,并将该行改为:
复制代码代码如下:
foobarlocalhost=/sbin/ifconfig,/bin/ls
然后执行命令:
复制代码代码如下:
【foobar @ localhost ~】$ sudo head-5/etc/shadow password:抱歉,userfoobarisnotlowedtoexecute & # 39;/usr/bin/head-5/etc/shadow & # 39;asrootonlocalhost . local domain .【foobar @ localhost ~】$ sudo/sbin/ifconfigeth 0 linkencap:ethernethwaddr 00:14:85:EC:e9:9b...
现在让我们来看看这三个词的真正含义。第一个all指的是网络中的主机,我们后来将其更改为主机名,这表明foobar可以在该主机上执行以下命令。第二个括号中的all表示目标用户,即执行命令的用户。最后一个all当然指的是命令名。例如,我们希望foobar用户在linux主机上以jimmy或rene的身份执行kill命令,并编写如下配置文件:
foobar Linux =(Jimmy,Rene)/bin/kill但还是有一个疑问。foobar是以Jimmy还是Rene的身份执行任务?这时我们应该想到了此时使用的sudo-u。Foobar可以使用sudo-ujimmykillpid或sudo-urenekillpid,但这非常麻烦。事实上,我们可以将rene或jimmy设置为默认目标用户,而无需每次都添加-u。向其添加另一行:
Defaults:foobarunas _ default = Rene Defaults如果后面有冒号,则是以下用户的默认值;如果没有,则是所有用户的默认设置。就像配置文件中的一行:
defaultsenv_reset的另一个问题是,很多时候,我们已经登录了,每次使用sudo时输入密码都很麻烦。我们能停止输入密码吗?当然,我们可以像这样修改配置文件:
foobar localhost = no passwd:/bin/cat,/bin/ls再次访问sudo:
复制代码代码如下:
【foobar @ localhost ~】$ sudols/root anaconda-ks . cfgdesktopinstall . log
install.log.syslog
当然,你也可以说“某些命令用户foobar无法运行”,方法是使用!操作员,但这不是一个好主意。因为,用!操作员从所有命令中“剔除”一些命令通常是无效的。用户可以将该命令完全复制到另一个地方,并在更改名称后再次运行它。四。日志和安全性
Sudo考虑到了安全性,不仅可以记录日志,还可以在必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员打开。执行以下操作:
复制代码代码如下:
# touch/var/log/sudo # VI/etc/syslog . conf
在syslog.conf的末尾添加一行(必须用制表符分隔)并保存它:
Local2.debug/var/log/sudo重新启动了日志等待过程,
Psauxgrepsyslogd填写syslogd进程的pid(输出的第二列是pid),如下所示:
通过这种方式,sudo可以写日志:
复制代码代码如下:
【foobar @ localhost ~】$ sudols/root anaconda-ks . CFG
desktop install . log install . log . syslog $ cat/var/log/sudo jul 2822:52:54 localhostsudo:foobar:tty = pts/1;pwd =/home/foobar;user = root命令=/bin/ls/root
然而,有一个小“缺陷”就是sudo的日志记录不太可靠:
复制代码代码如下:
【foobar @ localhost ~】$ su docat/etc/shadow & gt;/dev/null【foobar @ localhost ~】$ cat/var/log/sudo...July 2823:10:24 localhostsudo:foobar:tty = pts/1;pwd =/home/foobar;user = root命令=/bin/cat/etc/shadow
重定向未录制!为什么?因为shell在命令运行之前就完成了重定向工作,所以sudo根本看不到重定向。这也有一个好处,以下手段不会成功:
复制代码代码如下:
【foobar @ localhost ~】$ sudols/root & gt;/etc/shadowbash:/etc/shadow:权限不足。
Sudo有自己的方式来保护安全。以root用户身份执行sudo-v并检查sudo的设置。出于安全考虑,一些环境变量没有传递给sudo后面的命令,或者在检查后传递,例如path、home、shell等。当然,您也可以通过sudoers配置这些环境变量。
评论前必须登录!
注册