sudo 标明 “superuser do”。 它答应已验证的用户以其他用户的身份来运转指令。其他用户可所以普通用户或许超级用户。可是,大部分时分咱们用它来以进步的权限来运转指令。
sudo 指令与安全策略合作运用,默许安全策略是 sudoers,能够经过文件 /etc/sudoers 来装备。其安全策略具有高度可拓展性。人们能够开发和分发他们自己的安全策略作为插件。
与 su 的差异
在 GNU/Linux 中,有两种方法能够用进步的权限来运转指令:
运用 su 指令
运用 sudo 指令
su 标明 “switch user”。运用 su,咱们能够切换到 root 用户而且履行指令。可是这种方法存在一些缺陷:
咱们需求与别人同享 root 的暗码。
由于 root 用户为超级用户,咱们不能颁发受控的拜访权限。
咱们无法检查用户在做什么。
sudo 以共同的方法处理了这些问题。
首要,咱们不需求退让来共享 root 用户的暗码。普通用户运用他们自己的暗码就能够用进步的权限来履行指令。
咱们能够操控 sudo 用户的拜访,这意味着咱们能够约束用户只履行某些指令。
除此之外,sudo 用户的一切活动都会被记载下来,因而咱们能够随时检查进行了哪些操作。在根据 Debian 的 GNU/Linux 中,一切活动都记载在 /var/log/auth.log 文件中。
实践着手操作 sudo
现在,咱们对 sudo 有了大致的了解。让咱们实践着手操作吧。为了演示,我运用 Ubuntu。可是,其它发行版别的操作应该是相同的。
答应 sudo 权限
让咱们增加普通用户为 sudo 用户吧。在我的景象中,用户名为 linuxtechi。
按如下所示修改 /etc/sudoers 文件:
$ sudo visudo
增加以下行来答应用户 linuxtechi 有 sudo 权限:
linuxtechi ALL=(ALL) ALL
上述指令中:
linuxtechi 标明用户名
第一个 ALL 指示答应从任何终端、机器拜访 sudo
第二个 (ALL) 指示 sudo 指令被答应以任何用户身份履行
第三个 ALL 标明一切指令都能够作为 root 履行
以进步的权限履行指令
要用进步的权限履行指令,只需求在指令前加上 sudo,如下所示:
$ sudo cat /etc/passwd
当你履行这个指令时,它会问询 linuxtechi 的暗码,而不是 root 用户的暗码。
以其他用户履行指令
除此之外,咱们能够运用 sudo 以另一个用户身份履行指令。例如,鄙人面的指令中,用户 linuxtechi 以用户 devesh 的身份履行指令:
$ sudo -u devesh whoami [sudo] password for linuxtechi: devesh
内置指令行为
sudo 的一个约束是 —— 它无法运用 Shell 的内置指令。例如, history 记载是内置指令,假如你试图用 sudo 履行这个指令,那么会提示如下的未找到指令的过错:
$ sudo history [sudo] password for linuxtechi: sudo: history: command not found
拜访 root shell
为了战胜上述问题,咱们能够拜访 root shell,并在那里履行任何指令,包含 Shell 的内置指令。
要拜访 root shell, 履行下面的指令:
$ sudo bash
履行完这个指令后——您将观察到提示符变为井号(#)。
技巧
这节咱们将评论一些有用的技巧,这将有助于进步生产力。大多数指令可用于完结日常使命。
以 sudo 用户履行之前的指令
让咱们假定你想用进步的权限履行之前的指令,那么下面的技巧将会很有用:
$ sudo !4
上面的指令将运用进步的权限履行历史记载中的第 4 条指令。
在 Vim 里边运用 sudo 指令
许多时分,咱们修改体系的装备文件时,在保存时才意识到咱们需求 root 拜访权限来履行此操作。由于这个或许让咱们丢掉咱们对文件的改动。没有必要慌张,咱们能够在 Vim 中运用下面的指令来处理这种状况:
:w !sudo tee %
上述指令中:
冒号 (:) 标明咱们处于 Vim 的退出形式
感叹号 (!) 标明咱们正在运转 shell 指令
sudo 和 tee 都是 shell 指令
百分号 (%) 标明从当前行开端的一切行
运用 sudo 履行多个指令
至今咱们用 sudo 只履行了单个指令,但咱们能够用它履行多个指令。只需求用分号 (;) 离隔指令,如下所示:
$ sudo — bash -c ‘pwd; hostname; whoami’
上述指令中
双连字符 (–) 中止指令行切换
bash 标明要用于履行指令的 shell 称号
-c 选项后边跟着要履行的指令
无暗码运转 sudo 指令
当第一次履行 sudo 指令时,它会提示输入暗码,默许景象下暗码被缓存 15 分钟。可是,咱们能够防止这个操作,并运用 NOPASSWD 关键字禁用暗码认证,如下所示:
linuxtechi ALL=(ALL) NOPASSWD: ALL
约束用户履行某些指令
为了供给受控拜访,咱们能够约束 sudo 用户只履行某些指令。例如,下面的行只答应履行 echo 和 ls 指令 。
linuxtechi ALL=(ALL) NOPASSWD: /bin/echo /bin/ls
深化了解 sudo
让咱们进一步深化了解 sudo 指令。
$ ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 145040 Jun 13 2017 /usr/bin/sudo
假如仔细观察文件权限,则发现 sudo 上启用了 setuid 位。当任何用户运转这个二进制文件时,它将以具有该文件的用户权限运转。在所示景象下,它是 root 用户。
为了演示这一点,咱们能够运用 id 指令,如下所示:
$ id uid=1002(linuxtechi) gid=1002(linuxtechi) groups=1002(linuxtechi)
当咱们不运用 sudo 履行 id 指令时,将显现用户 linuxtechi 的 id。
$ sudo id uid=0(root) gid=0(root) groups=0(root)
可是,假如咱们运用 sudo 履行 id 指令时,则会显现 root 用户的 id。
定论
从这篇文章能够看出 —— sudo 为普通用户供给了更多受控拜访。运用这些技能,多用户能够用安全的方法与 GNU/Linux 进行交互。