2013-05-01 70 views
1

我能够从外壳使用命令./del_user.sh无法使用PHP和bash脚本

del_user.sh直接删除Linux用户删除的Linux用户是如下

#!/bin/sh 
userdel username 

当我运行这个脚本从PHP页面,它不起作用。

echo shell_exec('./del_user.sh'); 

这两个文件都在同一个目录中。

可能是什么问题?

+1

'www-data'用户是否有权限运行该脚本? – Waygood 2013-05-01 13:17:40

+3

它的权限,你可能能够删除一个用户,当你是根,但网络服务器不会有,实际上应该没有权限这样做 – Anigel 2013-05-01 13:17:47

+0

我应该在哪里设置权限? – KiranD 2013-05-01 13:22:04

回答

1
  1. del_user.sh不带参数,因此您正在脚本中的任何硬编码用户上运行脚本。除非您修改脚本以允许命令行参数,否则这将不起作用。
  2. 虽然这个任务可以由PHP来完成,但这当然不是主要功能,应该委托给更合适的应用程序。

另外,你还没有说明你的目标是什么或者这个脚本应该做什么。这是一些用户管理应用程序的一部分,还是仅仅是一个小任务的一次性?

回答: 要启用此功能,您必须让Apache具有sudo功能,以便获得暂时提升的权限。您可能需要根据您的操作系统做一些搜索操作,但这个链接提供了一些关于如何在Ubuntu中执行操作的指导:Ubuntu Forums

我也建议不要使用bash脚本,因为它并不是真的有必要做这个。您可以使用接受命令行参数的PHP脚本。所以在你的主要脚本中,你可以有这样的东西:shell_exec('php /path/to/del_user.php username');

然后在del_user.php你会有类似shell_exec('userdel '.$argv[1]);。关于命令行参数的更多信息可以在这里找到:$argv

最后,你可以把它直接放到你的主脚本中,而不是使用shell_exec两次。换句话说,只需使用shell_exec('userdel '.$username);而不是调用脚本。由于Apache将能够sudo,因此应该能够直接执行此操作。

+0

是的,它是用户管理应用程序的一部分。用户应该能够从Web界面添加,编辑和删除Linux用户。你能否给我更多关于如何实现这一目标的信息? – KiranD 2013-05-01 13:25:59

+1

添加更多我的答案。 – Chad 2013-05-01 14:09:34

+0

更改visudo中的权限。谢谢 – KiranD 2013-05-02 05:52:07