su 和 sudo 的简单用法

本文详细介绍了Linux系统中su和sudo命令的使用方法及其区别。su命令用于切换用户身份,需要输入目标用户的密码;sudo则允许用户以其他用户(通常是root)的身份运行命令,但需在/etc/sudoers文件中被授权。

su  和  sudo 的使用

1.   su 

su 命令的作用是直接将身份变成其他用户,需要输入其他用户的密码。


 这个是我现在以zhang用户这个登录时,查询到的和'zhang'用户相关的环境变量,注意观察PATH,MAIL,PWD

等的值。现在我使用 su 命令切换到root用户,此处必须要输入root的密码。



注意:直接使用 su 命令默认的是切换到root用户,可以看到直接输入su命令切换到root用户时,此时root用户

PATH,MAIL,PWD等值还是zhang这个用户的值。刚切换到root用户时,root用户的当前工作目录是zhang,也

就是PWD的值。

使用su -也可以切换到root用户,和直接使用su的区别是:root用户的PATH,MAIL,PWD等的值真正切换成了

root的值,而不是zhang这个用户的。


su切换成其他用户的用法是:su -l 目标用户名或者 su - 目标用户名(此处也需要输入目标用户的密码)



退出使用su切换的用户使用exit命令。

2.  sudo

sudo可以让你以其他用户的身份执行命令,当然也包括root身份,所以并不是所有的用户都可以执行sudo命令切

换身份的,只有在/etc/sudoers文件中指明的用户才能执行sudo命令来切换身份。系统刚装好的时候/etc/sudoers

中只有root户,也就是root用户默认有sudo的执行权力。而要修改/etc/sudoers这个文件也必须要拥有root:



所以要让某个用户zhang拥有sudo的权力,请让root用户在/etc/sudoers文件中加入:



如果zhang用户拥有了sudo的权力,那他就可以切换成其他用户的身份执行命令了:



上面的命令是使用sudo切换成tao用户,然后以tao的身份创建a.txt文件,注意a.txt的所有者是tao。第一次使用

sudo -u 目标用户切换用户的时候是需要输入你的密码的,此处就是zhang用户的密码,下次使用就不用了(好像

间隔5分钟后要再次输入密码)。root执行sudo时是不需要输入密码的。


      直接使用sudo切换默认的是root用户。

   可以看出su和sudo的区别有一点就是使用su切换用户之后可以进行一连串操作,而是用sudo进行多次操作时有

       点繁琐。

