众所周知,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
如下图所示:
保存退出后,再次重复之前的操作,发现这次无需再次输入密码:
到此,如何做自己权限之外的操作的方法已经介绍完毕,希望可以对大家有所帮助。