sudo命令与su命令解析

createh54个月前 (01-08)技术教程52

sudo命令

我们平时用低权限账号在使用一些高权限命令时,经常会提示Permission denied,一般人可能会切换到高权限账号后再使用高权限命令。实际上,我们可以在使用的命令前加上"sudo" 来提升权限使用命令。

sudo 表示 "superuser do"。 它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,大部分时候我们用它来以提升的权限来运行命令

既然可以切换账号以使用高权限命令,为何还要使用sudo呢?我直接使用root账号登陆不就行。

首先root账号拥有最高权限,没有任何限制,可以删除整个系统的大部分文件,如果使用不当很容易造成系统损坏,或者文件损坏,所以不推荐直接使用root账号。

其次是为了安全,root账号的密码只有最高管理员才能知道,要是每个人都知道很不安全。

那么应该怎么办呢?sudo命令正是为了解决这个问题,虽然你不知道root账号的密码,但是当你需要root账号的权限来完成一些命令时,就可以使用sudo命令了。但是并不是说所有的低权限账号都可以使用高权限命令或者说所有的高权限命令,如果真是这样的话,那低权限账号和高权限账号也没有任何区别了。

sudo命令是只有在/etc/sudoers中的用户才有资格使用sudo命令来完成root账户才能使用的权限

#举个例子
#使用root创建文件
[root@zabbix-01 ~]# mkdir /test
[root@zabbix-01 ~]# touch /test/aaa
#使用liang用户尝试删除,提示没有权限
[liang@zabbix-01 ~]$ rm -rf /test/aaa
rm: cannot remove ‘/test/aaa’: Permission denied
#使用sudo命令,但是/etc/sudoers中没有这个用户,会提示错误
[liang@zabbix-01 ~]$ sudo rm -rf /test/aaa
[sudo] password for liang: 
liang is not in the sudoers file.  This incident will be reported.

下面举例将liang这个账号添加到/etc/sudoers中

#1,切换到root用户下:su – root
#2,给/etc/sudoers文件添加写权限 :chmod u+w /etc/sudoers
#3,编辑/etc/sudoers文件,给普通用户添加使用sudu的的权限:vim /etc/sudoers
#4,找到这行:root ALL=(ALL) ALL, 在这行下面添加 xxx ALL=(ALL) ALL (这里的xxx就是你的普通用户)
#这里解释一下,sudoers下面添加普通用户可以使用sudo命令的格式:
#wangpeng ALL=(ALL) ALL :普通用户wangpeng可以使用sudo命令,但是需要密码
#这里注意!如果想限制只能sudo指定命令时,命令所在的目录要正确
#wangpeng zabbix-01=(root) /bin/ls,/bin/netstat:表示wangpeng用户可以在zabbix-01主机以root的用户身份执行ls与netstat命令
#%java ALL=(ALL) ALL 用户组java的用户可以使用sudo命令,但是需要密码
#wangpeng ALL=(ALL) NOPASSWD:ALL 普通用户wangpeng可以使用sudo命令,不需要密码
#%java ALL=(ALL) NOPASSWD:ALL 用户组java的用户可以使用sudo命令,不需要密码
#wangpeng  ALL=(ALL) NOPASSWD: /bin/ls,/bin/netstat 设置 sudo 指定命令时不需要输入密码
#添加完之后,保存退出
#去除root用户对sudoers文件的写权限:chmod u-w /etc/sudoers

添加好sudo后,再次尝试删除指定文件

[liang@zabbix-01 ~]$ rm -f /test/aaa 
rm: cannot remove ‘/test/aaa’: Permission denied
[liang@zabbix-01 ~]$ sudo rm -f /test/aaa 
[sudo] password for liang: 
[liang@zabbix-01 ~]$ ls /test/
#提示删除成功

su命令

su命令比sudo少了一个do,但是意义是完全不一样的,su表示"swith user",命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码

相关文章

Java中命令行调用大坑

Java中命令行调用大坑背景我司有一个查询服务接口机,QPS大概40~50,调用方式是Java调用Shell命令行的方式,核心代码如下:Process ps = Runtime.getRuntime(...

操作系统学习福利:600 条最强 Linux 命令总结

今天,带来一篇 Linux 命令总结的非常全的文章,也是我们平时工作中使用率非常高的操作命令,命令有点多,建议小伙伴们可以先收藏后阅读。1. 基本命令uname -m 显示机器的处...

Spring Boot整合Spring Shell工具进行命令行应用开发?

Spring Shell是一个基于Spring框架开发的命令行应用程序开发工具。它主要是为开发者提供了一组方便快捷的API工具,用来创建可扩展的命令行页面应用程序,下面我们就来详细的介绍一下在Spri...

CMD命令行运行Java 错误:找不到或无法加载主类

如果编写的代码用cmd命令来编译时正常的,也就是javac fileName.java可以编译成功,但是在使用java命令来运行java时,提示(错误:找不到或无法加载主类),会导致这种情况一般是:...

Linux详解系列2- 这100条常见命令你都用过哪些?

接着上面的文章继续介绍 ,上一篇文章请见:Linux详解系列一:如何安装系统及客户端工具的使用 。本篇主要介绍Linux的目录结构及常见命令部分 。Linux目录结构说明Linux命令集合一.Linu...

你应该尝试的12个杀手级Rust库

多坦-纳胡姆·-6分钟阅读我刚刚在我的一个较大的Rust项目中跨越了20K LOC,我想暂停一下并分享一些我所使用的伟大的Rust库。我还计划在未来的文章中讨论一些话题,比如在Rust与Go之间做决定...