sudo身份切换
sudo更改身份:
- 我们知道,使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:仅仅为了一个特权操作就直接赋予普通用户控制系统的完整权限;
- 当多人使用同一台主机时,如果大家都要使用 su 命令切换到 root 身份,那势必就需要 root 的密码,这就导致很多人都知道 root 的密码;
- 考虑到使用 su 命令可能对系统安装造成的隐患,最常见的解决方法是使用 sudo 命令,此命令也可以让你切换至其他用户的身份去执行命令。
- 相对于使用 su 命令还需要新切换用户的密码,sudo 命令的运行只需要知道自己的密码即可,甚至于,我们可以通过手动修改 sudo 的配置文件,使其无需任何密码即可运行。
su 切换身份:su -l username –c ‘command’ 切换时需要知道对方的口令
sudo
• 来自sudo包,man 5 sudoers
• sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使
用 sudo,会提示联系管理员
• sudo可以提供日志,记录每个用户使用sudo操作
• sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权
限和使用的主机
• sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
• 通过visudo命令编辑配置文件,具有语法检查功能
visudo -c 检查语法
visudo -f /etc/sudoers.d/test
授权规则格式:
用户 登入主机=(代表用户) 命令
示例:
root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机(IP地址)
(runas):以哪个用户的身份
command: 运行哪些命令
root ALL=(ALL) ALL
用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
| 模块 | 含义 |
|---|---|
| 用户名或群组名 | 表示系统中的那个用户或群组,可以使用 sudo 这个命令。 |
| 被管理主机的地址 | 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。 |
| 可使用的身份 | 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。 |
| 授权命令 | 表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。 |
常用选项:
sudo -i -u wang 切换身份 sudo [-u user] COMMAND -V 显示版本信息等配置信息 -u user 默认为root -l,ll 列出用户在主机上可用的和被禁止的命令 -v 再延长密码有效期限5分钟,更新时间戳 -k 清除时间戳(1970-01-01),下次需要重新输密码 -K 与-k类似,还要删除时间戳文件 -b 在后台执行指令 -p 改变询问密码的提示符号
示例一:
让用户进行挂载光盘:
which mount 查看当前的mount在哪个路径。
/usr/bin/mount
vim /etc/sudoers
修改里边的配置文件让wang账号以root账号的权限进行挂载光盘和卸载光盘:

su - wang 切换至wang账号
sudo mount /dev/cdrom /mnt wang账号以root账号进行挂载光盘,注意格式和赋予的权限一致,否则无法执行
操作如下:
[root@centos7home]#su - wang Last login: Fri Oct 25 16:04:14 CST 2019 on pts/0 [wang@centos7~]$sudo mount /dev/cdrom /mnt 通过sudo命令进行挂载光盘 mount: /dev/sr0 is write-protected, mounting read-only [wang@centos7~]$df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 104806400 4404968 100401432 5% / devtmpfs 740204 0 740204 0% /dev tmpfs 756008 0 756008 0% /dev/shm tmpfs 756008 10472 745536 2% /run tmpfs 756008 0 756008 0% /sys/fs/cgroup /dev/sda3 52403200 48840 52354360 1% /data /dev/sda1 1038336 166960 871376 17% /boot tmpfs 151204 12 151192 1% /run/user/42 tmpfs 151204 0 151204 0% /run/user/1104 /dev/sr0 10491772 10491772 0 100% /mnt
[wang@centos7~]$sudo umount /mnt 配置文件中也赋予wang账号可以卸载挂载权限
示例二:
赋予wang在任何机器上有root的所有权限:

wang以root身份拥有所有权限之后就可以做任何事情,如:创建用户,再次登录时不需要输入wang账号口令,原因是有五分钟的有效期。
[root@centos7home]#su - wang [wang@centos7~]$sudo useradd zhang [wang@centos7~]$sudo useradd xiao
%wheel是一个组,默认有root的权限,只要将组加入到此组内就会有root权限:

