Linux非root用户如何获取root权限

请关注本头条号,每天坚持更新原创干货技术文章

如需学习视频,请查看本头条号简介,免费在线观看学习视频

1. 了解sudo的作用

日常操作中为了避免一些误操作,更加安全的管理系统,我们一般使用普通用户登录系统,而非root。当需要执行一些管理员命令操作时,再切换成root用户身份去执行。

普通用户切换到root用户的方式有:su和sudo。

sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

sudo是一种权限管理机制,管理员可以授权于一些普通用户去执行一些root执行的操作,而不需要知道root的密码,它依赖于/etc/sudoers这个文件,可以授权于那个用户在那个主机上能够以管理员的身份执行什么样的管理命令,而且是有限的。这个文件相当于就是一个授权表。

Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

使用权限:在 /etc/sudoers 中有出现的使用者。

配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。

visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理。

Linux非root用户如何获取root权限

2. 配置sudo用户

修改sudo的配置文件,使zcwyou用户也可以通过sudo调用root权限。让用户zcwyou可以通过sudo执行所有root可执行的命令。

以root身份用visudo打开配置文件

[zcwyou@zcwyou ~]$ visudo
Linux非root用户如何获取root权限

可以看到类似下面几行:

# Runas alias specification
# User privilege specificationroot ALL=(ALL)ALL

加入一行,针对zcwyou用户:

zcwyou ALL=(ALL) ALL

保存退出

root root用户

ALL 所有的主机上都可以

(ALL) 是以谁的身份来执行,ALL就代表root可以任何人的身份来执行命令

ALL 所有的命令,也可以限制只能执行某些指令。

验证:

切换到zcwyou用户,我们用它的身份执行命令:

[zcwyou@zcwyou ~]$ su - zcwyou
[zcwyou@zcwyou ~]$ ls /root

ls: /root: 权限不够

[zcwyou@zcwyou ~]$ sudo ls /root

PassWord:

anaconda-ks.cfg Desktop install.log install.log.syslog

3. 限制sudo用户的权限

只让zcwyou像root那样使用ls和ifconfig

[zcwyou@zcwyou ~]$ visudo

修改为以下内容:

zcwyou localhost= /sbin/ifconfig, /bin/ls

Linux非root用户如何获取root权限

再来执行命令:

[zcwyou@zcwyou ~]$ sudo head -5 /etc/shadow

Password:

Sorry, user zcwyou is not allowed to execute ‘/usr/bin/head -5 /etc/shadow’ as root on localhost.localdomain.

提示没有权限,证明设置成功。

[zcwyou@zcwyou ~]$ sudo /sbin/ifconfig eth0

ifconfig可正常使用。

4. 借用其他用户身份

例如,我们想让zcwyou用户在linux主机上以user1或user2的身份执行date命令,这样编写配置文件:

zcwyou linux=(user1,user2) /usr/bin/date

那么,zcwyou到底以user1还是user2的身份执行?需要把user1或user2设为默认的目标用户即可。比如,再加一行,以user1为默认用户:

Defaults:zcwyou runas_default=user1

当然,我们可以使用sudo -u user1 date或者sudo -u user2 date灵活切换用户。但这样比较麻烦。

再来看一条里面的规则:

%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

user321 192.168.100.0/24=(root) /usr/sbin/useradd

%users 就是代表users这个组里面的所有成员

ALL 代表可以这所有的主机上

= 后面没有括号,也就是代表默认是以root身份

/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom 可以执行挂载的命令

用户是user321

5. 查看用户可以执行的命令

已经授权的普通用户可以使用命令:

[zcwyou@zcwyou ~]$ sudo -l 

显示可以执行那些命令

要执行命令要在执行命令之前加上 sudo ,然后输入用户自己的密码,这是因为要验证,执行命令的用户确实是该用户。

sudo命令还有这个机制,就是在你正确输入密码并成功执行命令的5分钟内,再执行命令是不需要输入密码的,过了5分钟,就需要再次验证该用户的自己的密码,当然也可以手动让该期限过期,请看最后的sudo语法。

Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:

Defaults env_reset

6. sudo免密码:

默认情况下,每次使用sudo都要求输入密码(相隔大于5分钟),通过修改配置免密。针对用户user123设置

user123 localhost=NOPASSWD: /bin/cat, /bin/ls

7. sudo选项说明

  • -V 显示版本编号
  • -h 会显示版本编号及指令的使用方式说明
  • -l 显示出自己(执行 sudo 的使用者)的权限
  • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在背景执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
  • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
  • -b 在后台执行指令。
  • -h 显示帮助。
  • -H 将HOME环境变量设为新身份的HOME环境变量。
  • -k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
  • -l 列出目前用户可执行与无法执行的指令。
  • -p 改变询问密码的提示符号。
  • -s 执行指定的shell。
  • -u <用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
  • -v 延长密码有效期限5分钟。
  • -V 显示版本信息。
  • -S 从标准输入流替代终端来获取密码

点击了解更多,快速查看更多的技术文章列表。

阿里云服务器

编辑该文章

编辑该文章,必须放入您本人的支付宝或微信收款码,通过审核后可,如果浏览者觉得您写的不错了直接对您打赏

复制加密链接

This is a modal dialog!

邮箱

This is a modal dialog!