用户管理(3)---su、sudo

本文详细介绍了Linux系统中su和sudo命令的使用方法及其区别。su命令用于在不同用户间切换,而sudo则允许普通用户执行特定的管理员任务。文章还讲解了sudo的配置文件/etc/sudoers的编辑方法及权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户切换

su命令

su就是切换用户身份的命令。通过su命令可以在用户之间切换,超级权限用户root向普通或虚拟用户切换不需要密码验证。其他普通用户之间或者普通用户切换到root,都需要切换用户的密码验证。

su语法

su [选项参数] [用户]

参数选项说明
-,-l,–login使一个shell成为登录的shell,如执行su - Ian时,表示该用户想改变身份为Ian,并且使用Ian用户的环境变量配置如:/home/Ian/.bash_profile等
-c,–command切换到一个shell下,执行一个命令,然后退出所切换的用户环境

实例

1.-c参数的运用。在root下,以Lisa身份创建一个文件。
这里写图片描述
2.如何让系统在每一次开机时也要以普通用户启动指定的服务脚本呢?

把要执行的脚本放入开机自启动配置文件/etc/rc.local中。通过su - 用户 -c “命令”执行启动服务的命令。

[root@ianLinux ~]# tail -5 /etc/rc.local
## 分用户方案启动服务命令
su - Lisa -c "/bin/sh /home/Lisa/bin/deploy.sh"

/bin/sh /home/Lisa/bin/deploy.sh就是仅能在Lisa用户下启动的服务命令脚本。

su命令总结

  • 普通用户切换到root用户,可使用su -或su - root。必须输入root的密码才能完成切换。
  • root用户切换到普通用户,可使用su - 普通用户名,不需要任何密码就能完成切换。切换到普通用户后,在执行一些命令如ifconfig时,可能会遭遇到环境变量PATH路径问题而找不到某个系统命令(一般是/sbin,/usr/sbin等下面的命令),这时就需要将普通用户的PATH,配置成root的PATH内容。
  • 如果仅希望以某个用户的角色执行命令而不直接切换到该用户下操作,可以使用su - 用户名 -c “命令”的方式。

sudo命令

sudo以root身份执行普通用户无法执行的任务。

sudo命令执行的流程

  1. 当用sudo执行命令时,系统会首先查找/var/run/sudo/%HOME(或者是/var/db/sudo/%HOME)目录中是否有用户时间戳文件,如果时间戳文件过期,则提示用户是否输入自身的密码。
  2. 当密码验证成功后,系统会查找.etc/sudoers配置文件,判断用户是否有执行相应sudo命令权限。
  3. 如果具备执行相应sudo命令权限,就会自动由当前用户切换到root,然后以root身份执行该命令。
  4. 执行完成后,又会自动的直接退回到当前用户shell下。

这里写图片描述

验证:

visudo
这里写图片描述
一开始/var/db/sudo/Lisa/是没有时间戳的。
这里写图片描述
在删除时需要输入当前用户密码,验证密码正确后,检查/etc/sudoers配置文件里是否存在执行相关命令的权限,如果有,执行并返回结果。
删除后就有时间戳了,而且5分钟内再次删除时不需要输入密码。
这里写图片描述
时间戳
这里写图片描述

这是/etc/sudoers配置文件里不存在执行相关命令的权限情况,直接退出sudo。
这里写图片描述

sudo语法

sudo [参数选项] 命令

参数选项说明
-l列出用户在主机上可用的和被禁止的命令。当配置好sudo授权规则后,可用这个参数来查看授权情况
-k同-K。删除时间戳,下一个sudo命令要求提供密码,前提是该用户授权中不能有NOPASSWD:参数。时间戳默认5分钟也会失效
[Lisa@ianLinux ~]$ sudo -l
[sudo] password for Lisa: 
...

用户 Lisa 可以在该主机上运行以下命令:
    (ALL) /bin/rm
[Lisa@ianLinux ~]$ 

visudo

visudo修改/etc/sudoers配置文件,给用户进行授权。visudo -c能检查语法。
文件权限440。
这里写图片描述
如果这个配置文件里面语法错了,或者权限改变了,sudo就不能用了。

如何利用sudo控制用户对系统命令的使用权限。

http://blog.csdn.net/codetz/article/details/52252609

su与sudo

切换用户身份的su命令为我们管理linux系统带来了很多方便,通过切换到root下,可以完成各种系统管理工作,只要任何一个普通用户知道了root用户的密码,都能以普通用户的身份切换到root来完成本来无法完成的系统管理的工作。

但是这样通过su命令切换到root后,也带来了安全管理问题。系统有多个普通用户,都可以通过su切换到root身份进行系统管理,甚至还可以改掉root密码,让其他的普通用户无法再实现系统管理。这样的非集权式管理,在一定程度上就对系统的安全造成了较大的威胁。

我们既希望超级用户root密码掌握在少数或唯一的管理员手上,又希望多个系统管理员能够完成更复杂的系统管理的工作,即希望多个系统管理员都能管理系统而又不让超级权限泛滥。这就需要sudo命令来代替su命令了。
这里写图片描述

