su -
#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件,这个我们成为全切换
su
#su oldboy //执行这个命令的时候系统不读取以上两个文件,所以我们一般称它为半切换,这样切换过去之后,oldboy用户使用的依旧是此前用户的环境配置信息
sudo
#sudo这个命令设计初的主要目的是为了使某些用户具有特定用户的一些特殊的权限,举例说明:比如A,B两个人,A是技术部经理,具有公司服务器上的root权限,B技术还不够成熟,只具有一般用户权限,因为项目原因,B需要具有添加用户的权限,这个时候该怎么办呢?给B管理员权限?那安全性能得到保证吗!对,这时候sudo就派上用场了…
1)sudo这个命令的定义在/etc/sudoers文件里面,这个文件内容的格式如下:
User     MACHINE=    COMMANDS
root     ALL=(ALL)      ALL
oldboy ALL=(ALL)     /user/sbin/useradd
用户     机器=(授权哪个角色的权利) /user/sbin/useradd
%用户组 机器=(授权哪个角色的权利) /user/sbin/useradd

2)我们可以用vim来打开/etc/sudoers这个文件,但是因为这个文件对系统来说相当重要,所以有一个专门的命令visudo来对这个文件进行编辑,当有一个管理员对这个文件进行编辑的时候,这个文件会被系统加上一个“锁”,意思就是不允许多个管理员同时对其进行编辑,这也是为了系统安全着想

3)举例:比如我们需要oldboy用户可以执行passwd命令,那么我们需要作如下配置:
1)#visudo //打开/etc/sudoers配置文件
2)在配置文件里添加如下行
oldboy ALL=(root) /usr/sbin/useradd
3)#su - oldboy //切换到oldboy用户
4)#sudo /usr/sbin/useradd jack //普通用户oldboy添加用户jack
当然sudoers文件不是这么容易就能玩转的,假设如下情况,当我们想把好多个命令都给oldboy用户使用权限(同理当我们想给很多个用户一个命令的使用权限或者让一个用户在不同的主机上登录时都可以拥有这么命令的使用权限),那么我们改怎么办呢?一行一行的写下去,那岂不是显得我们的linux太笨拙了……
这时候我们可以看一下sudoers的man文档,我们会发现这个真的很牛掰,牛掰到我们可以定义某个用户只能使用某个命令的某一个选项……linux解决上述问题用到了别名

1)下面是对多个用户的格式定义:
User_Alias NAME = gentoo, suse, ubuntu, %mygrp, USENAME //可以加进去一个组,可以加进去另一个用户别名,这里如果是想把组加进去记得要在前面加“%”,不要问为什么,就是这样定义的
2)下面是对多个主机的格式定义:
Host_Alias NAME = 主机名, IP, network/mask, NAME //这里是说后面可以是主机名、IP地址、网段、另外一个别名
3)下面是对以哪个用户的身份运行(多个)的格式定义:
Runas_Alias NAME = 用户, 组, #用户ID, NAME //这里是说后面可以是用户名,组名,用户ID(前面必须加“#”),另外一个别名
4)下面是对多个命令的格式定义:
Cmnd_Alias NAME = 命令, 目录(目录中的所有命令),NAME //这里是说后面可以跟命令,目录下的命令集合,另外一个别名

当不加任何参数执行su命令时,表示要切换到root用户,但这样执行,会遇到一些问题。因为虽然是切换到root用户了,但并没有改变为root用户登录环境,用户默认的登录环境,可以在/etc/passwd 中查得到,包括家目录,shell类型等。比较规范的操作方法是”su -“。见下面的实例。

实例1:由普通用户oldboy切换到root用户

[oldboy@oldboy ~]$ whoami #→确认当前用户为oldboy
oldboy
[oldboy@oldboy ~]$ su #→不加用户就表示切到root用户。当然也可以使用su root。
Password: #→这里当然就是root用户的密码了。
[root@oldboy oldboy]# env
HOSTNAME=oldboy
USER=oldboy
MAIL=/var/spool/mail/oldboy
PWD=/home/oldboy
HOME=/root
LOGNAME=oldboy
...省略部分无关内容...
#→细心的读者应该已经看到了,如果使用su而不加上“-”这个参数,那么,切换前的用户的相关信息还会存在,这会引起很多麻烦,甚至会出现意想不到的结果。因此,切换用户时,最好是 “su - 用户名”。这是生产场景中标准的切换用户的操作方法。
[root@oldboy oldboy]# exit #→退出当前用户,这个命令也可以用ctrl+d快捷键命令替代。
[oldboy@oldboy ~]$ su - #→带上“-”参数做切换,也可用su - root命令。这是生产场景中的标准操作方法。
Password:
[root@oldboy ~]# env|egrep "USER|MAIL|PWD|LOGNAME" #→切换后的环境变量信息结果。使用egrep过滤包含想查看的字符串的行。
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root
#→这次和上次就不同了,所有的环境变量信息都切换到了root下。因此,请大家在切换用户时一定要加上“su - 用户名”,这里提醒下,不光是切到root呦,切换到其他用户也是一样,呵呵。

