在我们之前的一篇文章中 ,我们详细讨论了“sudo”命令。 在该教程的末尾,在一个小笔记中提到另一个类似的命令“su”。 那么在这篇文章中,我们将详细讨论'su'命令以及它与'sudo'命令的区别。

但在我们这样做之前,请注意,本教程中提到的所有说明和示例已在Ubuntu 14.04LTS上进行了测试。

Linux中的su命令

su命令的主要工作是让您在登录会话期间切换到其他用户。 换句话说,该工具可让您假设某个其他用户的身份,而无需注销,然后登录(作为该用户)。

su命令主要用于切换到超级用户/ root帐户(因为在命令行上工作时通常需要root权限),但是如上所述,您可以使用它来切换到任何其他非root用户好。

以下是使用此命令切换到root用户的方法:

该命令所需的密码也是root用户。 所以一般来说,su命令需要输入目标用户的密码。 输入正确的密码后,该工具将在终端上的现有会话内启动一个子会话。

苏 -

有另一种方法切换到root用户:运行'su - '命令:

现在,“苏”和“苏”有什么区别? 那么,即使在切换到根目录之后,前者仍然保留旧/原始用户的环境,而后者创建了一个新的环境( 由root用户的〜/ .bashrc指定) ,类似于您以root用户的身份从登录屏幕显式登录。

“su”的手册页也明确表示:The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

所以,你同意用'su - '登录更有意义。 但是,由于'su'命令也存在,可能会想知道什么时候有用。 以下摘录 - 从ArchLinux维基网站获取 - 对“su”命令的好处和陷阱提出了一个好主意:系统管理员有时会使用普通用户的shell帐户而不是自己的shell帐户。 特别地,有时解决用户问题的最有效方法是登录该用户的帐户,以便重现或调试问题。然而,在许多情况下,root用户从普通用户的shell帐户和该帐户的环境变量而不是自己的环境变量来操作是不可取的,甚至是危险的。 虽然无意中使用普通用户的shell帐户,但root可以安装程序或对系统进行其他更改,而不会像使用root帐户时那样执行相同的结果。 例如,可以安装可以使普通用户意外地损坏系统或获得未经授权的访问某些数据的能力的程序。

注意:如果你想在'su - '之后传递更多的参数,那么你应该使用命令提供的-l命令行选项(而不是 - )。 以下是 - 和-l命令行选项的定义:-, -l, --loginProvide an environment similar to what the user would expect had the user logged in directly.

When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su -c

还有另外一个选项是'su'命令,值得一提:-c。 它允许您在切换到目标用户后提供要运行的命令。

'su'的手册页解释为:-c, --command COMMAND

Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

请考虑以下示例模板:

su [target-user] -c [command-to-run]

所以在这种情况下,“命令运行”将被执行为:

[shell] -c [command-to-run]

其中'shell'将被/ etc / passwd文件中定义的'target-user'shell替换。

苏多vs苏

既然我们也讨论了'su'命令的基础,那么现在是讨论'sudo'和'su'命令之间的区别的时候了。

密码

两者之间的主要区别是他们需要的密码:'sudo'需要当前用户的密码,'su'需要您输入root用户密码。

很清楚,就安全而言,“sudo”是两者之间的一个更好的选择。 例如,考虑到计算机正在被同时需要root访问的多个用户使用的情况。 在这种情况下使用'su'意味着与所有这些共享root密码,这通常不是一个很好的做法。

此外,如果要撤消特定用户的超级用户/ root访问权限,唯一的方法是更改​​root密码,然后在所有其他用户之间重新分发新的根密码。

与Sudo,另一方面,您可以毫不费力地处理这两种情况。 鉴于“sudo”要求用户输入自己的密码,所以您不需要共享所有用户的root密码。 并且要阻止特定用户访问root权限,您只需要调整“sudoers”文件中的相应条目即可。

默认行为

两个命令之间的另一个区别是它们的默认行为。 虽然'sudo'仅允许您以提升的权限运行单个命令,但'su'命令启动新的shell,允许您根据root权限运行尽可能多的命令,直到您明确退出该销售。

因此,“su”命令的默认行为是潜在的危险,因为用户可能会忘记它们以root身份工作的可能性,并且可能会无意中进行一些不可恢复的更改(例如,运行“rm -rf”命令错误目录)。 要详细讨论为什么不鼓励总是以root身份工作,请到这里 。

记录

虽然通过“sudo”运行的命令作为目标用户执行(默认情况下是“root”),但是用sudoer的用户名标记。 但是在“su”的情况下,不可能直接跟踪用户在root用户帐户之后执行的操作。

灵活性

'sudo'命令更加灵活,你甚至可以限制你想要访问的命令。 换句话说,访问“sudo”的用户只能访问他们的工作所需的命令。 但是,“su”是不可能的,无论你有权做任何事情都没有。

苏多苏

大概是由于使用“su”或直接以root用户身份登录的潜在风险,一些Linux发行版(如Ubuntu) 默认情况下会禁用root用户帐户。 鼓励用户在需要root权限时使用“sudo”。

但是,您仍然可以“su”成功,即不输入root密码。 所有您需要做的是运行以下命令:

sudo su

由于您使用'sudo'命令运行,所以只需输入密码即可。 所以一旦完成,'su'命令将以root身份运行,这意味着它不会要求任何密码。

