我可以使用命令./del_user.sh
直接从shell中删除linux用户
del_user.sh如下:
#!/bin/sh
userdel username
当我从PHP页面运行这个脚本时,它不起作用。
echo shell_exec('./del_user.sh');
两个文件在同一个目录下。
有什么问题吗?
- del_user.sh不接受参数,因此您可以在脚本中的任何硬编码用户上运行脚本。除非您修改脚本以允许命令行参数,否则这将不起作用。
- 虽然这个任务可以由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,它应该能够直接执行这个。