linux 之 sudo 使用技巧汇总
sudo 和 su 之间的区别
su 用于用户之间的切换
sudo 用于普通用户可以使用 root 权限来执行命令
su 命令是当前用户用来切换到另外一个用户的命令,参数为用户名。执行时会要求输入密码,这个密码是你要切换到的用户的密码。
sudo 表示 “superuser do”。它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,绝大部分时候我们用它来以提升的权限来运行命令。
sudo 命令工作流程
sudo 会读取和解析/etc/sudoers 文件,查找调用的用户及权限
提示调用该命令用户的密码,如果有
NOPASSWD
标志则跳过密码验证.sudo 会创建一个子进程,调用 setuid 来切换到目标用户
最后会在子进程中执行给定的 shell 命令
sudo 的配置
USER/GROUP: 表示要被授权的用户或组,如果是组要以
%
开头HOST: 表示允许从哪些主机登录的用户运行 sudo,
ALL
表示允许任何终端,机器访问.(USER[:GROUP]): 表示使用 sudo 可切换的用户或者组,组可以不指定;ALL 表示可以切换到系统的所有用户.
NOPASSWD:如果指定,则该用户或者组使用 sudo 时就不用输入密码
COMMANDS:表示运行指定的命令,ALL 表示允许指定任何命令
以提升的权限执行命令
当你执行这个命令时,它会询问 rumenz 的密码,而不是 root 用户的密码。
以其他用户执行命令
内置命令行为
sudo 的一个限制是 —— 它无法使用 Shell 的内置命令。history 记录是内置命令,如果你试图用 sudo 执行这个命令,那么会提示如下的未找到命令的错误:
我们可以访问 root shell,并在那里执行任何命令,包括 Shell 的内置命令。
要访问 root shell, 执行下面的命令:
sudo 执行多条命令
双连字符 (–) 停止命令行切换
bash 表示要用于执行命令的 shell 名称
-c 选项后面跟着要执行的命令
限制用户执行某些命令
为了提供受控访问,我们可以限制 sudo 用户只执行某些命令。例如,下面的行只允许执行 echo 和 ls 命令 。
在 vim 里面使用 sudo 命令
我们编辑系统的配置文件时,在保存时才意识到我们需要 root 访问权限来执行此操作。因为这个可能让我们丢失我们对文件的改动。没有必要惊慌,我们可以在 Vim 中使用下面的命令来解决这种情况
冒号 (? 表明我们处于 Vim 的退出模式
感叹号 (!) 表明我们正在运行 shell 命令
sudo 和 tee 都是 shell 命令
百分号 (%) 表明从当前行开始的所有行
sudo 的原理
如果仔细观察文件权限,则发现 sudo 上启用了 setuid 位。当任何用户运行这个二进制文件时,它将以拥有该文件的用户权限运行。在所示情形下,它是 root 用户。
当我们不使用 sudo 执行 id 命令时,将显示用户 rumenz 的 id。
当使用
sudo id
时
sudo -i
sudo -i:可以切换到 root 状态下. 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行
exit
或logout
。
sudo !!
Linux 命令行记录以前执行的命令。可以通过按向上箭头访问这些记录。要以提升的特权重复执行最后一个命令,请使用
sudo !n
想要作为 root 授权来运行一个命令,但是忘记使用“sudo”了?不要担心。我们可以使用”sudo !!”结合命令历史来执行你想要执行的命令。参数”!!“和”!-1“作用一样,都是允许用户作为 root 来执行我们刚才输入的命令。当然,以此类推,我们可以使用下面命令来执行倒数第二个命令:
原文链接:https://rumenz.com/rumenbiji/linux-sudo-skills.html微信公众号:入门小站
回复【1001】获取 linux 常用命令速查手册
回复【10010】获取 阿里云 ECS 运维 Linux 系统诊断
回复【10012】获取 Linux 学习笔记【强悍总结值得一看】
回复【10013】获取 shell 简明教程
版权声明: 本文为 InfoQ 作者【入门小站】的原创文章。
原文链接:【http://xie.infoq.cn/article/6bb95679e0f6a0ebcccb4147c】。文章转载请联系作者。
评论