Linux系统中切换用户身份su与sudo的用法与实例
日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root。当需要执行一些管理员命令操作时,再切换成root用户身份去执行。
普通用户切换到root用户的方式有:su和sudo。
1,su -
(su为switch user,即切换用户的简写)
格式:su -l USERNAME(-l为login,即登陆的简写)
-l可以将l省略掉,所以此命令常写为su - USERNAME
如果不指定USERNAME(用户名),默认即为root,所以切换到root的身份的命令即为:su -root或是直接 su -
实例1:普通用户user1知道root账户登录密码,要求用户user1在不注销登录的前提下查看/etc/shadow文件。
如下图,试图查看文件/etc/shadow时,提示拒绝访问,此时使用su - 命令切换成root身份后,即可正常查看。

之后,通过命令exit或logout,或者是快捷键Cry+D即可返回原用户身份。
2:su - 与su
通过su切换用户还可以直接使用命令su USERNAME,与su - USERNAME的不同之处如下:
su - USERNAME切换用户后,同时切换到新用户的工作环境中
su USERNAME切换用户后,不改变原用户的工作目录,及其他环境变量目录
如下图,显示两个命令的执行结果:

3,sudo
使用su切换用户时需知晓对应用户的登陆密码,即若切换成root用户身份,需知道root用户的登陆密码。作为root用户管理员,如何授权其他普通用户,在不需要知晓root密码的情况下,执行root权限的命令操作?此时即可使用sudo。
sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令;
格式:sudo -u USERNAME COMMAND
当普通用户通过sudo以root用户执行命令时,sudo后面的 -uUSERNAME可省略,即sudo COMMAND 即意为sudo以root用户执行
默认情况下,系统只有root用户可以执行sudo命令。需要root用户通过使用visudo命令编辑sudo的配置文件/etc/sudoers,才可以授权其他普通用户执行sudo命令。
如下图,假如使用普通用户帐号user4通过sudo以root用户身份执行命令tail /etc/shadow时,即被提示:user4未被定义在sudoers文件中,无法执行此命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
sudo命令 语法:sudo [-bhHpV][-s ][-u <用户>][指令] 或 sudo [-klv] 参数: -b 在后台执行指令。 -h 显示帮助。 -H 将HOME环境变量设为新身份的HOME环境变量。 -k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。 -l 列出目前用户可执行与无法执行的指令。 -p 改变询问密码的提示符号。 -s 执行指定的shell。 -u <用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。 -v 延长密码有效期限5分钟。 -V 显示版本信息。 -S 从标准输入流替代终端来获取密码 |
4,sudoers
sudo的配置文件为:/etc/sudoers。
sudoers文件中允许指定用户在不需要知道root用户的登陆密码的情况下,可以以root用户身份运行各种命令。此文件必须使用visudo命令编辑配置。(visudo命令可以提供basic sanitychecks和check for parse errors,即提供快速的正确性有效性检查,以及语法检查功能)
查看sudores文件,其中有一行如下图,定义了允许root用户从任何主机登陆,使用sudo可以切换成任何用户的身份,执行所有命令。

查看sudoers文件,其中有两行如下图,定义了组可以使用sudo命令的配置。

实例2:设置普通用户user4,使其可以使用sudo命令以root用户身份修改其他所有用户登录密码,但不能修改root用户登陆密码
未被授权前,user4使用sudo以root用户修改user1的密码时,提示user4未被定义在sudoers文件中,无法执行,并且此事件将被报告给。如下图:

执行visudo命令,编辑sudoers文件,添加一行:用户帐号为user4;可以从任何主机登陆,执行三条命令(以root身份执行passwd命令后面不加用户名时,即代表修改root用户本身的密码,此即为第一条命令的作用),如下图,即可实现user4可以修改除root用户之外的其他所有用户的登录密码。

之后,user4通过sudo以root用户身份即可成功修改user1的密码(而不需要知道root的密码,只需要输入自己的密码即可),同时无法修改root的密码,如下图:

实例3:设置组Administrators内所有成员都可以通过sudo以root用户身份执行所有命令,且不需要验证本身的账户密码。
通过visudo命令编辑sudoers文件,添加如下一行,即完成配置。

之后,成员一user1,即可通过sudo以root用户执行所有命令,且不需要验证本身账户密码。如下图:

