Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache2许可问题_Apache_Permissions_Root - Fatal编程技术网

Apache2许可问题

Apache2许可问题,apache,permissions,root,Apache,Permissions,Root,我了解了如何通过HTML创建linux用户(基本上,用户通过一个HTML页面注册,该页面执行服务器端PHP脚本,该脚本或多或少发出命令shell\u execute(“adduser user”)) 默认的apache用户是www数据。这在大多数情况下都可以正常工作,因为您可以将文件或文件夹分配给www数据用户或www数据组。但是,当您需要根访问权限时,这会使问题复杂化。要创建新的linux用户,我首先尝试了类似的方法 shell_exec("ssh -v root@$server \"user

我了解了如何通过HTML创建linux用户(基本上,用户通过一个HTML页面注册,该页面执行服务器端PHP脚本,该脚本或多或少发出命令
shell\u execute(“adduser user”)

默认的apache用户是www数据。这在大多数情况下都可以正常工作,因为您可以将文件或文件夹分配给www数据用户或www数据组。但是,当您需要根访问权限时,这会使问题复杂化。要创建新的linux用户,我首先尝试了类似的方法

shell_exec("ssh -v root@$server \"useradd --password `echo \"$password\" | makepasswd --clearfrom=- --crypt-md5 |awk '{ print $2 }'` -m $username\" ");
即使我设置了公钥/私钥以允许从用户www数据到root用户的无密码输入,我也不知道将这些密钥放在何处。似乎www数据没有主文件夹。php命令
shell\u exec(“echo$home”)
shell\u exec(“echo$user”)
返回空字符串。但是,“shell\u exec”(“whoami”)命令返回空字符串
正确返回www-date。我尝试了其他方法来发现主文件夹,例如
shell_-exec(“cd~”)
,但是,这导致了一个错误。在查找公钥/私钥时,是否有某种方法可以找出每个用户的ssh搜索位置?到目前为止,我已经尝试了
/home/www-data/.ssh/
和/var/www/.ssh

或者,我试过了

shell_exec("echo root_password | sudo -S useradd --password `echo \"mypassword\" | makepasswd --clearfrom=- --crypt-md5 |awk '{ print $2 }'` -m rolo ");
但是这抱怨我使用的
root\u密码不正确。看起来用户www数据有不同的root密码!事实上,我甚至不知道它的密码是什么

有没有人能指导我如何解决这个问题?我需要能够为每个注册的新用户创建linux用户

谢谢

shell_execute(“adduser”)

这是可怕的,糟糕的,危险的

shell_exec(“ssh-v root@$server

天哪,那更糟

www数据似乎没有主文件夹

真的吗?是什么让你这么想的?然而,这个问题是没有意义的,除非你正在建立一个蜜罐,允许root ssh访问不是解决问题的方法

假设您确实需要从Web服务器创建用户,正确的方法是:

  • 围绕useradd创建一个包装器,它只接受一个参数——新用户名——以防止滥用通过adduser公开的附加功能
  • 通过
    sudo
    使脚本可以在没有密码的情况下以root用户身份运行(实际上,尝试在代码中“隐藏”密码对安全性没有帮助)。请参阅sudoers的
    NOPASSWD
    标记

  • 或者,通过[x]设置脚本inetd从stdin读取共享密钥和用户名,并以root身份运行adduser,限制与localhost的连接,并设置PHP脚本以通过套接字与之通信。

    前面的答案对我很有用。特别是关于设置密码的部分,使用salt加密方法。

    在您的/etc/sudoers上使用它。示例f或运行gconftool-2:

    www-data ALL=NOPASSWD: /usr/bin/gconftool-2
    www-data ALL=NOPASSWD: /usr/bin/sudo
    www-data ALL=NOPASSWD: ALL
    

    从安全角度来看,在PHP文件中存储根密码是一种可怕的做法。脏代码,脏黑客:
    sudo passwd www data
    ,并为www data选择了一个新密码。编辑sudoers文件,使您的www数据可以使用自己的密码,并且只执行useradd命令。@Konerak:您的脏黑客版本工作正常。干杯。symcbean's答案甚至更好:NOPASSWD用于sudo,甚至不访问adduser,而是访问执行useradd的(不可写)包装器脚本。