Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Joob

"ssh" + "useradd" com php

Recommended Posts

Boas,

 

Estou a tentar fazer com que, quando clico em "submit", que ele faça a criação do usuário e que crie a password..

echo $ssh->exec("sudo useradd -d $dirusercsgo -m $user -g ftp-users -s /usr/sbin/nologin");
echo $ssh->exec("sudo chown $user:ftp-users $dirusercsgo");
echo $ssh->exec("sudo passwd $user");
echo $ssh->exec("sudo $password");

Faço estes comandos, mas ele só me cria a pasta do usuário, não faz o acesso ao ftp (com a password)...

 

 

Abraço,

Joob

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que seu problema é com o comando "passwd". Ele é interativo. Você precisa de um comando que não seja interativo. Veja estas soluções propostas: http://serverfault.com/questions/336298/can-i-change-a-user-password-in-linux-from-the-command-line-with-no-interactivit

 

PS: o chown deveria ser recursivo, não? Considere usar a opção -R

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Beraldo..

Vou dar uma olhadela ;)

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei destas formas:

echo $ssh->exec("sudo $user:12345 | chpasswd");
echo $ssh->exec("sudo $user:12345 |  /usr/sbin/chpasswd");

Mas não resultou..


Acabei de testar desta forma:

echo $ssh->exec("sudo passwd $user");
echo $ssh->read("New UNIX password:");
$ssh->write("12345\n");
echo $ssh->read("Retype new password:");
$ssh->write("12345\n");
echo $ssh->read('passwd: all authentication tokens updated successfully.');

Quando clico no "submit" ele fica sempre a pensar.. e tenho que dar restart ao apache para que volte.. parece que fica a fazer um loading sem fim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você testou os comandos diretamente no terminal, sem usar o PHP? Sempre teste diretamente na linha de comando antes de usar dentro do script

 

Acho que o chpasswd não vem instalado por padrão. Você verificou se seu sistema possui esse programa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, na verdade não o tinha instalado..

Já o instalei, mas ainda não me dei muito bem com ele na configuração das pass's..

 

Até porque, eu ao colocar

ScriptAlias /var/www/cgi-bin/ /usr/lib/apache2/modules/


AddHandler cgi-script .cgi .pl
Options +ExecCGI
SetHandler cgi-script

no apache2, o apache2 não fica como deve de ser...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não existe uma outra forma de fazer rodar o "passwd" no script ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até porque, eu ao colocar

ScriptAlias /var/www/cgi-bin/ /usr/lib/apache2/modules/


AddHandler cgi-script .cgi .pl
Options +ExecCGI
SetHandler cgi-script

no apache2, o apache2 não fica como deve de ser...

por que está alterando o apache? apenas instale o chpasswd e teste-o pela linha de comando. O apache não precisa saber da existência dele

 

 

Não existe uma outra forma de fazer rodar o "passwd" no script ?

Até onde sei, não.

Faça uma busca por "linux passwd non-interactive" no google. Verá que todos citam o chpasswd como alternativa. Aparentemente, é a única.

 

Uma saída pode ser tentar definir a senha no próprio comando useradd. Nunca fiz isso, mas veja estas soluções:

http://www.vivaolinux.com.br/topico/Shell-Script/useradd-+-passwd

http://stackoverflow.com/questions/2150882/how-to-automatically-add-user-account-and-password-with-a-bash-script

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizei o apache, para ver se o chpasswd estava em funcionamento.. como também testei pelo comando, mas ocorre-me sempre este tipo de erro..

chpasswd: (user tester) pam_chauthtok() failed, error:
Authentication token manipulation error
chpasswd: (line 1, user tester) password not changed

tenho andado a pesquisar sobre tal, mas ainda não obtive uma solução.. ando aqui a tentar ver..

 

Vou dar uma espreita nisso ;)


Beraldo.. já sei qual o problema..

 

O problema é que o script não está a fazer a criação do usuário.. e quando testo o "chpasswd", dá-me esse erro, devido ao usuário não existir.. descobrir agora mesmo..

 

Tenho que ver como o fazer criar o usuário, visto não estar a fazê-lo...


Agora também reparei que estava a usar "useradd" em vez de "adduser" ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que o script não está a fazer a criação do usuário.. e quando testo o "chpasswd", dá-me esse erro, devido ao usuário não existir.. descobrir agora mesmo..

Uma dica: se os comandos forem dependentes entre si, você pode executar o segundo apenas se o primeiro ocorrer com sucesso. Você pode fazer com &&, desta forma:

comando1 && comando2