<think>好的,用户问的是“sudo - su什么意思”,我需要先理解这两个命令的作用以及它们的组合使用情况。首先,sudosu都是Linux系统中用于权限管理的命令,但它们的用途和机制有所不同。 首先,sudoSuper User DO)允许普通用户以其他用户的权限执行命令,默认情况下是超级用户(root)。它的主要优点是可以通过配置文件(sudoers)精细控制哪些用户可以执行哪些命令,同时会记录日志,安全性较高。用户在使用sudo时,通常需要输入自己的密码,而不是root的密码。 然后是su(Switch User),用于切换当前用户身份到其他用户,尤其是切换到root用户。执行su命令后,系统会提示输入目标用户的密码,默认是root密码。如果直接输入su而不带参数,默认切换到root用户,需要输入root的密码。su - 命令则会在切换用户的同时加载目标用户的环境变量和设置,使得环境更贴近直接以该用户登录的状态。 接下来是组合命令sudo -su。这里的sudo -s通常用于启动一个shell环境,而加上-u参数可以指定用户。例如,sudo -u username -s会以username的身份启动一个shell。而用户提到的sudo - su可能是一个组合,其中sudo用于提升权限来执行su命令。具体来说,sudo su意味着使用当前用户sudo权限来执行su命令,这样不需要知道root密码,只需输入当前用户的密码即可切换到root用户。而su命令本身如果不带参数,默认切换到root,所以sudo su的效果就是以root权限运行su,从而切换到root用户,但这里可能有一些冗余,因为sudo本身已经可以执行命令作为root了。 可能的混淆点在于用户是否正确地书写了命令。例如,sudo susudo -s的区别。-s选项是让sudo启动一个shell,而su则是切换用户。所以sudo su可能实际上是先通过sudo获取root权限,然后执行su命令,这可能会导致两次身份切换,但实际效果可能还是直接切换到root,不过具体要看用户的意图。 需要进一步确认用户的具体情况。例如,用户是否遇到了权限问题,或者在使用某些命令时需要临时提升权限。另外,sudo - su中的短横线可能是一个参数,比如sudo -u username su,这表示以指定用户身份执行su命令,但这种情况较为少见。 在解释时,应该分步骤说明每个命令的作用,然后组合起来的效果。同时,需要注意常见的使用场景,例如,当用户需要以root身份执行多个命令时,可能会使用sudo su切换到root shell,而不是每次都用sudo。不过,通常更推荐使用sudo -i或sudo -s来直接获取root环境,而不需要su的中间步骤。 另外,要提醒用户注意安全性,避免滥用root权限,以及正确配置sudoers文件,避免给普通用户过多的权限。可能还需要说明sudosu的密码输入区别,sudo要求用户自己的密码,而su要求目标用户的密码,这在团队协作或系统管理中很重要。 总结来说,sudo - su可能是用户想通过sudo权限来执行su命令,从而切换到root用户而不需要知道root密码。但更常见的用法可能是sudo susudo -i,因此需要明确命令的正确写法和推荐做法,确保用户理解其机制和潜在的风险。</think>### 分步解释:`sudo - su` 的含义 #### 1. **拆解命令:`sudo` 和 `su` 的作用** - **`sudo`**(Super User DO) 允许普通用户以**其他用户身份(默认 root)**执行命令,需输入**当前用户的密码**。 特点:权限控制更精细(通过 `/etc/sudoers` 配置),且操作会被记录日志。 - **`su`**(Switch User) 用于直接切换用户身份(默认切换到 root),需输入**目标用户的密码**(如 root 密码)。 若使用 `su -`(带短横线),会加载目标用户的环境变量(如 PATH、配置文件等)。 --- #### 2. **组合命令 `sudo - su` 的含义** - **语法解析:** `sudo - su` 实际等价于 `sudo su`。 这里的 `-` 是 `sudo` 的一个选项,表示保留当前环境变量,但更常见的写法是直接连用 `sudo su`。 - **执行逻辑:** 1. 通过 `sudo` 获取 root 权限(需输入当前用户密码)。 2. 以 root 权限执行 `su` 命令(无需再输入 root 密码)。 3. 最终切换到 root 用户身份- **等效操作:** `sudo su` ≈ 先提权到 root,再切换为 root(看似冗余,但目的是获得一个 root shell 环境)。 --- #### 3. **常见使用场景** - **需要长期以 root 身份操作** 例如:执行多个需 root 权限的命令时,直接进入 root shell 更方便。 ```bash sudo su apt update # 无需反复输入 sudo systemctl restart nginx ``` - **系统无 root 密码时** 若管理员未设置 root 密码,普通用户可通过 `sudo su` 切换到 root(依赖 sudo 权限)。 --- #### 4. **更推荐的替代命令** - **`sudo -i`** 直接以 root 身份启动一个**登录 Shell**(加载 root 的环境变量,推荐使用): ```bash sudo -i ``` - **`sudo -s`** 启动一个 root 的 Shell,但保留当前环境变量: ```bash sudo -s ``` --- ### 总结对比表 | 命令 | 需要密码 | 环境变量 | 典型用途 | |--------------|---------------|----------------|------------------------------| | `sudo su` | 当前用户密码 | 继承当前环境 | 临时切换 root 身份 | | `sudo -i` | 当前用户密码 | 加载 root 环境 | 长期以 root 身份工作(推荐) | | `su` | root 密码 | 继承当前环境 | 已知 root 密码时切换用户 | | `su -` | root 密码 | 加载 root 环境 | 完全模拟 root 登录 | --- ### 注意事项⚠️ 1. **谨慎使用 root 权限**:误操作可能导致系统损坏。 2. **sudoers 配置安全**:避免给普通用户过多权限(通过 `visudo` 配置)。 3. **日志审计**:`sudo` 操作会被记录到 `/var/log/auth.log`,便于追踪。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值