PS :如果您想要启用系统上的root帐户(尽管这是非常不鼓励的,因为您可以随时使用'sudo'或'sudo su'),您必须手动设置root密码,您可以这样做使用以下命令:

sudo passwd root

结论

这两个以及我们以前的教程(重点是“sudo”)都应该让您了解可用的工具,让您可以执行需要升级(或完全不同的)特权的任务。 如果你有分享关于'su'或'sudo'的东西,或想分享你自己的经验,欢迎你在下面的评论中做到这一点。

linux sudo和su区别,了解sudo和su之间的区别相关推荐

  1. StringBuffer类,StringBuffer类和String的区别、String,StringBuffer,StringBuilder之间的区别

    1.概述 StringBuffer是一个线程安全的可变序列. 2.StringBuffer与String区别 (1)StringBuffer的长度和内容都可以发生改变,String却不行 (2)Str ...

  2. 验证和确认的区别_验证与确认之间的区别

    验证和确认的区别 Today we are going to cover the topic difference between Verification and Validation. 今天,我们 ...

  3. java 对象和实例有什么区别_对象和实例之间的区别

    " 类别"一词来自" 分类"(将类别放入其中的" 类别"),现在我们都听说" 类别"就像一个蓝图,但这到底是什么意思?这 ...

  4. Linux开关机命令:shutdown,reboot,halt,init之间的区别

    在linux下一些常用的关机/重启命令. 1.shutdown shutdown命令安全地将系统关机.     有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的.因为linux与win ...

  5. linux c之创建进程fork和vfork函数之间的区别

    1.函数简介 1).得到当前的进程id pid_t getpid(); 2).fork函数 要创建进程,必须调用fork函数, 系统调用fork用于派生一个进程,函数原型如下 #include< ...

  6. c与python的区别-C++/C/JAVA/Python之间的区别?

    如果你是一位计算机方面零基础的小白,在日常工作和生活中,希望能够自己编写程序来完成一些事情.那么,比较各种语言之间的异同,实际上是为了选择适合自己的学习和使用的.下面就为大家分别介绍一下目前比较主流的 ...

  7. 框架和库的区别_框架和库之间的区别

    框架和库的区别 Developers often use the terms "library" and "framework" interchangeably ...

  8. 无监督和有监督的区别_机器学习和人工智能之间的区别

    机器学习示意图 机器学习是人工智能的一门学科,其中人工智能的应用范围更广,涵盖了与人类智能相似的主要系统.术语机器学习和人工智能的区别在于,人工智能是模仿人类智能的所有应用,智能发明的设计和综合.另一 ...

  9. python和c 的区别-C++/C/JAVA/Python之间的区别?

    如果你是一位计算机方面零基础的小白,在日常工作和生活中,希望能够自己编写程序来完成一些事情.那么,比较各种语言之间的异同,实际上是为了选择适合自己的学习和使用的.下面就为大家分别介绍一下目前比较主流的 ...

  10. go与python的区别_python和GO语言之间的区别!

    python和GO语言是当下非常受欢迎的两大编程语言,通过它们可以完成很多的事情,那么python和GO语言之间有什么区别呢?下面本篇文章带大家了解一下. Python和Go之间的区别是什么? 1.范 ...

最新文章

  1. Ubuntu 16.04 安装后修改屏幕分辨率(xrandr: Failed to get size of gamma for output default)
  2. 马斯克放的卫星被曝3%已成太空垃圾,占资源位置,最坏还能“锁死”地球人...
  3. 互联网1分钟 | 0920
  4. android监听方法的耗时时间,Android Studio监听时间变化
  5. 三朵云 华为_云时代和5G将重构网络结构
  6. 九大经典算法之归并排序
  7. Vue应用框架整合与实战--Vue技术生态圈篇
  8. Hive 查看库有多少表,表有多少字段以及动态监控
  9. springboot的使用html页面及css、js路径的配置
  10. Joey Sturgis Tones Soar for Mac(音效延迟插件)
  11. 平衡二叉树(AVL Tree)
  12. U-Boot源码之串口驱动
  13. 在think-cell数据表中,“撤消” (Ctrl+Z) 操作无效,怎么解决?
  14. Python读取pdf无框线表格_Python将PDF数据解析为表格形式
  15. carsim/trucksim获取轮胎侧偏刚度、纵向刚度
  16. 什么是JAVA SWING
  17. java 求正割_Java 反射机制详解
  18. 从零学习VH6501(八) —— 采样点测试
  19. Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA
  20. 06-08 无人机怎么拍摄VR全境图?

热门文章

  1. OAuth2.0 第三方登录
  2. JVM类加载与字节码技术
  3. 火狐浏览器f12不显示firebug开发者模式问题总结
  4. 18.3/18.4/18.5 用keepalived配置高可用集群
  5. 迅控SVS为某公安局打造综合联动指挥中心及合成作战中心
  6. html5游戏制作raf,HTML5之弧度角度与sincos(五角星绘制)、Canvas图形组合、阴影、图像绘制及createJS应用...
  7. 移动互联网应用技术(自考)
  8. 线性约束linprog - MATLAB
  9. 计算机学院的方阵口号,运动会开幕式各学院方阵口号
  10. C语言12M晶振,STM32将12M晶振换8M晶振后Keil及程序的相关设置