Linux 系统中 root 账号通常用于系统的管理和维护,对操作系统的所有资源具有访问控制权限,当一个普通用户希望执行一些系统维护相关的操作的时候,就需要使用 sudo 命令,临时将该用户的权限提升到 root 权限,可以执行一些与系统维护相关的命令。
1 su 与 sudo 的异同
- 共同点:都可以用另一个用户权限执行命令,一般都是为了使用 root 用户权限,来进行一些操作。
- 不同点:su 要知道 root 密码才可以,sudo 只要输入自己的密码就可以了。
- 所以一般给予普通运维、开发人员的都是有 sudo 权限的普通用户,而不会开放 root 用户。
2 su 命令认识
su (switch user) 命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
- whoami # 查看当前是哪个用户;
- su root # 当前是 ops 普通用户,切换到 root 用户,需要输入密码;
- su # 等于 su root ,都是切换到 root 用户,都需要输入密码;
- su root # 切换到 root 用户,pwd 可看到目录位置未切换
- su - root # 切换到 root 用户,pwd 可看到目录位置切换为 /root
3 sudo 命令认识
sudo (superuser do) 命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
(1)查看当前用户被授予哪些权限?
可以使用 「sudo -l 」 查看当前用户被授权的 sudo 权限有哪些。
(2)赋予 sudo 权限的用户有哪些?
使用命令「sudo vim /etc/sudoers」,找到这一 行:"root ALL=(ALL) ALL",该行的下面即可看到赋予 sudo 权限的用户有哪些。
(3)如何添加用户,使其拥有 sudo 权限?
编辑 /etc/sudoers 文件。输入命令 "vim /etc/sudoers" ,进入编辑模式,找到这一 行:"root ALL=(ALL) ALL" 在它下面添加 "xxx ALL=(ALL) ALL" (这里的 xxx 是你的用户名),然后保存退出(关于赋予权限的控制,这里不做展开;也可使用 visudo 命令,这里不做细讲)。
4 几个常用命令辨析
- sudo -i # 假设当前用户为 ops 且被赋予 sudo 权限,执行该命令后,切换到 root 用户,pwd 可看到目录位置切换为 /root;
- sudo su docker # 假设当前用户为 ops 且被赋予 sudo 权限,执行该命令后,切换到 docker 用户,pwd 可看到目录位置未切换;相比当前用户 ops 直接使用「su docker」,可以免去密码输入;
- sudo -u docker touch readme.text # -u 指定 docker 用户,使用 sudo 权限执行命令;
5 小结
su 切换用户需要输入目标用户的 password;sudo 只需要知道自己的 password,可以避免 root 用户的 password 泄漏。也着重介绍了 sudo 的用户添加,查看赋予的权限以及配合 su 常用的一些使用案例。