Assim, se o comando1 falhar, o comando2 não será executado, sem gerar erros.

 

 

Agora também reparei que estava a usar "useradd" em vez de "adduser" ..

Eu também me confundo com os dois. De fato, o certo é usar adduser :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo.. é boa dica essa ;)

Irei utilizar dessa forma..

 

 

Joob, em 21 Jan 2015 - 8:28 PM, disse:snapback.png

Agora também reparei que estava a usar "useradd" em vez de "adduser" ..

Eu também me confundo com os dois. De fato, o certo é usar adduser :thumbsup:

 

É verdade, de facto também confundo sempre e fico na dúvida com o "adduser" e o "useradd".. kakak :p ..
Já consegui gerar o utilizador e a password.. ^^
Agora falta é redirecciona-lo para a pasta que eu quero e não para o "home".. o meu "-d" até resultou, o utilizador "tester" até foi criada onde eu mandei.. mas quando faço login no "FTP", ele já entra no "/home/tester", ou seja, no fundo não fez login directamente na pasta que eu mandei.. estive a pesquisar e se utilizar desta forma "-D --base-dir", é bem possível que resulte..
Vou testar desta forma..
Já agora, consegues-me dizer, como fazer o bloqueio de não conseguir ir para as pastas fora do utilizador ? (tipo voltar pra trás) só para que seja permitido ficar na pasta do utilizador..

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Já agora, consegues-me dizer, como fazer o bloqueio de não conseguir ir para as pastas fora do utilizador ? (tipo voltar pra trás) só para que seja permitido ficar na pasta do utilizador..

Nunca configurei FTP (até porque prefiro ssh/rsync :P ), mas, pelo que vi, isso depende de qual servidor ftp você usa.

 

É possível configurar um chroot para cada login. Veja:

http://www.cyberciti.biz/tips/vsftp-chroot-users-limit-to-only-their-home-directory.html

 

Mas, como eu disse, isso pode variar conforme o servidor ftp que você está usando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exacto.. também gosto de utilizar esse modo.. mas de momento estou a querer testar com o VSFTPD, tenho ele instalado etc..

 

Secalhar o problema é na zona do "chroot", vou dar uma vista de olhos.. tenho que verificar melhor em relação ao VSFTPD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho novamente o problema do "adduser / useradd".. o script não está a fazer a criação do user.. brrr

echo $ssh->exec("sudo adduser $user -d $dirusercsgo -g ftp-users");

Compartilhar este post


Link para o post
Compartilhar em outros sites

O -d e o -g estavam mal, teria que usar o --home ...

Até ai tudo bem, consegui fazer a criação do user pelo ssh..

 

Mas ao fazendo pelo script "sudo adduser $user" só assim, ele não cria o user.. será por causa da password ?

É que ainda não tenho o chpasswd a funcionar como deve de ser, ele não assume a password afinal..


realmente não está a executar o comando.. :s

 

agora estou a usar desta forma

echo $ssh->exec("sudo useradd $user -d $dirusercsgo");

ele desta forma funciona no ssh.. mas pelo script.. nada.. o user não é criado :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reparei aqui numa coisa, com os vários testes que andei a fazer..

Se eu aqui, usar os dados do root...

if($ip == "IPdoServer") {
$rootuser = "root";
$rootpass = "passroot";

Já tenho permissão para fazer a criação do user, usando o "useradd".. o user é criado, mas sem password..

Se colocar o "adduser", quando faço submit, o script fica a pensar a pensar.. e não sai do mesmo sitio..

 

Se usar os dados do user..

if($ip == "IPdoServer") {
$rootuser = "user";
$rootpass = "passuser";

Não consigo fazer a criação do user, usando o "useradd & adduser" com o "sudo" antes do comando...

 

Ou seja, parece que o user não tem permissão para utilizar o sudo..

 

Será isso.. ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se colocar o "adduser", quando faço submit, o script fica a pensar a pensar.. e não sai do mesmo sitio..

O comando é interativo e fica esperando digitar a senha. Creio que seja essa a razão.

 

 

Ou seja, parece que o user não tem permissão para utilizar o sudo..

 

Será isso.. ?

É só testar diretamente no terminal pra ver se é essa a razão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm então demora um pouco.. vou testar esperando um pouco..

 

quanto ao sudo.. ele com o user dá-me este erro

 

 

is not in the sudoers file. This incident will be reported.

 

mas se eu editar o /etc/sudoers e adicionar o user como ALL, igual ao root, o user não fica com permissão para tudo, tal como o root ? ou é só mesmo para o sudo ? mas fazendo sudo tem sempre acesso a tudo.. correct ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.