千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:杭州千锋IT培训  >  技术干货  >  Linux命令su和sudo的区别?

Linux命令su和sudo的区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-20 16:06:09

一、Linux命令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

pythonSymPy求极值

2023-11-14

python归并排序和快速排序比较

2023-11-14

pythonif-elif-else语句的使用注意

2023-11-14

最新文章NEW

python怎么传参数

2023-11-14

python如何查看对象属性

2023-11-14

python如何确定是否为可迭代对象

2023-11-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>