我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用户。
由于
答案 0 :(得分:3)
shell_execute(“adduser user”)
这是可怕的,坏的,危险的
OMG - 情况更糟!shell_exec(“ssh -v root @ $ server
看来www-data没有主文件夹
真的?什么让你有那个想法?然而,这个问题没有实际意义,除非你正在设置一个允许root ssh访问的蜜罐,这不是解决问题的方法。
假设您确实需要从网络服务器创建用户,正确的方法是:
sudo
以root身份运行,无需密码(实际上,尝试在代码中“隐藏”密码对安全性没有帮助)。请参阅NOPASSWD
标签了解sudoers 或者,通过[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