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账号进行挂载光盘,注意格式和赋予的权限一致,否则无法执行

操作如下:

[[email protected]]#su - wang

Last login: Fri Oct 25 16:04:14 CST 2019 on pts/0

[[email protected]~]$sudo mount /dev/cdrom /mnt

mount: /dev/sr0 is write-protected, mounting read-only

[[email protected]~]$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

[[email protected]~]$sudo umount /mnt  配置文件中也赋予wang账号可以卸载挂载权限

示例二:

赋予wang在任何机器上有root的所有权限:

wang以root身份拥有所有权限之后就可以做任何事情,如:创建用户,再次登录时不需要输入wang账号口令,原因是有五分钟的有效期。

[[email protected]]#su - wang

[[email protected]~]$sudo useradd zhang

[[email protected]~]$sudo useradd xiao

%wheel是一个组,默认有root的权限,只要将组加入到此组内就会有root权限:

示例:

gpasswd  -a   wang  -g wheel

[[email protected]]#id wang

uid=1104(wang) gid=1104(wang) groups=1104(wang),10(wheel)

[[email protected]]#su - wang  切换到wang账号也是可以以root身份进行创建账号

Last login: Fri Oct 25 16:09:56 CST 2019 on pts/0

[[email protected]~]$sudo useradd test  创建test用户

[[email protected]~]#gpasswd -d wang wheel   删除wang在wheel组里

Removing user wang from group wheel

示例三:

用wang在任何机器上代表liu用户执行权限liu用户的所有权限:

1)cp /etc/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的权限。

[[email protected]~]#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.

[[email protected]~]$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所拥有的权限操作:

[[email protected]~]$sudo -i  进行切换身份,默认就会切换至root权限

[sudo] password for wang:      只需要输入wang账号的密码就可以切换至root账号。

[[email protected]~]#

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

2) visudo,如果我们写入错误的行,会提示我们语法有问题,然后按e我们去修改错误的地方,然后保存退出。

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

chmod 440  /etc/sudoers.d/test  修改当前的test权限之后就不会再报有语法问题。

[[email protected]]#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账号下都能进行操作

[[email protected]]#su - wang   切换至wang 账号可以查看里边的内容。

Last login: Fri Oct 25 17:29:13 CST 2019 on pts/0

[[email protected]~]$sudoedit cat /etc/fstab

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, Runas_Alias, Host_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* *

[[email protected]~]$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. 提示结果是不可以访问后面的文件

原文地址:https://www.cnblogs.com/struggle-1216/p/11739744.html

时间: 2024-10-17 00:15:02

sudo身份切换的相关文章

身份切换与sudo

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码.以root身份切换至普通用户则不需要输入密码 su 功能描述: 身份切换,替代用户和组ID运行指令 格式: su –l username –c 'command' su username su - username 默认: Centos 6 命令位置 /bin/su Centos 7 命令位置 /usr/bin/su   /bin 软链接至 usr/bin 版本 选项 说明 示例 6 - 或 -l 变更身份时,变更

chapter14:Linux帐号管理之(1)身份切换

我们都是使用一般帐号登录系统的,但是如何让一般用户转变成root用户呢,有两种方法: (1) su:这个命令要有root的密码. (2) sudo:这个命令只要有自己的密码就可以了,但是要进行设置. 一.su 可以进行任何身份切换. su [-lm] [-c命令] [username] 有没有加上-区别很大.涉及到login-shell与nologin-shell的变量读取方法. (1)不加- 可以看到,此时用户身份为root ,但是PATH是chuiyuan的,也就是说读取变量的设置方式为no

Linux课程笔记 用户身份切换命令

超级用户root具有超级管理权限,由于权限太大,如果管理不好,就会对系统安全带来安全隐患.在工作场景中,一般临时性处理工作,都是以普通用户的身份完成,只在必要时才使用超级用户root. 1  su命令 1.1  su介绍 通过su命令可以在用户之间切换,超级用户root向普通用户或虚拟用户切换不需要密码(这就是超极权限所在).其他普通用户之间或者普通用户切换到root,都需要切换用户的秘密验证. su参数选项 注释说明 -,-l,--login 使一个shell成为登陆的shell,如执行su

Linux命令_用户身份切换

命令 su 格式为:su [ - ] username,后面可以跟 - ,也可以不跟. 普通用户的su命令不加username时,就相当于切换到root用户,反之亦然.当su 命令加上 - 后,会初始化当前用户的各种环境变量. 如果不加 - 切换到root用户时,当前目录没有变化:而如果加上 - 切换到root账户时,当前目录为root账户的家目录. 注:当由root切换到普通用户时,不需要输入密码. 命令 sudo 由于切换到zoctopus账户后当前目录还是 /root,zoctopus账户

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

一直很困扰我,既然企业不让用root不能登录,那怎么操作文件呢? 原来...... su -    用来切换初始变量 $PATH $HOME等 sudo 用的时候会su到root需要root的密码,这样很不安全.我们就会修改配置文件(不输入root密码 )   /etc/sudoers  或者直接打visudo     ,如果没有命令安装一下吧  yum install -y sudo 在 root    ALL=(ALL)       ALL     下面按照格式添加一行你的创建中意的用户名获

Linux用户身份切换

su   -  用来初始化环境变量 $PATH $HOME等sudo  su到root需要输入root的密码不安全 visudo 编辑/etc/sudoers 配置文件  没有命令需安装 yum install -y sudo格式: user   host=(as_user)  commands比如:  aming  ALL=(root)   /bin/ls    //它的意思是,让aming这个普通用户,拥有root的权限,针对ls这个命令. 应用:只允许使用普通账户登陆,而普通账户登录后,可

sudo cd切换不了目录

cd是Linux内建的命令, sudo是授以用户root权限运行 解决方法: 使用sudo -i命令提升用户权限 [[email protected] ~]$ sudo -i [[email protected] ~]# cd /var/log/audit/ 原文地址:https://blog.51cto.com/1929297/2414913

普通用户通过sudo su - 切换到root

创建用户: useradd  testuser echo "mypasswd" | passwd --stdin testuser 编辑文件  /etc/sudoers 或者使用 visudo 命令 (建议使用这种方法) 添加如下一行即可: testuser ALL=(ALL) ALL 原文地址:https://www.cnblogs.com/liang545621/p/12611461.html

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的身份的命