首页 技术资料正文

Linuxsudo命令用法详解:系统权限管理(编译)

piaodoo 技术资料 2022-08-27 02:32:31 851 0

Linux sudo命令用法详解:系统权限管理(编译)

Linux sudo命令用法详解:系统权限管理

我们知道,使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:

  • 仅仅为了一个特权操作就直接赋予普通用户控制系统的完整权限;
  • 当多人使用同一台主机时,如果大家都要使用 su 命令切换到 root 身份,那势必就需要 root 的密码,这就导致很多人都知道 root 的密码;
考虑到使用 su 命令可能对系统安装造成的隐患,最常见的解决方法是使用 sudo 命令,此命令也可以让你切换至其他用户的身份去执行命令。相对于使用 su 命令还需要新切换用户的密码,sudo 命令的运行只需要知道自己的密码即可,甚至于,我们可以通过手动修改 sudo 的配置文件,使其无需任何密码即可运行。sudo 命令默认只有 root 用户可以运行,该命令的基本格式为:

[root@localhost ~] sudo [-b] [-u 新使用者账号] 要执行的命令

常用的选项与参数:
  • -b  :将后续的命令放到背景中让系统自行运行,不对当前的 shell 环境产生影响。
  • -u  :后面可以接欲切换的用户名,若无此项则代表切换身份为 root 。
  • -l:此选项的用法为 sudo -l,用于显示当前用户可以用 sudo 执行那些命令。
【例 1】

[root@localhost ~]  grep sshd /etc/passwdsshd:x:74:74:privilege-separated SSH:/var/empty/sshd:/sbin.nologin[root@localhost ~]  sudo -u sshd touch /tmp/mysshd[root@localhost ~]  ll /tmp/mysshd-rw-r--r-- 1 sshd sshd 0 Feb 28 17:42 /tmp/mysshdclose的过去式

本例中,无法使用 su - sshd 的方式成功切换到 sshd 账户中,因为此用户的默认 Shell 是 /sbin/nologin。这时就显现出 sudo 的优势,我们可以使用 sudo 以 sshd 的身份在 /tmp 目录下创建 mysshd 文件,可以看到,新创建的 mysshd 文件的所有者确实是 sshd。【例 2】

[root@localhost ~]  sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \>  echo &39;This is index.html file&39; > index.html"[root@localhost ~]  ll -a ~vbird1/wwwdrwxr-xr-x 2 vbird1 vbird1 4096 Feb 28 17:51 .drwx------ 5 vbird1 vbird1 4096 Feb 28 17:51 ..-rw-r--r-- 1 vbird1 vbird1   24 Feb 28 17:51 index.htmlclose的过去式

这个例子中,使用 sudo 命令切换至 vbird1 身份,并运行 sh -c 的方式来运行一连串的命令。前面说过,默认情况下 sudo 命令只有 root 身份可以使用,那么,如何让普通用户也能使用它呢?解决这个问题之前,先给大家分析一下 sudo 命令的执行过程。sudo命令的运行,需经历如下几步:
  • 当用户运行 sudo 命令时,系统会先通过 /etc/sudoers 文件,验证该用户是否有运行 sudo 的权限;
  • 确定用户具有使用 sudo 命令的权限后,还要让用户输入自己的密码进行确认。出于对系统安全性的考虑,如果用户在默认时间内(默认是 5 分钟)不使用 sudo 命令,此后使用时需要再次输入密码;
  • 密码输入成功后,才会执行 sudo 命令后接的命令。
显然,能否使用 sudo 命令,取决于对 /etc/sudoers 文件的配置(默认情况下,此文件中只配置有 root 用户)。所以接下来,我们学习对 /etc/sudoers 文件进行合理的修改。

sudo命令的配置文件/etc/sudoersclose的过去式

修改 /etc/sudoers,不建议直接使用 vim,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件,离开修改页面时,系统会自行检验 /etc/sudoers 文件的语法。因此,修改 /etc/sudoers 文件的命令如下:

[root@localhost ~] visudo…省略部分输出…root ALL=(ALL) ALL  <--大约 76 行的位置%wheel ALL=(ALL) ALL   <--大约84行的位置这两行是系统为我们提供的模板,我们参照它写自己的就可以了…省略部分输出…close的过去式

通过 visudo 命令,我们就打开了 /etc/sudoers 文件,可以看到如上显示的 2 行信息,这是系统给我们提供的 2 个模板,分别用于添加用户和群组,使其能够使用 sudo 命令。这两行模板的含义分为是:

root ALL=(ALL) ALL用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)%wheel ALL=(ALL) ALL%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

表 1 对以上 2 个模板的各部分进行详细的说明。
表 1 /etc/sudoers 用户和群组模板的含义
模块含义
用户名或群组名表示系统中的那个用户或群组,可以使用 sudo 这个命令。
被管理主机的地址用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。
可使用的身份就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。
授权命令表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。
【例 3】授权用户 lamp 可以重启服务器,由 root 用户添加,可以在 /etc/sudoers 模板下添加如下语句:

[root@localhost ~] visudolamp ALL=/sbin/shutdown -r now

注意,这里也可以写多个授权命令,之间用逗号分隔。用户 lamp 可以使用 sudo -l 查看授权的命令列表:

[root@localhost ~] su - lamp切换成lamp用户[lamp@localhost ~]$ sudo -l[sudo] password for lamp:需要输入lamp用户的密码User lamp may run the following commands on this host:(root) /sbin/shutdown -r nowclose的过去式

可以看到,lamp 用户拥有了 shutdown -r now 的权限。这时,lamp 用户就可以使用 sudo 执行如下命令重启服务器:

[lamp@localhost ~]$ sudo /sbin/shutdown -r nowclose的过去式

再次强调,授权命令要使用绝对路径(或者把 /sbin 路径导入普通用户 PATH 路径中,不推荐使用此方式),否则无法执行。【例 4】假设现在有 pro1,pro2,pro3 这 3 个用户,还有一个 group 群组,我们可以通过在 /etc/sudoers 文件配置 wheel 群组信息,令这 3 个用户同时拥有管理系统的权限。首先,向 /etc/sudoers 文件中添加群组配置信息:

[root@localhost ~] visudo....(前面省略)....%group     ALL=(ALL)    ALL在 84 行wheel这一行后面写入

此配置信息表示,group 这个群组中的所有用户都能够使用 sudo 切换任何身份,执行任何命令。接下来,我们使用 usermod 命令将 pro1 加入 group 群组,看看有什么效果:

[root@localhost ~] usermod -a -G group pro1[pro1@localhost ~] sudo tail -n 1 /etc/shadow <==注意身份是 pro1....(前面省略)....Password:  <==输入 pro1 的口令喔!pro3:$1$GfinyJgZ$9J8IdrBXXMwZIauANg7tW0:14302:0:99999:7:::[pro2@localhost ~] sudo tail -n 1 /etc/shadow <==注意身份是 pro2Password:pro2 is not in the sudoers file.  This incident will be reported.此错误信息表示 pro2 不在 /etc/sudoers 的配置中。close的过去式

可以看到,由于 pro1 加入到了 group 群组,因此 pro1 就可以使用 sudo 命令,而 pro2 不行。同样的道理,如果我们想让 pro3 也可以使用 sudo 命令,不用再修改 /etc/sudoers 文件,只需要将 pro3 加入 group 群组即可。

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/119462.html

搜索