sudo -i , su , sudo su 区别!

本文详细解析了Linux系统中sudo和su命令的区别与用法。sudo用于临时获取超级用户权限,输入当前用户密码,适用于短暂操作;su则用于完全切换到另一个用户,需输入目标用户密码,适合长时间操作。此外,还介绍了sudo -i命令,用于频繁执行超级用户权限操作,避免重复输入密码。

sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。

sudo -i 直接运行sudo命令加-i参数
sudo su 运行sudo命令给su命令提权,运行su命令。
sudo -i 运行结果 PWD=/root
sudo su 运行结果 PWD=/home/用户名(当前用户主目录)

 

 

 

<think> 我们讨论的是Linux命令:sudo -i 和 su区别 这两个命令都用于切换用户身份,但有一些关键区别。 1. `su` 命令: - `su` 是 "switch user" 的缩写,默认情况下切换到root用户(需要输入root密码)。 - 使用方式:`su` 或 `su -` 或 `su [username]`。 - `su` 仅仅是切换了用户身份,但环境变量(如PATH,HOME,USER等)还是切换前用户的,除非使用`su -`(或`su -l`)才会加载目标用户的环境变量。 2. `sudo -i` 命令: - `sudo` 是 "superuser do" 的缩写,`sudo -i` 用于以目标用户(默认为root)的身份启动一个登录shell。 - 使用方式:`sudo -i`(需要输入当前用户的密码,而不是root密码,前提是该用户在sudoers文件中被授权)。 - `sudo -i` 会读取目标用户的环境变量,相当于以目标用户登录。 主要区别- 密码:`su` 需要输入目标用户的密码(比如root密码),而 `sudo -i` 需要输入当前用户的密码(且当前用户有sudo权限)。 - 环境:`su` 默认不改变环境(除非用`su -`),而`sudo -i`会获得一个类似于目标用户直接登录的环境。 - 权限管理:`sudo` 命令的权限是可控的(通过/etc/sudoers配置),管理员可以授权特定用户运行特定命令,而`su`是直接切换用户,需要知道目标用户的密码。 总结: - 使用 `su` 切换到root需要知道root密码,而使用 `sudo -i` 只需要知道当前用户自己的密码(且被授权)。 - 通常,在个人电脑上,如果用户拥有sudo权限,推荐使用`sudo -i`(或`sudo su`)来切换到root,以避免直接使用root密码。 下面我们用一个简单的例子来展示这两个命令的用法: 假设我们有一个普通用户名为`user1`,并且该用户已经被添加到sudoers文件中。 使用 `su` 切换到root: ``` $ su Password: <输入root的密码> ``` 使用 `su -` 切换到root并加载root的环境: ``` $ su - Password: <输入root的密码> ``` 使用 `sudo -i` 切换到root(使用当前用户的密码): ``` $ sudo -i [sudo] password for user1: <输入user1的密码> ``` 但是,请注意,我们无法用代码来直接演示这些命令,因为它们需要交互式输入密码。不过,我们可以写一个简单的脚本来描述它们的不同环境变量设置。 例如,我们可以比较执行命令后的环境变量: 对于 `su`: ```bash su -c 'printenv > /tmp/su_env' ``` 对于 `su -`: ```bash su - -c 'printenv > /tmp/su_dash_env' ``` 对于 `sudo -i`: ```bash sudo -i -u root bash -c 'printenv > /tmp/sudo_i_env' ``` 然后比较这些文件,可以看到环境变量的差异。 然而,由于安全原因,我们不建议在脚本中直接使用密码,所以上述命令需要手动输入密码。 在实际使用中,更推荐使用`sudo`来执行需要特权的命令,而不是直接切换到root用户,这样可以记录每个用户执行的特权命令,提高安全性。 现在,根据要求,提出相关问题: </think> `sudo -i` 和 `su` 都是 Linux 中用于切换用户身份的命令,但它们在权限验证、环境变量加载和工作目录处理上有本质区别。以下是详细对比: --- ### 核心区别总结 | **特性** | `sudo -i` | `su` | |----------------|-----------------------------------|-----------------------------------| | **密码验证** | 当前用户的密码 | 目标用户(如 root)的密码 | | **环境变量** | 加载目标用户的环境(如 `/etc/profile`) | 默认保留原用户环境(除非用 `su -`) | | **工作目录** | 切换到目标用户的家目录(如 `/root`) | 默认保留原工作目录(除非用 `su -`) | | **权限管理** | 受 `/etc/sudoers` 精细控制 | 直接切换用户,无细粒度控制 | | **日志记录** | 记录在 `/var/log/auth.log` | 无专用日志 | | **典型用法** | `sudo -i` 或 `sudo -i -u <用户>` | `su` 或 `su -` 或 `su <用户>` | --- ### 详细代码示例及解释 #### 1. `su` 命令 默认行为:**不加载环境变量**,**不切换目录** ```bash # 切换到 root(需输入 root 密码) su ``` 执行后: - 环境变量保持原用户设置(如 `$PATH` 不变) - 工作目录不变(仍在原目录) - 需输入 **root 的密码** **加载环境变量 + 切换目录:** ```bash # 使用 su -(加载环境变量并切换到家目录) su - ``` - 等价于 `su - root` - 会执行目标用户的 `.bashrc` 和 `/etc/profile` --- #### 2. `sudo -i` 命令 默认行为:**加载环境变量**,**切换到家目录** ```bash # 切换到 root(需输入当前用户密码) sudo -i ``` - 环境变量完全加载(如 `$PATH` 更新为 root 的设置) - 工作目录切换到 `/root` - 需输入 **当前用户的密码**(且该用户需在 `sudoers` 文件中) **切换到其他用户:** ```bash # 切换到用户 alice sudo -i -u alice ``` --- ### 关键原理说明 1. **环境变量差异** - `sudo -i` 会触发**登录 Shell** 流程,加载 `/etc/profile` 和 `~/.profile`。 - `su` 不加 `-` 时仅继承原环境,可能导致权限问题(如普通用户的 `PATH` 无法运行 root 命令)。 2. **安全审计** - `sudo -i` 的所有操作会被记录到系统日志(`/var/log/auth.log`),便于审计。 - `su` 无专用日志,难以追踪操作来源。 3. **权限控制** - `sudo -i` 依赖 `/etc/sudoers` 配置,可限制特定用户的使用权限。 - `su` 只需知道目标用户密码即可切换,无细粒度控制。 --- ### 使用场景建议 - **推荐使用 `sudo -i`** 需要临时执行高权限任务时(更安全、可审计)。 ```bash sudo -i # 切换到 root apt update exit # 退出后返回原用户 ``` - **谨慎使用 `su`** 仅在需要**完全切换用户身份**时使用(如长期维护),且建议用 `su -` 确保环境正确。 ```bash su - alice # 完全切换到 alice 用户环境 ``` --- ### 安全性对比 | **风险** | `sudo -i` | `su` | |----------------|----------------------------|---------------------------| | **密码泄露** | 不暴露 root 密码 | 需共享 root 密码 | | **权限滥用** | 可通过 `sudoers` 限制命令 | 切换后拥有完整权限 | | **操作追踪** | 详细日志记录 | 无来源追踪 | ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值