尝试创建具有权限的 ftp 用户

trying to create a ftp user with permissions

所以我试图创建一个 ftp 用户并授予他对特定目录的权限,但没有创建该用户。当我回显命令时,目录已创建并且权限已授予用户,但是当我尝试使用创建的凭据登录时它不起作用。请看一下。我做错了什么?

$randomNum = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 8);
$randomPass = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 6);

$src = $request->path;
$dest = "/home/$randomNum";

echo $ssh->exec("mkdir $dest\n");

echo $ssh->exec("useradd -m -d $dest $randomNum\n");
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");

echo $ssh->exec("nice -n 19 cp -Rf $src $dest && chown -Rf $randomNum:$randomNum $dest && exit\n");

$ssh->disconnect();

来自您的代码:

echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");

特别是对于该命令,您需要启用 PTY 模式才能使读取/写入工作。您可以通过在命令前执行 $ssh->enablePTY() 来执行此操作。但是,在命令后执行 $ssh->disablePTY() 可能不是一个坏主意。

此外,echo $ssh->write($randomPass."\n");...这不会真正达到预期的效果。 $ssh->write 只是 returns true 或 false 取决于写入命令的成功或失败。

假设randomNum是用户名,randomPass是密码,dest是主目录,

改变这个:

echo $ssh->exec("mkdir $dest\n");

echo $ssh->exec("useradd -m -d $dest $randomNum\n");
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");

echo $ssh->exec("nice -n 19 cp -Rf $src $dest && chown -Rf $randomNum:$randomNum $dest && exit\n");

为此:

$ssh->exec("useradd -M " . $randomNum. " -d " . $dest);
$ssh->exec("echo \"" . $randomNum . ":" . $randomPass . "\" | sudo chpasswd");
$ssh->exec("chown -R " . $randomNum . ":" . $randomNum . " " . $dest);