sudo作为www-data文件权限

时间:2014-12-14 05:26:01

标签: linux apache bash permissions

我在使用apache webserver作为www-data调用bash脚本时遇到问题。

当我从服务器调用它时出现IO错误并且它没有给我整个程序输出,但只有']没有这样的文件或目录'我在脚本中创建的文件大约是脚本的一半。

所以我想看到更多详细信息,我认为这将是一种以完全相同的方式运行程序的方法,但只是通过终端,所以我可以看到更多的输出:

sudo -u www-data ./bashscript

然而,在执行此操作时,我没有收到任何错误,我的bash脚本已完全完成。

那么,作为www-data进行sudo调用,调用脚本与通过Web服务器实际调用脚本为www-data之间的区别是什么? 更重要的是,我可以获得实际的服务器调用以获得与sudo调用相同的输出?

我现在正在为我的网页使用python cgi,所以我只是使用子进程来进行系统调用,这是我的代码,虽然我不认为这是问题:

w = subprocess.Popen("./nameofscript",  stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
for line in w.stdout.readlines():
    print line
kill = w.wait()

非常感谢!

2 个答案:

答案 0 :(得分:0)

请确保apache可以使用此脚本访问该文件夹。

尝试使用脚本的完整路径。

如果你使用python脚本,请确保脚本是可执行的,它有#! “shebang”在第一线。

答案 1 :(得分:0)

关于你的Q1:

  

作为www-data执行sudo调用之间的区别是什么?   调用脚本与实际调用脚本为www-data   通过网络服务器?

我想说,从操作系统提示符运行sudo,您可以在发生故障或丢失时收到更多信息,而有时从浏览器或程序langage shell调用运行,您可能只是即使命令从未运行,也不会收到任何反馈。

和Q2:

  

我可以获得实际的服务器调用以获得与sudo相同的输出   调用

不确定在python中是怎么做的,但是在php中你有两个指令:execshell_exec,使用第二个指令,你可以得到一个输出作为一个返回值。