Apache2许可问题
我了解了如何通过HTML创建linux用户(基本上,用户通过一个HTML页面注册,该页面执行服务器端PHP脚本,该脚本或多或少发出命令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
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的(不可写)包装器脚本。