sudo命令与su命令解析

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 外,需要键入该使用者的密码

相关文章

网络常见的 9 大命令,非常实用

1.ping 命令ping 是个使用频率极高的实用程序,主要用于确定网络的连通性。这对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping 就是一个测试程序,如果 ping 运行正确,...

命令行参数

用过Unix命令行,都会感受它的强大。Unix like包括Linux发行版、macOS等命令行在大部分情况下比图形化高效太多,很多高手都在用命令行。CUI和GUI尽管专业的程序员通常用CUI, 但G...

如何用java执行cmd命令

什么场景下用到cmd命令windows的cmd命令对于编程的小伙伴们来说应该是再熟悉不过了,比如说安装完node之后我们要查看一下node是否安装成功那么我们可以通过cmd命令行输入node -v来查...

Java中命令行调用大坑

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

快速命令行界面

什么是快速 CLI?快速 CLI 是在 Java 中创建命令行程序的最快方法。它是一个基于开源注释的框架,用于创建shell程序。它使应用程序开发人员能够构建命令行工具,而无需编写样板代码。它非常简单...

你了解JDK常用的7种命令行工具吗?

1 jps1.1 介绍jps是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,用来显示当前系统的java进程情况及进程id。1.2 命令格式jps [options] [hos...