无法使用PHP和bash脚本删除Linux用户


Unable to delete Linux user using PHP and bash script

我可以使用命令./del_user.sh直接从shell中删除linux用户

del_user.sh如下:

#!/bin/sh
userdel username

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

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

两个文件在同一个目录下。

有什么问题吗?

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

作为题外话,您还没有说明您的目标是什么,或者这个脚本应该做什么。这是某个用户管理应用程序的一部分,还是只是某个小任务的一次性任务?

答:要启用这个功能,您必须为Apache提供sudo功能,以便它可以获得临时提升的特权。根据你的操作系统,你可能需要在谷歌上搜索一下如何做到这一点,但是这个链接提供了一些如何在Ubuntu中做到这一点的指导:Ubuntu论坛

我也不建议使用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,它应该能够直接执行这个。