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

示例1:

Wang ALL=(ALL) ALL   Wang用户对所有主机拥有root所有权限
%wheel ALL=(ALL) ALL 在%wheel组里边的用户对所有主机具有root所有权限
示例2:

wang ALL=(root) /sbin/pidof,/sbin/ifconfig  wang 用户在任何主机以root身份执行pidof和ifconfig命令
%wheel ALL=(ALL) NOPASSWD: ALL 用户组在%wheel组的在任何主机登陆时不需要输入密码的权限。
示例3

User_Alias NETADMIN= test1,tets2   将两个用户(test1,test2)进行赋予别名,命名为NETADMIN
Cmnd_Alias NETCMD = /usr/sbin/ip 将命令(IP)赋予别名为NETCMD
NETADMIN ALL=(root) NETCMD test1,test2用户在任何主机上以root身份执行IP命令
示例4

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命令
示例5

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命令,删除用户命令需要输入口令
示例6
Defaults:wang runas_default=tom  默认wang账号默认代表是tom,如果代表jerry 需要加上-u选项。
wang ALL=(tom,jerry) ALL 默认wang用户在任何机器代表tom,jerry用户执行所有权限
示例7

wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd    wang账号在在两个IP地址上代表root用户执行/usr/bin下的所有命令
示例8

wang ALL=(ALL) /bin/cat /var/log/messages*      当前是wang账号可以在任何机器上以任何身份进行查看messages*下的所有文件
sudo cat /var/log/messages /etc/passwd 此写法有bug,后面追加文件还会查看到后面的文件内容
如果目前想看到message*开头的所有文件,后面跟了其他文件,而不能被查看到,怎么解决?
解决办法:
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身份切换的更多相关文章

  1. 系统用户与用户组管|chfn、密码管理、身份切换、sudo

    2 系统用户与用户组管理 GID为GroupId,即组ID,用来标识用户组的唯一标识符 UID为UserId,即用户ID,用来标识每个用户的唯一标示符 /etc/passwd /etc/shadow ...

  2. linux学习-使用者身份切换

    在 Linux 系统当中还要作身份的变换?这是为啥?可能有底下几个原因啦! 使用一般账号:系统平日操作的好习惯 用较低权限启动系统服务 软件本身的限制 由于上述考虑,所以我们都是使用一般账号登入系统的 ...

  3. 【linux】sudo su切换到root权限

    在用户有sudo权限但不知道root密码时可用 sudo su切换到root用户

  4. Linux命令_用户身份切换

    命令 su 格式为:su [ - ] username,后面可以跟 - ,也可以不跟. 普通用户的su命令不加username时,就相当于切换到root用户,反之亦然.当su 命令加上 - 后,会初始 ...

  5. LINUX用户身份切换

    Su 命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码. 使用方式 su [-fmp] [-c command] [-s shell] [--help] [--ver ...

  6. 用户身份切换之初窥企业远程用户没root还有root权限

    一直很困扰我,既然企业不让用root不能登录,那怎么操作文件呢? 原来...... su -    用来切换初始变量 $PATH $HOME等 sudo 用的时候会su到root需要root的密码,这 ...

  7. 切换用户身份su与sudo

    普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将 ...

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

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

  9. liunx 用户切换 su sudo

    liunx 用户操作#useradd test#passwd test 用户身份切换su 切换用户 需要知道切换用户的密码1.su [-lm] [-c命令] [username] #su -login ...

随机推荐

  1. Jenkins之自动发送git变更到微信

    当我们通过Jenkins构建job的时候,是可以获取到git Change Log 的信息, 即本次上线修改了什么功能,我们将这个信息发送到微信群相关人员可直接获取到上线变更信息, 这样就不需要人为的 ...

  2. swift 第六课 scrollview xib 的使用

    现在 xib,stroyBoard 这种图形话的编辑写代码,越来越简单.以前scrollview 这样的控件不会用xib ,网上查了 好多的资料.现在把步骤逐渐的写出来, 这里顺便写个Demo ,是一 ...

  3. redis常用命令及操作

    说明 连接哨兵模式的redis时,我们连接的哨兵进程的ip和端口,这时很多命令不可用:此时,需要直接连接redis真实的服务器ip和端口:Sentinel模式下,连接真实的ip才可以使用config/ ...

  4. android studio 开发中启动android项目报错sdk版本不一致解决方案

    安卓项目开发中新建项目后再run'的时候发现报错com.android.support:appcompat-v7依赖报错 查看下build.gredle所配置的参数: 打开项目的build.gradl ...

  5. postman 发送json 格式数据

    hearder 设置 body 设置 { ", "primary_content": "{\"SN\":129,\"MPBH\&q ...

  6. tushare获取股票每日重要的基本面指标数据,并存入Elasticsearch

    tushare是一个开放的,免费的金融数据平台,包含沪深股票数据,指数数据,基金数据,期货数据,期权数据,债券数据,外汇数据,港股数据,行业经济数据,宏观经济数据以及新闻快讯等特色数据.其中以沪深股票 ...

  7. 39.创建多进程及进程通讯 -- Queue--Pipe--Event

    创建多进程 windows:进程.线程 linux:进程.线程(做了进程通信的多进程实现的线程) 进程之间内存彼此独立,不管是父子进程还是单个独立进程 multiprocessing:Process ...

  8. Qt中QGraphics类坐标映射关系详解

    1.Item(图元)坐标:属于局部坐标,通常以图元中心为原点(中心对称),非中心对称类,比如dialog类,一般以左上角为原点,正方向x朝右,y朝下. 2.setPos的坐标是父类坐标系的坐标,一般对 ...

  9. RestTemplate实践(及遇到的问题)

    在微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Apache的Http Client.Netty的异步 ...

  10. #【Python】【基础知识】【模块】【Python的常用模块】

    在IDE解释器中,执行help('modules')可查看当前环境可调用的Python模块: >>> help('modules') Please wait a moment whi ...