Linux中su/su -/sudo的区别?
一、Linux中su/su -/sudo的区别
su全称是switch user,意思就是切换用户的功能.
当我们需要使用更高的权限去执行命令时,则需要先获取root权限。因此su 、su – 这样的命令也就诞生了。
相同点
默认情况下 su 与 su – 都是切换成root用户 (有一个关于root密码的知识点 下面将讲解)
nieyh@nieyh-QTJ5:~$ su
密码:
root@nieyh-QTJ5:/home/nieyh#
nieyh@nieyh-QTJ5:~$ su –
密码:
root@nieyh-QTJ5:/home/nieyh#
不同点
su 切换用户却不切换工作环境 , su – 同是切换用户与工作环境, 如果Shell环境不一样将会出现下面的无法找到对应命令的问题。
nieyh@nieyh-QTJ5:~$ su
密码:
root@nieyh-QTJ5:/home/nieyh# pwd
/home/nieyh
root@nieyh-QTJ5:/home/nieyh# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
root@nieyh-QTJ5:/home/nieyh# adb
程序 ‘adb’ 已包含在下列软件包中:
* adb
* android-tools-adb
请尝试:apt install <选定的软件包>
nieyh@nieyh-QTJ5:~$ su – root
密码:
root@nieyh-QTJ5:~# pwd
/root
root@nieyh-QTJ5:~# echo $PATH
/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/nieyh/Android/Sdk/platform-tools/:/home/nieyh/Android/Sdk/tools/
root@nieyh-QTJ5:~# adb
Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android
Installed as /home/nieyh/Android/Sdk/platform-tools/adb
global options:
-a listen on all network interfaces, not just localhost
-d use USB device (error if multiple devices connected)
-e use TCP/IP device (error if multiple TCP/IP devices available)
-s SERIAL
use device with given serial number (overrides $ANDROID_SERIAL)
-p PRODUCT
name or path (‘angler’/’out/target/product/angler’);
default $ANDROID_PRODUCT_OUT
-H name of adb server host [default=localhost]
-P port of adb server [default=5037]
-L SOCKET listen on given socket for adb server [default=tcp:localhost:5037]
su的缺点造就了sudo的诞生
由于用户通过 su root 命令直接获取root权限,从而造成用户的权限太大,也就可能给系统造成危险。
为了既保证系统的安全又可以执行相应命令,sudo 也就以此诞生。
sudo 通过配置文件来限制用户的权限 (以下就是 /etc/sudoers 文件)
#
# This file MUST be edited with the ‘visudo’ command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin”
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on “#include” directives:
#includedir /etc/sudoers.d
可以看到上面的配置 %sudo ALL=(ALL:ALL) ALL, sudo 可以执行任何命令,所以下面的命令也没有报错。
nieyh@nieyh-QTJ5:~$ sudo apt-get clean
[sudo] nieyh 的密码:
nieyh@nieyh-QTJ5:~$
当我将配置改成这样子,
# Allow members of group sudo to execute any command
%sudo ALL=/sbin/mount
#ALL=(ALL:ALL) ALL
就会出现下面的错误提示
nieyh@nieyh-QTJ5:~$ sudo apt-get
[sudo] nieyh 的密码:
对不起,用户 nieyh 无权以 root 的身份在 nieyh-QTJ5 上执行 /usr/bin/apt-get。
所以通过 /etc/sudoers 配置文件来限制用户的权限使用,可以达到安全可控的目的。(更多的文件配置方法请自行百度或者等待作者更新)
总结
一般的使用情况下,较好使用sudo来执行命令,避免自己误操作破坏了系统。
如果是存在多用户使用同一个系统的话,主用户可以使用root权限来配置 /etc/sudoers 文件来指派不同用户不同的权限,从而保证系统的安全。
额外的补充下root密码的问题
如果用户忘记了root密码, 并且sudo能获取到较高权限,则可以通过一下命令来修改密码 (如果没有root权限的话, 只能通过操作系统来清空密码)
root@nieyh-QTJ5:~# sudo passwd
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
延伸阅读:
二、sudo 命令
sudo 命令的初衷是让 root 用户能够让几个非 root 用户访问他们经常需要的一两个特权命令。sudo 命令允许非 root 用户暂时地获得更高权限,来执行一些特权命令,例如添加和删除用户、删除属于其他用户的文件、安装新软件以及管理现代 Linux 主机所需的任何命令。
sudo 命令允许非 root 用户访问一两个 需要更高权限 的常用命令,这样可以帮助系统管理员节省来自用户的许多请求,并减少等待时间。sudo 命令不会将用户帐户切换为 root 用户,因为大多数非 root 用户永远不应该拥有完全的 root 访问权限。在大多数情况下,sudo 允许用户执行一两个命令,然后提权就会过期。在这个通常为 5 分钟的短暂的提权时间内,用户可以执行任何需要提权的管理命令。需要继续使用提权的用户可以运行 sudo -v 命令来重新验证 root 访问权限,并将提权时间再延长 5 分钟。

猜你喜欢LIKE
相关推荐HOT
更多>>
为什么Oracle数据库没有很好的卸载工具?
一、Oracle数据库没有很好的卸载工具的原因1、安装程序以压缩包形式存在大部分Oracle数据库安装程序都是以压缩包存在的,没有独立的卸载程序。...详情>>
2023-10-18 18:40:58
mysql的Innodb引擎中,主键索引和普通索引的工作原理是什么?
一、mysql的Innodb引擎中,主键索引和普通索引的工作原理在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表...详情>>
2023-10-18 15:19:29
非常适合移动和桌面应用的JavaScript框架是什么?
一、React NativeReact Native是一个广受欢迎的JavaScript框架,特别适合移动应用开发。它允许开发者使用JavaScript和React的语法来构建原生移...详情>>
2023-10-18 13:10:11
一个事务提交时,redo log和undo log以及bin log的生成流程是怎么样的?
一、redo log和undo log以及bin log的生成流程1.undolog是在innodb的回滚段里的(确切是rollback segment->undo segment),这个也是buff...详情>>
2023-10-18 12:35:31热门推荐
用什么数据库存储大量简单数据比较合适?
沸JAVA实现短网址服务的原理是什么?
热安卓原生app开发为什么要用sql本地数据库?
热oracle数据库库中两个表之间怎么同步数据?
新为什么Oracle数据库没有很好的卸载工具?
怎样用java向MySQL中的表插入1亿条数据?
做一个公司内部使用的小程序,应该用什么语言和数据库?
如何建立数据库,利用什么软件建立数据库?
org.Hs.eg.db包载入失败是为什么?
mysql update主键更新很慢会是什么原因?
如果同一条记录同时多个进程可能对不同的字段进行修改,怎么保证列锁?
mysql的Innodb引擎中,主键索引和普通索引的工作原理是什么?
Plugin解决了什么问题?
Python的pymysql、mysql、mysqlx库都有什么区别?
技术干货