示例:
gpasswd -a wang -g wheel 将wang加入wheel组内 [root@centos7home]#id wang uid=1104(wang) gid=1104(wang) groups=1104(wang),10(wheel) [root@centos7home]#su - wang 切换到wang账号也是可以以root身份进行创建账号 Last login: Fri Oct 25 16:09:56 CST 2019 on pts/0 [wang@centos7~]$sudo useradd test 用sudo命令可以创建test用户 [root@centos7~]#gpasswd -d wang wheel 删除wang在wheel组里 Removing user wang from group wheel
示例三:
用wang在任何机器上代表liu用户执行权限liu用户的所有权限:

1)cp /etc/fstab /data/ 复制一个fstab文件到data下 chmod 000 /data/fstab 将此文件的权限改为000 setfacl -m u:liu:rw /data/fstab 授予liu用户读写权限 2)su - wang sudo -u liu cat /data/fstab 其中wang用户可以通过liu用户进行读取文件里边的内容。 sudo -u liu vim /data/fstab 也可以修改里边的权限。
示例四:
如果将root里边/etc/passwd 的root用户的ID改为1000,普通用户的ID改为0,此时,root用户就成为普通用户,wang成为管理用户,默认配置文件中root用户可以切换到的任何用户具有所有执行权限,因此我们可以通过切换到wang用户进行执行root的权限。

[wang@centos7~]#su - root
Last failed login: Fri Oct 25 09:19:01 CST 2019 from 192.168.34.1 on ssh:notty
There were 17 failed login attempts since the last successful login.
[root@centos7~]$sudo -u wang cat /data/fstab
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for root:
#
# /etc/fstab
# Created by anaconda on Thu Aug 22 15:21:16 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=38dd5f68-4f30-411c-b80a-0f4a60b06c6f / xfs defaults 0 0
UUID=4357cc0e-6ee7-4a8f-8064-d1a54bdbf17f /boot xfs defaults 0 0
UUID=eb4bf5e6-2645-4b1c-bda8-12c5831b81c2 /data xfs defaults 0 0
UUID=b8c37e0b-3628-40b6-ac44-c36ca09b448f swap swap defaults 0 0
当wang只有普通用户的账号权限而没有root权限时,且没有root账号和密码,怎么办?

当没有root账号且没有密码的情况下,我们只需要将wang用户授权进行切换至任何用户的操作,只需要我们切换至root下,就可以进行root所拥有的权限操作:
[wang@centos7~]$sudo -i 进行切换身份,默认就会切换至root权限 [sudo] password for wang: 只需要输入wang账号的密码就可以切换至root账号。 [root@centos7~]#
sudo 写入用法:
1、我们也可以切换在/etc/sudoers.d文件下建一个新文件,避免与之前的/etc/sudoers配置文件混用,以下的格式,也可以切换至root用户进行查看:
1)cd /etc/sudoers.d vim test wang ALL=(ALL) ALL su - wang 切换至wang用户也会用sudo切换至root权限查看内容: sudo cat /etc/fstab
visudo 用法:
此命令可以检查自己配置文件哪行书写存在错误并提示你去改正:
1)先对其进行声明变量,显示颜色方便修改文件:
cd /etc/profile.d/ vim a.sh export EDITOR=vim . /etc/profile.d/a.sh 让其a.sh文件生效
2) visudo,如果我们写入错误的行,会提示我们语法有问题,然后按e我们去修改错误的地方,然后保存退出。

visudo -c也可以具有语法检测功能,表示之前在/etc/sudoers.d/test文件权限不对,权限过大,建议我们修改为440权限,防止普通用户查看到里边的内容。


