04 CentOS 7:su&sudo详解
1. 前言
在 Linux
系统中,su
和 sudo
都是用于执行权限提升操作的命令。
2. su (Switch User)
2.1. 定义
su
是 switch user
的缩写,用于切换到另一个用户账户。默认情况下,如果没有指定用户名,则默认尝试切换到 root
用户。
2.2. 语法
# su 命令的基本语法
su [选项] [用户名]
其中,方括号 [ ]
内的内容是可选的。下面是一些常用的选项及其含义:
选项 | 简述 |
---|---|
空 | 无任何选项。su 默认切换到 root 用户。需要输入 root 账户密码。 |
- 或 --login | 此选项会让 su 命令模拟一个完整的登录过程,包括读取目标用户的初始化文件(如 .profile 或 .bashrc ),并改变当前目录到目标用户的家目录。语法: su - [用户名] 或 su --login [用户名] 。 |
-c "[命令]" | 允许以另一个用户的身份执行一个命令,然后立即返回到当前用户。 语法: su -c "[命令]" [用户名] ,这里 命令需要用引号包裹 以避免 shell 解析问题。 |
-f 或 --fast | 此选项主要对 csh 和 tcsh shell 有用。它告诉 shell 不要读取启动文件,从而加快切换速度。 |
-m 或 -p 或 --preserve-environment | 切换用户时保持当前环境变量不变,这对于需要原用户环境的某些操作很有用。 |
-s [shell脚本] | 指定要作为目标用户执行的 shell 。语法: su -s [shell脚本] [用户名] |
2.3. 环境变量
使用 su
仅切换用户身份,而不改变当前的环境变量和工作目录。使用 su -
或 su --login
可以启动一个新的登录 shell
,这样会加载目标用户的环境变量,并将工作目录改为该用户的家目录。
2.4. 权限
切换后,用户将拥有目标用户的全部权限,直到退出该用户会话。
2.5. 安全性和审计
su
不具备像 sudo
那样的细粒度权限控制和操作审计功能。
3. sudo (SuperUser DO)
3.1. 定义
sudo
允许授权用户以其他用户(通常是 root
)的权限运行命令,而无需直接变成那个用户。
3.2. 语法
# sudo 命令的基本语法
sudo [选项] 命令
其中,方括号 [ ]
内的内容是可选的。sudo
允许授权用户以另一个用户(通常是 root
)的权限执行命令。下面是一些常用的选项及其含义:
选项 | 简述 |
---|---|
空 | 最简单的形式。直接在 sudo 后面跟上想以特权模式执行的命令。例如:sudo ls /root 会以 root 权限列出 /root 目录的内容。 |
-l 或 --list | 列出当前用户在 sudoers 文件中被允许执行的命令。 |
-u [用户名] | 指定以哪个用户的身份执行命令。如果不指定,默认为 root 。例如:sudo -u user1 systemctl restart apache2 将以 user1 用户重启 Apache 服务。 |
-s 或 --shell | 启动一个新的 shell ,通常是作为目标用户(默认是 root )。例如:sudo -s 会以 root 用户启动一个交互式 shell 。 |
-i 或 --login | 类似于 -s ,但还会初始化环境变量,相当于进行了一个完整的登录过程。例如:sudo -i 会启动一个具有 root 环境的交互式 shell 。 |
-H 或 --set-home | -s 或 -i 一起使用时,会把 HOME 环境变量设置为目标用户的家目录。 |
-k 或 --reset-timestamp | 清除过去成功执行 sudo 命令的缓存时间戳,下次使用 sudo 时需要重新输入密码。 |
-v 或 --validate | 更新 sudo 的时间戳,如果密码仍然有效则不提示输入密码。 |
3.3. 密码要求
使用 sudo
执行命令时,需要输入当前用户的密码,而不是目标用户的密码(默认配置下)。这意味着普通用户可以用自己的密码临时获得执行特定命令的超级用户权限。
3.3. 环境变量
sudo
默认保留当前用户的环境变量,但可以通过 sudo -i
或 sudo -s
启动一个类似登录 shell
的环境,以获取目标用户的环境变量。
3.4. 权限
sudo
提供的权限提升是临时的,通常一次命令执行后权限即恢复原状,这减少了权限误用的风险。
3.5. 灵活性和安全性
通过 /etc/sudoers
配置文件,管理员可以详细控制哪些用户或用户组可以执行哪些命令。这提供了更细粒度的权限管理和审计记录,提高了系统的安全性。
4. sudo权限配置
4.1. 方式一(不推荐)
使用 vim
直接修改。 sudoers
文件默认是只读的。
需要用 root
用户手动授权。执行 chmod u+w /etc/sudoers
,给写权限后再进行编辑。
vim /etc/sudoers
# 添加如下内容(二选一进行添加)
# 用户名 被管理主机的地址=(可使用的身份)授权命令(绝对路径)
[用户名称] ALL=(ALL) ALL # 添加此行,使用sudo命令时需要输入密码
[用户名称] ALL=(ALL) NOPASSWD:ALL # 添加此行,使用sudo命令时不需要输入密码
编辑完后,记得再把写权限收回。执行如下命令:
chmod u-w /etc/sudoers
使用这种方式编辑文件存在一个潜在的问题:如果忘记保存并退出,将会导致 sudoers
文件的不完整,从而影响系统授权。
4.2. 方式二(推荐)
使用如下命令进行编辑:
visudo
# 添加如下内容(二选一进行添加)
# 用户名 被管理主机的地址=(可使用的身份)授权命令(绝对路径)
[用户名称] ALL=(ALL) ALL # 添加此行,使用sudo命令时需要输入密码
[用户名称] ALL=(ALL) NOPASSWD:ALL # 添加此行,使用sudo命令时不需要输入密码
推荐使用 visudo
来编辑 sudoers
文件,并确保正确保存并退出。使用 visudo
以安全模式触发一个编辑器,用户可以在其中修改授权信息。修改完成后,要保存并退出 visudo
,需要掌握以下几个技巧:
- 按下
Esc
键,以确保你在命令模式下。 - 输入
:wq
或者:x
以保存并退出visudo
。 - 输入
:q!
以退出visudo
并放弃改变。
本文隶属于 个人专栏
:01 Linux📋📋📋
到这里 04 CentOS 7:su&sudo详解 就结束了!!!🎉🎉🎉
欢迎小伙伴们学习和指正!!!😊😊😊
祝大家学习和工作一切顺利!!!😎😎😎