Apache2权限问题

时间:2011-04-19 08:31:54

标签: apache permissions root

initially asked a question关于如何通过HTML创建linux用户(实际上用户通过HTML页面注册,该页面执行服务器端PHP脚本,或多或少发出命令shell_execute("adduser user")。但是,从那时起,我已经意识到这个问题与Apache用户有关。

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

shell_exec("ssh -v root@$server \"useradd --password `echo \"$password\" | makepasswd --clearfrom=- --crypt-md5 |awk '{ print $2 }'` -m $username\" ");

即使我公开/私钥允许从用户www-data无密码进入root,我也不知道在哪里放这些密钥。看来www-data没有主文件夹。 php命令shell_exec("echo $HOME")shell_exec("echo $USER")返回null /空字符串。但是,命令“shell_exec(”whoami“)correctly returns www-date. I tried other ways to discover the home folder, such as shell_exec(”cd~“), however, that caused an error. Is there some way of finding out where ssh searches, per user, when looking for public/private keys? I have so far tried / home / www-data / .ssh / and /var/www/.ssh

或者,我试过

shell_exec("echo root_password | sudo -S useradd --password `echo \"mypassword\" | makepasswd --clearfrom=- --crypt-md5 |awk '{ print $2 }'` -m rolo ");

但是抱怨我使用的root_password不正确。看来用户www-data有不同的root密码!事实上,我甚至不知道它的密码是什么。

有人可以引导我朝着正确的方向指导我如何解决这个问题。我需要能够为每个注册的新人创建linux用户。

由于

3 个答案:

答案 0 :(得分:3)

  

shell_execute(“adduser user”)

这是可怕的,坏的,危险的

  

shell_exec(“ssh -v root @ $ server

OMG - 情况更糟!

  

看来www-data没有主文件夹

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

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

  1. 围绕useradd创建一个包装器,它只需要一个参数 - 新的用户名 - 以防止滥用通过adduser公开的其他功能
  2. 使脚本通过sudo以root身份运行,无需密码(实际上,尝试在代码中“隐藏”密码对安全性没有帮助)。请参阅NOPASSWD标签了解sudoers
  3. 或者,通过[x] inetd设置脚本,该脚本从stdin读取共享密钥和用户名,并以root身份运行adduser,限制与localhost的连接,并设置PHP脚本以通过套接字与此进行通信。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在/ etc / sudoers上使用此功能。运行gconftool-2的示例:

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