<think>嗯,用户问的是Linux中susudo命令使用方法区别。这个问题在Linux系统管理中很基础但也很重要,涉及到权限管理的核心概念。 用户可能是个刚接触Linux的新手,正在学习系统管理知识。从提问方式看,ta对这两个命令已经有初步了解,但需要更系统的对比说明。考虑到权限操作的危险性,回答时需要特别强调安全注意事项。 关于su命令: - 核心功能是切换用户身份,特别是切换到root - 需要知道目标用户的密码 - 存在环境变量继承问题,这解释了为什么有时su命令找不到 - susu -的区别很关键,后者会完全切换环境 关于sudo命令: - 设计理念是授权部分权限而非完全切换用户 - 配置文件/etc/sudoers的编辑要用visudo这个专用工具 - 可以精细控制每个用户能执行的命令 - 操作时需要在命令前加sudo前缀 - 默认会记录日志,这点比su安全 两者主要区别在于: - 身份切换方式:su是完整切换用户,sudo是临时提权 - 认证方式:su用目标用户密码,sudo用当前用户密码 - 环境处理:su -会重置环境,sudo保持当前环境 - 安全审计:sudo有详细日志,su缺乏操作追溯 - 权限粒度:sudo可以精确到具体命令 用户可能没意识到但需要了解的重点: 1. 生产环境应该禁用root直接登录,用sudo代替 2. visudo编辑配置文件可以防止语法错误导致锁死系统 3. 环境变量差异可能导致命令执行失败的实际案例 4. 如何配置sudo超时时间避免重复输入密码 需要特别提醒的安全风险: - 避免随意给用户ALL权限 - su切换root后操作不可追溯 - sudo误操作同样危险,要配合权限最小化原则 相关问题的设计要覆盖: - 具体配置案例(如授权用户重启服务) - 排错场景(环境变量问题) - 安全加固方案 - 与用户组配合的权限管理 最后要注意回答结构: 1. 先解释每个命令的独立用法 2. 再对比差异 3. 给出安全建议 4. 提供典型配置示例 5. 用表格总结核心区别</think>### Linux中 `su` 与 `sudo` 命令详解 #### 一、`su` 命令(切换用户身份) 1. **功能**:切换到目标用户身份(默认切换到 root)。 2. **语法**: ```bash su [选项] [用户名] ``` - 切换到 root:`su` 或 `su root`(需输入 root 密码) - 切换到普通用户:`su username`(需输入该用户密码) 3. **关键选项**: - `-` 或 `-l`:**完全切换用户环境**(加载目标用户的环境变量 Shell 配置) ```bash su - # 切换到 root 并加载其环境 su - user1 # 切换到 user1 并加载其环境 ``` 4. **环境变量问题**: - `su`(不加 `-`):**仅切换身份**,但保留当前 Shell 环境(可能导致命令找不到): ```bash $ pwd /home/test $ su 密码:****** # echo $PATH # 环境变量仍是普通用户的 PATH # ifconfig # 可能报错 "command not found" ``` - `su -`:**切换身份+环境**(推荐): ```bash $ su - 密码:****** # pwd # 显示 /root # ifconfig # 正常执行 ``` [^2] --- #### 二、`sudo` 命令(临时提权执行命令) 1. **功能**:以 root 或其他用户身份**临时执行单条命令**(无需知道 root 密码)。 2. **语法**: ```bash sudo [选项] 命令 ``` - 示例:`sudo apt update`(以 root 权限更新软件包) 3. **配置方法**: - 编辑配置文件 `/etc/sudoers`(**必须使用 `visudo` 命令**,避免语法错误): ```bash sudo visudo # 安全编辑配置 ``` - 添加授权规则: ```bash # 允许用户 alice 执行所有命令 alice ALL=(ALL:ALL) ALL # 允许组 devs 重启 nginx %devs ALL=(root) /usr/sbin/systemctl restart nginx ``` 4. **查看权限**: ```bash sudo -l # 查看当前用户可执行的 sudo 命令 ``` [^1] --- ### 三、核心区别对比 | **特性** | `su` | `sudo` | |------------------|-------------------------------|-------------------------------| | **核心目的** | 完全切换用户身份 | 临时提权执行单条命令 | | **密码要求** | 目标用户的密码 | 当前用户自己的密码 | | **环境变量** | 需加 `-` 选项才加载目标环境 | 继承当前用户环境 | | **权限粒度** | 获得目标用户全部权限 | 可精细控制允许的命令 | | **日志审计** | 无详细操作记录 | 记录所有 sudo 操作(`/var/log/auth.log`) | | **安全风险** | 泄露 root 密码后完全失控 | 单命令授权,最小化风险 | | **典型应用场景** | 需长时间以 root 操作时 | 临时执行特权命令(如安装软件)| --- ### 四、安全实践建议 1. **禁用 root 登录**: - 通过 `sudo` 分配权限,避免直接使用 root 账户。 2. **最小权限原则**: - 在 `/etc/sudoers` 中仅授权必要命令,例如: ```bash user1 ALL=(root) /usr/bin/apt, /usr/sbin/reboot ``` 3. **优先使用 `sudo`**: - 日常操作使用 `sudo` 而非 `su -`,减少误操作风险。 4. **区分 `su` 与 `su -`**: - 需要完整环境(如服务启停)时用 `su -`;仅需临时身份切换时用 `su`。 > ⚠️ **注意**:`sudo su -` 本质是通过 `sudo` 提权后执行 `su -`,仍需 root 密码,而 `sudo -i` 可直接切换到 root 环境(需输入当前用户密码)[^3]。 --- ### 五、常见问题解答 **Q1:为什么 `su` 后某些命令(如 `ifconfig`)报错?** A:未使用 `su -`,环境变量未更新,导致系统路径错误。用 `su -` 或手动设置 `PATH` 解决[^2]。 **Q2:如何允许用户无密码使用 `sudo`?** A:在 `/etc/sudoers` 中添加: ```bash user1 ALL=(ALL) NOPASSWD: ALL # 允许 user1 无密码执行所有命令 ``` **Q3:`sudo` `su` 哪个更安全?** A:**`sudo` 更安全**: - 操作可审计、无需共享 root 密码、支持权限细分。 - 生产环境应优先使用 `sudo`[^1][^3]。 --- ### 相关问题 1. 如何配置 `sudo` 超时时间以避免重复输入密码? 2. `sudo` 出现 "user is not in the sudoers file" 错误如何解决? 3. 除了 `su` `sudo`,Linux 还有哪些提权方式? 4. 如何通过 `sudo` 限制用户仅能编辑特定配置文件?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值