Linux权限管理——su与sudo
1. su 和 sudo 的含义
1.1 su为switch user,即切换用户的简写。
su 命令经常被用于切换到超级用户或 root 用户(因为在命令行下工作,经常需要 root 权限)
su是最简单的身份切换名,用su我们能够进行不论什么用户的切换,一般都是su - username,然后输入password就ok了,可是root用su切换到其它身份的时候是不须要输入password的。
1.2 sudo是一种权限管理机制,依赖于/etc/sudoers。
配置文件 /etc/sudoers 中,定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令。
2. su 和 sudo 的区别
两个命令的最大区别是:
- sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。
- 另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。
- sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。
- 很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。
- 此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。
- 鉴于 sudo 命令要求输入的是其他用户自己的密码,所以不需要共享 root 密码。同时想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。
- 同时,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。
3. su 和 sudo 的命令格式
3.1 su 的命令格式有两种(不带用户名,默认切换到 root 用户):
1 2 3 | su // 第一种格式(不带命令参数),代表切换到 root 用户;接下来直接输入root密码即可 su [username] - // 第二种格式 |
su 命令与 su - 命令之间有什么区别呢?
前者在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,而后者则是创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),相当于使用 root (其他)用户正常登录(从登录屏幕登录)。
su 详细的命令格式如下:
1 | su [-fmp] [-c command ] [-s shell] [--help] [--version] [-] [USER [ARG]]<br><br>参数说明: |
- -f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
- -m -p 或 --preserve-environment 执行 su 时不改变环境变数
- -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
- -s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
- --help 显示说明文件
- --version 显示版本资讯
-
-l
或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root- USER 欲变更的使用者帐号
- ARG 传入新的 shell 参数
3.2 sudo 的命令格式如下:
1 | sudo [-b] [-u 新使用者账号] 要执行的命令<br><br>eg:<br>[root@localhost ~] # sudo -u sshd touch /tmp/mysshd // 以 sshd 的身份在 /tmp 目录下创建 mysshd 文件<br>[root@localhost ~]# ll /tmp/mysshd // 显示该文件的文件属性<br>-rw-r--r-- 1 sshd sshd 0 Feb 28 17:42 /tmp/mysshd // 可以看见,新创建的 mysshd 文件的所有者确实是 sshd |
常用的选项与参数:
- -b :将后续的命令放到背景中让系统自行运行,不对当前的 shell 环境产生影响。
- -u :后面可以接欲切换的用户名,若无此项则代表切换身份为 root 。
- -l :此选项的用法为 sudo -l,用于显示当前用户可以用 sudo 执行那些命令。
4. sudo 命令的执行过程:
sudo命令的运行,需经历如下几步:
- 当用户运行 sudo 命令时,系统会先通过 /etc/sudoers 文件,验证该用户是否有运行 sudo 的权限;
- 确定用户具有使用 sudo 命令的权限后,还要让用户输入自己的密码进行确认。出于对系统安全性的考虑,如果用户在默认时间内(默认是 5 分钟)不使用 sudo 命令,此后使用时需要再次输入密码;
- 密码输入成功后,才会执行 sudo 命令后接的命令。
5. sudo命令的配置文件/etc/sudoers
1. 切换到root用户权限
1 2 3 4 | [tom@czwEdu01 temp]$ visudo visudo: /etc/sudoers : 权限不够 [tom@czwEdu01 temp]$ su - 密码: |
2. 查看/etc/sudoers文件权限,如果只读权限,修改为可写权限;
1 2 3 4 5 | [root@czwEdu01 ~] # vim /etc/sudoers [root@czwEdu01 ~] # ll /etc/sudoers -r--r-----. 1 root root 4328 Oct 30 2018 /etc/sudoers [root@czwEdu01 ~] # chmod 777 /etc/sudoers [root@czwEdu01 ~] # ll /etc/sudoers -rwxrwxrwx. 1 root root 4328 Oct 30 2018 /etc/sudoers |
3. 执行vi命令(用visudo更合适),编辑/etc/sudoers文件,添加要提升权限的用户;在文件中找到root ALL=(ALL) ALL,在该行下添加提升权限的用户信息;
4. 保存退出,并恢复/etc/sudoers的访问权限为440;
1 2 | [root@czwEdu01 ~] # chmod 440 /etc/sudoers [root@czwEdu01 ~] # ll /etc/sudoers<br>-r--r-----. 1 root root 4328 Oct 30 2018 /etc/sudoers |
5. 切换到普通用户,测试用户权限提升功能
分类:
Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?