2011-04-19 197 views
1

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

默认的apache用户是www-data这个工作正常,大部分时间,因为你可以分配文件或文件夹到www数据用户或者WWW的数据组。但是,当你需要root访问权限复杂的问题。要创建新的Linux用户,我第一次尝试这样的事情

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

即使我公开/私有密钥,以允许用户从WWW的数据,以根密码的条目,我不知道到底哪里把这些密钥。它似乎www数据没有主文件夹。 php命令shell_exec("echo $HOME")shell_exec("echo $USER")返回空/空字符串。然而,命令 “了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密码!事实上,我甚至不知道它的密码是什么。

有人可以引导我在正确的方向可以解决这个问题,我需要能够为每个regi的新用户创建linux用户讲演者。

感谢

+1

从安全的角度来看,将根密码存储在PHP文件中是非常糟糕的*练习。 – 2011-04-19 08:33:51

+1

肮脏的代码,肮脏的黑客:'sudo passwd www-data'并为www-data选择了一个新密码。编辑sudoers文件,以便您的www数据可以使用自己的密码,并且只执行useradd命令。 – Konerak 2011-04-19 08:34:29

+0

@Konerak:你的垃圾版本工作。干杯。 – puk 2011-04-19 09:22:09

回答

3

shell_execute( “adduser的用户”)

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

了shell_exec(“SSH -v根@ $服务器

OMG - 这是更糟糕

012!

看来WWW的数据没有主文件夹

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

假设你真的需要从网络服务器创建用户,这样做的正确方法应该是:

  1. 创建围绕useradd的包装只需要一个放慢参数 - 新用户名 - 以防止通过adduser的
  2. 暴露的附加功能虐待使通过sudo脚本是可执行的,根本没有密码(实际上,试图“隐藏”在代码中的密码并没有真正安全帮助)。参见sudoers中

可替代地,NOPASSWD标签,设置为通过[X]的inetd其读取的共享秘密和从stdin用户名和运行的adduser为根,限制连接到本地主机一个脚本并设置PHP脚本通过套接字与此进行通信。

0

上一个答案适合我。特别是关于设置密码的部分,使用salt加密方法。

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