chmod 440 /etc/sudoers.d/test 修改当前的test权限之后就不会再报有语法问题。 [root@centos7sudoers.d]#visudo -c /etc/sudoers: parsed OK /etc/sudoers.d/test: parsed OK
sudoedit 用法:
修改vim /etc/sudoers.d/test文件中的内容:
内容:wang 192.168.34.100=sudoedit 表示wang账号可以切换至root账号下都能进行操作
[root@centos7sudoers.d]#su - wang 切换至wang 账号可以查看里边的内容。 Last login: Fri Oct 25 17:29:13 CST 2019 on pts/0 [wang@centos7~]$sudoedit cat /etc/fstab 切换到wang之后就可以用sudoedit命令执行root所有权限 sudoedit: cat: editing files in a writable directory is not permitted # # /etc/fstab # Created by anaconda on Thu Aug 22 15:21:16 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=38dd5f68-4f30-411c-b80a-0f4a60b06c6f / xfs defaults 0 0 UUID=4357cc0e-6ee7-4a8f-8064-d1a54bdbf17f /boot xfs defaults 0 0 UUID=eb4bf5e6-2645-4b1c-bda8-12c5831b81c2 /data xfs defaults 0 0 UUID=b8c37e0b-3628-40b6-ac44-c36ca09b448f swap swap defaults 0 0
总结:wang (普通用户),ALL(赋予在哪个IP上登陆)=(ALL)(代表哪个账号) ALL(最后一个是赋予什么权限,如果是单个权限,需要我们写入命令的完整路径及命令)
Users和runas:
username
#uid 授权用户ID
%group_name 授权组
%#gid 授权组ID
sudo别名和示例
别名有四种类型:User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)* 必须以大写字母开头
别名定义:
Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
Wang ALL=(ALL) ALL Wang用户对所有主机拥有root所有权限
%wheel ALL=(ALL) ALL 在%wheel组里边的用户对所有主机具有root所有权限
wang ALL=(root) /sbin/pidof,/sbin/ifconfig wang 用户在任何主机以root身份执行pidof和ifconfig命令
%wheel ALL=(ALL) NOPASSWD: ALL 用户组在%wheel组的在任何主机登陆时不需要输入密码的权限。
User_Alias NETADMIN= test1,tets2 将两个用户(test1,test2)进行赋予别名,命名为NETADMIN
Cmnd_Alias NETCMD = /usr/sbin/ip 将命令(IP)赋予别名为NETCMD
NETADMIN ALL=(root) NETCMD test1,test2用户在任何主机上以root身份执行IP命令
User_Alias SYSADER=wang,liu,%admins 将用户wang,liu以及组admins 赋予SYSADER别名中
User_Alias DISKADER=tom 将用户tom 赋予DISKADER中
Host_Alias SERS=www.baidu.com,172.16.0.0/24 将网址和IP地址赋予SERS别名
Runas_Alias OP=root 将要切换的身份root赋予别名OP
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod 将执行的命令chown和chmod赋予SYDCMD别名
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk 将执行的命令parted和fdisk命令赋予DSKCMD
SYSADER SERS=(OP) SYDCMD,DSKCMD 将wang liu和组%admins在baidu和172.16.0.0机器上以root身份进行执行parted和fdisk名。
DISKADER ALL=(OP) DSKCMD 将tom在任何机器以root身份执行parted和fdisk命令
User_Alias ADMINUSER =user1,user2 将user1和user2用户赋予别名到ADMINUSER
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, 将useradd和usermod命令赋予ADMINCMD别名
/usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root 将passwd秘钥修改时只能修改以字母开头,忽略大小写,但是不能修改root命令
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel 将user1和user2在任何机器以root身份不需要登录密码执行useradd命令,删除用户命令需要输入口令
Defaults:wang runas_default=tom 默认wang账号默认代表是tom,如果代表jerry 需要加上-u选项。
wang ALL=(tom,jerry) ALL 默认wang用户在任何机器代表tom,jerry用户执行所有权限
wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd wang账号在在两个IP地址上代表root用户执行/usr/bin下的所有命令
wang ALL=(ALL) /bin/cat /var/log/messages* 当前是wang账号可以在任何机器上以任何身份进行查看messages*下的所有文件
sudo cat /var/log/messages /etc/passwd 此写法有bug,后面追加文件还会查看到后面的文件内容
wang ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
[wang@centos7~]$sudo cat /var/log/messages /etc/fstab
Sorry, user wang is not allowed to execute '/bin/cat /var/log/messages /etc/fstab' as root on centos7.localdomain. 提示结果是不可以访问后面的文件
sudo身份切换的更多相关文章
- 系统用户与用户组管|chfn、密码管理、身份切换、sudo
2 系统用户与用户组管理 GID为GroupId,即组ID,用来标识用户组的唯一标识符 UID为UserId,即用户ID,用来标识每个用户的唯一标示符 /etc/passwd /etc/shadow ...
- linux学习-使用者身份切换
在 Linux 系统当中还要作身份的变换?这是为啥?可能有底下几个原因啦! 使用一般账号:系统平日操作的好习惯 用较低权限启动系统服务 软件本身的限制 由于上述考虑,所以我们都是使用一般账号登入系统的 ...
- 【linux】sudo su切换到root权限
在用户有sudo权限但不知道root密码时可用 sudo su切换到root用户
- Linux命令_用户身份切换
命令 su 格式为:su [ - ] username,后面可以跟 - ,也可以不跟. 普通用户的su命令不加username时,就相当于切换到root用户,反之亦然.当su 命令加上 - 后,会初始 ...
- LINUX用户身份切换
Su 命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码. 使用方式 su [-fmp] [-c command] [-s shell] [--help] [--ver ...
- 用户身份切换之初窥企业远程用户没root还有root权限
一直很困扰我,既然企业不让用root不能登录,那怎么操作文件呢? 原来...... su - 用来切换初始变量 $PATH $HOME等 sudo 用的时候会su到root需要root的密码,这 ...
- 切换用户身份su与sudo
普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将 ...
- Linux系统中切换用户身份su与sudo的用法与实例
日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:s ...
- liunx 用户切换 su sudo
liunx 用户操作#useradd test#passwd test 用户身份切换su 切换用户 需要知道切换用户的密码1.su [-lm] [-c命令] [username] #su -login ...
随机推荐
- logstash输出至elasticsearch
续上一篇 上一篇描述了通过logback配置用logstash收集springmvc项目日志,本文是描述如何进一步通过elasticsearch对所收集数据进行的分析. output { elasti ...
- Map对象,Set对象使用(2)
今天重点见一下Set Set 在我印象里它主要就是去重,Set 是一个值的集合,这个集合中所有的值仅出现一次 Set 属性size:和Map的size一样,返回成员的总数 Set的方法: Set.pr ...
- ActiveMQ单机部署及简单应用
系统版本:Centos 7 前言 MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka.ActiveMQ是Apache下的开源项目, ...
- 关于使用pietty或putty终端连接ubuntu虚拟机时报被拒绝连接问题
首先如果要使用终端进行远程连接的ubuntu虚拟机的话,必须保证其虚拟机ip能在window下ping的动.具体的ubuntu网络配置这里不再讲,我这里使用的是NAT连接. 然后检查ssh服务是否有安 ...
- python — 函数基础知识(一)
目录 1 面向过程编程与函数式编程 2 函数的基本结构 3 函数的参数 1 面向过程编程与函数式编程 截至目前我们所接触.所写的编程为:面向过程式编程[可读性差/可重用性差] # 面向过程编程 use ...
- 15.Ansible安装与配置简单版
Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用.安装软件.执行命令.配置和编排任务. 一.Ansible工作机制 从图中可 ...
- varnishlog、Varnishstat详解
Varnish将日志记录到共享内存片段,而不是记录到一个普通文件中.当记录到内存片段的最后处,会再从头开始记,覆写老数据.这比记录到文件要快的多,不需要磁盘空间.Varnishlog是一个用来查看Va ...
- java对象序列化并存储到文件中
● 如何将一个Java对象序列化到文件里 使用输入输出流,,一个是ObjectOutputStream 对象,ObjectOutputStream 负责向指定的流中写入序列化的对象.当从文件中读取序列 ...
- 阿里云 负载均衡 HTTP转HTTPS
一.相关文档 1.证书服务 2.简单路由-HTTP 协议变为 HTTPS 协议 二.阿里云操作界面 1.云盾证书服务管理控制台(查询CA证书服务) 2.负载均衡管理控制台 三.相关文档 1.Syman ...
- 谈谈对Spring IOC的理解(转发)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...