CentOS中关于sudo和visudo的一些内容

admin2022-12-29  164

折腾PHP的shell_exec函数的时候,发现一些关于权限的问题。其中就涉及到了sudo命令以及visudo命令。

 

sudo命令是普通用户执行一些需要root权限时候提升权限的。

 

比如执行ifconfig需要root权限,如果用普通的www用户是执行不了的,那么就需要在ifconfig前面加上sudo这个命令,输入root密码验证通过之后就可以成功执行。

 

像这样:

sudo ifconfig

 

visudo命令是用来编辑/etc/sudoers文件,给用户或用户组授予root权限。

 

打开/etc/sudoers文件之后,主要注意以下几项配置:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
www        ALL=(ALL)       NOPASSWD: ALL

 

第一项是允许用户以root权限执行所有命令;

第二项是允许用户组中的用户执行任何命令;

第三项是执行root权限命令的时候不需要密码验证;

第四项是从/etc/sudoers.d读取配置文件。

 

最开始的时候是把www的用户添加到第一项第二项和第三项配置里面,www的用户和用户组属于宝塔面板运行web环境的用户,将www用户和用户组添加进前面的一二三项之后,www就可以执行sudo命令,并且不需要密码验证,再将php的shell_exec代码中增加sudo命令,改成下面这样:

<?php
$lanip=shell_exec("sudo ifconfig eth0 | grep '\<inet\>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
?>

 

后来研究了一下神雕大神的visudo配置,发现只要修改第四项配置就行了。

 

于是删除了前面三项的配置,把www用户添加到最后一项配置里面,也就是这一段:

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
www        ALL=(ALL)       NOPASSWD: ALL

 

然后,神奇的事情就发生了,不用增加sudo命令,用原来的代码也可以成功执行,获得ip地址:

<?php
$lanip=shell_exec("ifconfig eth0 | grep '\<inet\>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
?>

 

这样的代码也可以直接成功执行,正常获取ip地址。

转载请注明原文地址:http://198484.com/?read-34.html
000

最新回复(0)