Linux中su和sudo的用法
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的用法的更多相关文章
- Linux中su和sudo的用法整理
一.为什么会有su和sudo命令? 主要是因为在实际工作当中需要在Linux不同用户之间进行切换.root用户权限最高很多时候需要root用户才能执行一些关键命令.所以需要临时切换为root用户.工作 ...
- linux 下su 和sudo 的用法以及区别
一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...
- linux中su和sudo区别
su切换用户,切换成root用户,要输入root用户的密码 su - 用户名 sudo 涉及到 /etc/sudoers文件 ,内容如下: # User privilege specificatio ...
- Linux 中su和sudo命令的几个注意点
1 su与su - 的区别 1.1命令说明 su对应是是no-login shell的方式进行账号登陆,命令行的变量配置还是切换账号前的变量. su-对应的是login shell的方式进行账号登陆, ...
- Linux中su、sudo、sudo -i的用法和区别
sudo :暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.缺点是每次执行超级用户权限都要在命令前加上 sudo ,优点是在当前终端再使用 sud ...
- Linux系统中切换用户身份su与sudo的用法与实例
日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:s ...
- Linux命令--su与sudo
su(switch user)命令的作用:切换用户,一般是普通用户与root用户之间的切换.例:>su #输入su命令Password: #提示输入密码 ...
- 12个 Linux 中 grep 命令的超级用法实例
12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...
- linux中 su 与 su - 的区别
linux中 su 与 su - 的区别 su只是切换了用户身份,shell环境仍然是切换前用户的shell环境 su -是用户和shell环境一起切换成. 备注:1.切换了shell环境会相应的用户 ...
随机推荐
- [DB] SQL 必知必会
整体架构 数据类型 文本类:CHAR.VARCHAR(可变长度字符,多使用).TEXT.LONGTEXT(文本较大时使用) 数字类:TINYINT.INT.BIGINT.FLOAT.DOUBLE 日期 ...
- ltp日志
grep "fail" -i /var/log/messages |wc -lgrep "fail" -i /var/log/messagesgrep &quo ...
- Linux利用nc命令脚本批量检测服务器指定端口是否开放
一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...
- linux中cat、more、less命令区别详解##less 最合适最好用,和vim一样好用
linux中cat.more.less命令区别详解 caoxinyiyi关注 0.0362018.07.02 15:46:17字数 641阅读 516 linux中命令cat.more.less均可用 ...
- Centos6.8安装mysql 步骤
第1步.查看CentOS下是否已安装mysql 输入命令 :yum list installed | grep mysql 第2步.删除已安装mysql 输入命令:yum -y remove mysq ...
- Linux服务之nginx服务篇三(反向代理、负载均衡)
一.Nginx实现反向代理 概念 反向代理:在收到客户端请求之后,会修目标IP地址和端口 正向代理:在收到客户端请求之后,会修源IP地址和端口 上游服务器:代理服务器后端的哪些真正给客户端提供服务的节 ...
- svg 飞线,源码
<html> <head> <meta charset="utf-8" /> <meta name="viewport" ...
- Go语言之main包
Go语言的代码通过包(package)组织,包类似于其他语言里的库(libraries)或者模块(modules).一个包由位于单个目录下的一个或多个go源文件组成,目录定义包的作用.每个源文件都以一 ...
- mysql-redis连接
# log 数据库连接 class LogMysql(object): conn = None cursor = None def __init__(self): self.conn = pymysq ...
- ImportError:no mudle named 'cv2'
提供一下下载的网址:OpenCV,速度比较慢. 我的anaconda版本Python是3.6的,直接提供百度云下载: 链接:https://pan.baidu.com/s/1Xz9JrE2m-dwPv ...