注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

旷世的忧伤

不与夏虫语寒,不与曲人语道,因为生命缺乏言说的条件......

 
 
 

日志

 
 

解决Ubuntu下php无法执行超级用户命令的方法  

2015-01-09 18:01:09|  分类: PHP程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在php里调用shell命令时,是以www-data用户执行的,www-data用户的权限很低,只能执行一些普通的命令,如何需要用php执行一些超级用户命令或者操作一些只有超级用户才能访问的文件等时则无法执行。例如我需要通过php调用去修改/etc目录下的配置文件,因为/etc目录下的文件只有root用户才能操作,所以无法直接实现。

通过思考和实践,找到了一种解决的办法。或许这种方法并不高明,但基本能解决问题。解决办法是,将www-data用户添加到sudo用户组,并给www-data用户创建密码,然后编写脚本,用sudo执行命令。

1. 添加www-data用户到sudo用户组:

kylin$[www] -> groups www-data
www-data : www-data
kylin$[www] -> sudo usermod -a -G admin username
[sudo] password for kylin:
kylin$[www] -> groups www-data
www-data : www-data sudo


2. 为www-data用户创建密码

kylin$[www] -> sudo passwd www-data
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码

修改完密码后可以尝试登录下该用户:

kylin$[www] -> su www-data

登录时可能会提示如下错误:

This account is currently not available.

解决办法:
打开/etc/passwd文件:

sudo vi /etc/passwd

然后找到如下一行:

www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

将最后的 /usr/sbin/nologin 改为 /bin/bash,保存后再次登录。登录成功后可以尝试用sudo执行root命令。

3. 创建脚本
在ubuntu系统下,用sudo执行root命令时需要交互式输入用户密码,则在用php调用shell命令是肯定无法实现,解决办法是,创建一个脚本,在脚本实现自动输入用户密码。正好 sudo 命令的 -S 参数可以实现这样的功能。如下脚本所示:

#!/bin/bash

if [ $# -eq 2 ]
then
echo $2 | sudo -S cpkg -x $1
elif [ $# -eq 3 ]
then
echo $3 | sudo -S cpkg -x $1 $2

else
echo "Usage: extcpk <package name> <user password>"
echo " extcpk <package name> <extract path> <user password>"
fi

exit 0

编写脚本后,可以将密码作为参数传递给脚本,让脚本去执行root命令。

注: 这种方法只能用于个人测试使用。从安全上来讲,可能会造成www-data用户的密码明文泄露,在某些场合,这样的后果可能将是灾难性的。
  评论这张
 
阅读(16)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017