su命令总结:
1)普通用户切换到root用户,可使用su -或su - root。必须输入root密码才能完成切换。
2)root用户切换到普通用户,可使用“su普通用户名”的写法。不需要输入任何密码就能完成切换。切换到普通用户后,在执行一些命令如ifconfig时,可能会遭遇到环境变量PATH路径问题而找不到某些系统命令(一般是/sbin,/usr/sbin等下面的命令),这时就需要将普通用户的PATH,配置成root的PATH内容。
3)如果仅希望在某用户下执行命令,而不直接切换到该用户下操作,可以使用 su - 用户名 -c "命令"的方式。

Linux中su和sudo的用法的更多相关文章

  1. Linux中su和sudo的用法整理

    一.为什么会有su和sudo命令? 主要是因为在实际工作当中需要在Linux不同用户之间进行切换.root用户权限最高很多时候需要root用户才能执行一些关键命令.所以需要临时切换为root用户.工作 ...

  2. linux 下su 和sudo 的用法以及区别

    一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...

  3. linux中su和sudo区别

    su切换用户,切换成root用户,要输入root用户的密码 su - 用户名 sudo  涉及到 /etc/sudoers文件 ,内容如下: # User privilege specificatio ...

  4. Linux 中su和sudo命令的几个注意点

    1 su与su - 的区别 1.1命令说明 su对应是是no-login shell的方式进行账号登陆,命令行的变量配置还是切换账号前的变量. su-对应的是login shell的方式进行账号登陆, ...

  5. Linux中su、sudo、sudo -i的用法和区别

    sudo :暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.缺点是每次执行超级用户权限都要在命令前加上 sudo ,优点是在当前终端再使用 sud ...

  6. Linux系统中切换用户身份su与sudo的用法与实例

    日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:s ...

  7. Linux命令--su与sudo

    su(switch user)命令的作用:切换用户,一般是普通用户与root用户之间的切换.例:>su                #输入su命令Password:      #提示输入密码 ...

  8. 12个 Linux 中 grep 命令的超级用法实例

    12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...

  9. linux中 su 与 su - 的区别

    linux中 su 与 su - 的区别 su只是切换了用户身份,shell环境仍然是切换前用户的shell环境 su -是用户和shell环境一起切换成. 备注:1.切换了shell环境会相应的用户 ...

随机推荐

  1. 使用 vue3 的自定义指令给 element-plus 的 el-dialog 增加拖拽功能

    element-plus 提供的 el-dialog 对话框功能非常强大,只是美中不足不能通过拖拽的方式改变位置,有点小遗憾,那么怎么办呢?我们可以通过 vue 的自定义指令来实现一个可以拖拽的对话框 ...

  2. golang:运算符总结

    算术运算符 运算符 示例 结果 + 10 + 5 15 - 10 - 5 5 * (除数不能为0) 10 * 5 50 / 10 / 5 2 % (除数不能为0) 10 % 3 1 ++ a = 0; ...

  3. [OS] 操作系统课程(三)

    工具 源码阅读:understand 源码文档自动生成工具:Doxygen 编译环境:gcc 运行环境:x86机器或QEMU 调试工具:QEMU+(GDB or IDE) IDE:Eclipse-CD ...

  4. 012.Ansible高级特性

    一 本地执行 如果希望在控制主机本地运行一个特定的任务,可以使用local_action语句. 假设我们需要配置的远程主机刚刚启动,如果我们直接运行playbook,可能会因为sshd服务尚未开始监听 ...

  5. 002.Ansible之Inventory文件

    一 简介 在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单.该文件默认位于/etc/ansi ...

  6. JLINK下载出现问题

    JLINK 下载报错: RAM CHECK FAILED 说法一: 有一种说法是版本的问题 http://tieba.baidu.com/p/1902940329?red_tag=d180765763 ...

  7. STM32的引脚的配置

    http://blog.csdn.net/u010592722/article/details/45746079

  8. 链路追踪_SkyWalking的部署及使用

    关于链路追踪,目前比较主流是Cat,Zipkin,SkyWalking等这些工具.这篇文章主要介绍关于SkyWalking工具的. 为什么用SkyWalking,因为它基本没有代码侵入,只这一点就足够 ...

  9. Splunk 8.2.0 发布 (macOS, Linux, Windows)

    强烈鄙视 CSDN 用户 CIAS(账号:hanzheng260561728),盗用本站资源,删除原文链接,并且用于收费下载!!! 请访问原文链接:https://sysin.org/article/ ...

  10. Python+Selenium学习笔记2 - 字符串

    跟着网络课程学了几个小程序. 1.判断a字符串是否为b字符串的子串 1 # coding = utf-8 2 3 # 判断str_a字符串是否为str_b字符串的子串 4 5 str_a = &quo ...