关于linux:linux之sudo使用技巧汇总

2次阅读

共计 2305 个字符,预计需要花费 6 分钟才能阅读完成。

sudo 和 su 之间的区别

  • su 用于用户之间的切换
  • sudo 用于普通用户能够应用 root 权限来执行命令

su 命令是以后用户用来切换到另外一个用户的命令,参数为用户名。执行时会要求输出明码,这个明码是你要切换到的用户的明码。

sudo 示意“superuser do”。它容许已验证的用户以其余用户的身份来运行命令。其余用户能够是普通用户或者超级用户。然而,绝大部分时候咱们用它来以晋升的权限来运行命令。

sudo 命令工作流程

  • sudo 会读取和解析 /etc/sudoers 文件, 查找调用的用户及权限
  • 提醒调用该命令用户的明码, 如果有 NOPASSWD 标记则跳过明码验证.
  • sudo 会创立一个子过程, 调用 setuid 来切换到指标用户
  • 最初会在子过程中执行给定的 shell 命令

sudo 的配置

USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS
  • USER/GROUP: 示意要被受权的用户或组, 如果是组要以 % 结尾
  • HOST: 示意容许从哪些主机登录的用户运行 sudo,ALL示意容许任何终端, 机器拜访.
  • (USER[:GROUP]): 示意应用 sudo 可切换的用户或者组,组能够不指定;ALL 示意能够切换到零碎的所有用户.
  • NOPASSWD: 如果指定, 则该用户或者组应用 sudo 时就不必输出明码
  • COMMANDS: 示意运行指定的命令,ALL 示意容许指定任何命令
# 容许 sudo 组执行所有命令
%sudo ALL=(ALL:ALL) ALL

# 容许用户执行所有命令,且无需输出明码
escape ALL =(ALL) NOPASSWD: ALL

# 仅容许用户执行 echo, ls 命令
escape ALL =(ALL) NOPASSWD: /bin/echo /bin/ls

# 运行本机的用户执行关机命令
escape localhost=/sbin/shutdown -h now

# 容许 users 用户组中的用户像 root 用户一样应用 mount、unmount、chrom 命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

以晋升的权限执行命令

> sudo cat /etc/passwd

当你执行这个命令时,它会询问 rumenz 的明码,而不是 root 用户的明码。

以其余用户执行命令

> sudo -u deploy whoami
deploy

内置命令行为

sudo 的一个限度是 —— 它无奈应用 Shell 的内置命令。history 记录是内置命令,如果你试图用 sudo 执行这个命令,那么会提醒如下的未找到命令的谬误:

> sudo history 
[sudo] password for rumenz: 
sudo: history: command not found

咱们能够拜访 root shell,并在那里执行任何命令,包含 Shell 的内置命令。
要拜访 root shell, 执行上面的命令:

> [rumenz@localhost]$ sudo bash
> [root@localhost rumenz]# history

sudo 执行多条命令

sudo -- bash -c 'pwd; hostname; whoami'
  • 双连字符 (–) 进行命令行切换
  • bash 示意要用于执行命令的 shell 名称
  • - c 选项前面跟着要执行的命令

限度用户执行某些命令

为了提供受控拜访,咱们能够限度 sudo 用户只执行某些命令。例如,上面的行只容许执行 echo 和 ls 命令。

rumenz ALL=(ALL) NOPASSWD: /bin/echo /bin/ls

在 vim 外面应用 sudo 命令

咱们编辑零碎的配置文件时,在保留时才意识到咱们须要 root 拜访权限来执行此操作。因为这个可能让咱们失落咱们对文件的改变。没有必要惊恐,咱们能够在 Vim 中应用上面的命令来解决这种状况

:w !sudo tee %
  • 冒号 (? 表明咱们处于 Vim 的退出模式
  • 感叹号 (!) 表明咱们正在运行 shell 命令
  • sudo 和 tee 都是 shell 命令
  • 百分号 (%) 表明从以后行开始的所有行

sudo 的原理

> ls -l /usr/bin/sudo
---s--x--x. 1 root root 143248 Jun 28  2018 /usr/bin/sudo

如果仔细观察文件权限,则发现 sudo 上启用了 setuid 位。当任何用户运行这个二进制文件时,它将以领有该文件的用户权限运行。在所示情景下,它是 root 用户。

当咱们不应用 sudo 执行 id 命令时,将显示用户 rumenz 的 id。

> id
uid=1001(rumenz) gid=1001(rumenz) groups=1001(rumenz)

当应用 sudo id

uid=0(root) gid=0(root) groups=0(root)

sudo -i

sudo -i: 能够切换到 root 状态下. 为了频繁的执行某些只有超级用户能力执行的权限,而不必每次输出明码,能够应用该命令。提醒输出明码时该明码为以后账户的明码。没有工夫限度。执行该命令后提示符变为“#”而不是“$”。想退回一般账户时能够执行 exitlogout

sudo !!

Linux 命令行记录以前执行的命令。能够通过按向上箭头拜访这些记录。要以晋升的特权反复执行最初一个命令,请应用

> sudo !!

sudo !n

想要作为 root 受权来运行一个命令,然而遗记应用“sudo”了? 不要放心。咱们能够应用”sudo !!”联合命令历史来执行你想要执行的命令。参数”!!“和”!-1“作用一样,都是容许用户作为 root 来执行咱们方才输出的命令。当然,以此类推,咱们能够应用上面命令来执行倒数第二个命令:

> sudo !-2

原文链接:https://rumenz.com/rumenbiji/…
微信公众号: 入门小站

正文完
 0