共计 1856 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | 众所周知,Linux 是一个分时多用户操作系统,每个用户都有独立权限且相互隔离。其中 root 用户的权限是最大的,其能够操作所有的文件以及执行所有的命令。当然,正因为如此,使得其风险很大,若操作不当,就会产生严重的问题,更严重者可以导致系统崩溃。 |
因而在大多数的时候,我们并不会直接使用 root 用户登录系统,而是使用一些有着特定权限的普通用户。因此在做某些操作的时候,就会遇到权限不足的情况,比如修改其他普通用户的密码 (当然这种操作有些不合理,只是为了举例。
假定我们的系统中有有两个普通用户:user1 和 user2,当前登录系统的用户为 user1,此时需要修改 user2 的命令,如果直接执行如下命令,就会报权限不足的提示:
此时有两种方式可以解决,分别是:切换其他用户执行和以其他用户的权限执行。
对于切换用户而言,我们最先想到的就是,先退出当前的登录用户,然后选择目标用户进行重新登录。但是这种方式操作起来有些麻烦,因而我们可以使用更简洁的方式,也就是 su 命令来实现直接切换用户。
以上面的例子来说,先使用 su 切换到 root 用户,接着再次执行之前的操作,结果如所示:
如果我们想回退到之前的用户,只需要执行 exit 命令,执行结果如下所示:
对于 su 来说,默认情况下是切换为 root 用户,如果需要切换为指定的用户,则可以在 su 后面指定用户名。比如 user1 切换为 user2,使用到的命令如下所示:
su user2
执行结果如下所示:
需要说明一点的是,如果从 root 用户切换为普通用户,则可以进行直接切换,而无需输入对应用户的密码。比如从 root 用户切换为 user1 用户,执行结果如下所示:
对于 su 命令来说,其还可以加一个参数:”-“。加上该参数之后,不仅身份会变成对应的用户,甚至对应的用户环境也会跟着改变,当然最直观的感受就是主目录。
下面来分别演示一下这两种情况:
- 带“-”参数
使用 user1 用户进行登录,执行“su -”命令切换后,使用 pwd 命令来查看当前所属的目录:
- 不带“-”参数
使用 user1 用户进行登录,执行“su”命令切换后,使用 pwd 命令来查看当前所属的目录:
大多数时候,我们只是需要以某个用户的权限来执行对应的命令即可,而不是非要切换成对应的用户。
对于以其他用户权限执行某个操作的命令为:sudo。比如上面提到的例子,此时可以使用如下命令:
sudo passwd user2
执行后如所示:
看到这大家是否会有所困惑呢? 不是说使用 sudo 命令可以使用其他用户的权限做某些操作吗? 怎么还提示错误了呢?
实际上运行该命令有一定的限制条件,那就是该用户必须在 /etc/sudoers 中存在。也只有当用户在 /etc/sudoers 配置文件中被配置过时,才能够拥有使用 sudo 命令的权限,才能使用 sudo 以其他用户的身份执行某些操作。
当然,作为普通用户是没有编辑 /etc/sudoers 配置文件的权限的,该操作必须使用 root 用户登录系统,来将该用户添加到 /etc/sudoers 配置文件中。这种限制在一定程度上避免了安全风险,毕竟所有能够使用 sudo 命令的人都是被 root 用户进行过授权。
以 root 用户登录系统后,就可以通过执行如下命令进入到 /etc/sudoers 配置文件的编辑页面:
vi /etc/sudoers
或
visudo
对于以上的两个命令,推荐使用 visudo,因为这种方式有自动的语法检查功能。
执行命令的页面如下所示:
接着在该配置文件中新增一条配置信息:
user1 ALL=(ALL) ALL ## 复制上一行的内容
如下所示:
接着保存并退出。此时再次执行上面修改 user2 用户的密码的命令,结果如下所示:
也就是说,此时通过使用 sudo 命令,就可以使得普通用户 user1 能够以 root 用户的权限来完成修改其他普通用户 user2 的密码的操作。
通过观察发现,每次执行 sudo 命令时都需要输入当前登录用户的密码,这似乎让人有点恼火,那么是否有办法避免这个事呢? 解决方法就是使用 root 用户来对刚才的配置进行修改,在 user1 的记录的最后一个 ALL 前面增加一个参数:NOPASSWD,修改后的记录为:
user1 ALL=(ALL) NOPASSWD:ALL
保存退出后,再次重复之前的操作,发现这次无需再次输入密码:
到此,如何做自己权限之外的操作的方法已经介绍完毕,希望可以对大家有所帮助。
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)