附:man文档中su和sudo的解释:
su - run a shell with substitute user andgroup IDs
以替代的用户运行shell。(即su之后,在当前shell上的用户身份已转变)
sudo - excute a command as another user.
sudo allows a permitted user to execute acommand as the superuser or another user, as specified by security policy.
以其他用户身份执行命令。sudo依照安全策略中指定,允许授权用户以超级用户或是其他用户身份执行命令。(即sudo,只是临时以其他用户身份执行命令,并不会切换身份)
su -c
当然,su也可以在不切换用户身份的情况下,临时以其他用户执行命令。
通过选项-c,即可使用root身份临时执行命令,如下图:

/bin/su -
同时,也可以通过配置sudoers文件,授权其他普通用户,可以切换成其他用户身份去执行命令,而不必每次都加上sudo。如下图,只需在sudoers文件中定义普通用户user4

之后,用户user4只需执行一次sudo su - 即可切换成root身份了

另外也可以进入 /etc/sudoers.d/ 编辑里面的文件,进行分文件管理
如 vi dongjj
%dong ALL=(ALL) NOPASSWD: /bin/su data_user
%dong ALL=(ALL) NOPASSWD: /bin/su - data_user
注:实例环境为Vmware Workstation 9、CentOS 6.4
原文出自:http://zebralinux.blog.51cto.com/8627088/1369301
还可以参考 http://blog.csdn.net/babyfish13/article/details/51219784
Linux系统中切换用户身份su与sudo的用法与实例的更多相关文章
- 切换用户身份su与sudo
普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将 ...
- linux系统(centos)下su和sudo命令的区别
linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...
- linux中切换用户方式su和su -的区别
Using su The su command allows users to open a terminal window, and from that terminal start a sub ...
- Linux 下以其他用户身份运行程序—— su、sudo、runuser
本文综合分析了Linux系统下,如何使用runuser命令.su命令和sudo命令以其他用户身份来运行程序,以及这三个命令的运行效率比较. 一.su 命令临时切换用户身份 SU:( Switch ...
- (转)linux 系统下虚拟用户的作用
原文:http://blog.csdn.net/luoshao20120430/article/details/16900653 http://blog.csdn.net/u01 ...
- Linux 系统中用户切换(su user与 su - user 的区别)
1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...
- Linux 系统中用户切换
1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...
- linux系统中用户切换
1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...
- 用户管理 之 Linux 系统中的超级权限的控制
在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...
随机推荐
- vm #set、日期截取、#foreach&#if
<div class="form_row"> <label>状态:</label> #if ($!cp.runState =='t') #set ...
- 2D 2 3D 开源项目
http://www.cvlibs.net/projects.php http://www.cvlibs.net/software/libelas/
- JS引擎深入分析
转载自阮一峰:http://javascript.ruanyifeng.com/bom/engine.html 目录 JavaScript代码嵌入网页的方法 script标签:代码嵌入网页 scrip ...
- fiddler配置及使用教程
本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意:Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888.当Fiddler退出的时候它会 ...
- 联想预装Win10/Win8换Win7 教程 以及svn使用教程
1.换系统教程 http://ideapad.it168.com/thread-4869510-1-1.html http://jingyan.baidu.com/article/08b6a591c8 ...
- tensorflow拟合随机生成的三维数据【学习笔记】
平台信息:PC:ubuntu18.04.i5.anaconda2.cuda9.0.cudnn7.0.5.tensorflow1.10.GTX1060 作者:庄泽彬(欢迎转载,请注明作者) 说明:感谢t ...
- Java异常类复习总结
个人理解先行: 异常类是当在程序出现问题时抛出的一个警告.提示你程序设计或者代码有存在错误的地方. 异常类和Error都继承自Throwable, Throwable继承自Object类. Runti ...
- 操作构造字符串化宏#define STRINGIZE(x) #x
c++test工程单元测试中报错 “STRINGIZE” 未定义错误 解决方案:在头文件定义宏STRINGIZE #符号把一个符号直接转换为字符串,例如:#define STRINGIZE(x) #x ...
- HDU 5936 Difference(折半搜索(中途相遇法))
http://acm.hdu.edu.cn/showproblem.php?pid=5936 题意: 定义了这样一种算法,现在给出x和k的值,问有多少个y是符合条件的. 思路: y最多只有10位,再多 ...
- POJ 1029 False coin
http://poj.org/problem?id=1029 题意: 在一堆硬币中有一个假硬币,重量是重是轻不知道.每次称量多个硬币,并给出称量结果.判断依据题目给出的几次称量结果能否找出假硬币. 思 ...