O que você quer dizer exatamente com a pergunta "existem outros nomes"? Os administradores de sistemas podem criar usuários com o nome que desejarem.
Álvaro González
Quaisquer outros nomes padrão para qualquer coisa que possa ser considerada o servidor; apache, ninguém, www-data, etc.
Wesley
1
Se bem me lembro, os usuários do sistema normalmente têm um pequeno UID (abaixo de 1024?). Essa pode ser uma pista melhor para o que quer que você esteja tentando realizar.
Se você estiver executando em modo de segurança (o que geralmente é o caso quando exec está desabilitado), então é improvável que seu processo PHP esteja executando em qualquer coisa além do padrão www-dataou apacheconta.
Realmente não posso usar exec ou sistema ou qualquer função intermediária.
Wesley
Era exatamente o que eu precisava. get_current_user () não era o que eu precisava definitivamente.
dgig
5
Pode ser útil para alguns usuários: se você executar a partir da interface da linha de comando, obterá o usuário que executa o comando, e não o usuário PHP.
Bram Vanroy
@BramVanroy então onde você deve executá-lo? = |
Andrew
@BramVanroy - Quero entender seu comentário, mas não entendo. se você executar isso do CLI, não é você quem possui o processo php atual? Quem seria o usuário PHP neste caso, além de você?
Se você criar um arquivo, o proprietário será o usuário PHP.
Isso provavelmente também poderia ser executado com qualquer uma das funções de arquivo temporário, como tempnam(), que cria um arquivo aleatório no diretório temporário e retorna o nome desse arquivo. Se houver problemas devido a algo como as permissões open_basedirou modo de segurança que impedem a gravação de um arquivo, normalmente, o diretório temporário ainda será permitido.
Solução de plataforma cruzada muito inteligente. Boh!
Matt Fletcher
3
Legal: a única solução sem privilégios aqui para também encontrar o grupo no qual o PHP está sendo executado.
tanius
2
um hack digno, merece um lugar mais alto
Abraham Philip,
1
@RavinderPayal A menos que você use a função tempnam como sugeri. É quase garantido que o usuário possa gravar no diretório temporário, independentemente de quem seja. Sem ser capaz de gravar no diretório temporário, você pode dar permissões temporariamente a uma pasta 777 e, se habilitado, desabilitar o selinux para aquele caminho.
Jonathan Kuhn
1
@RavinderPayal existem funções adicionais para retornar o caminho temporário. Portanto $temp_file = tempnam(sys_get_temp_dir(), 'TMP');, criaria um arquivo temporário no diretório temporário na maioria dos sistemas. Você pode então usar esse arquivo para obter o usuário / grupo. Eu deixei um pouco disso para o usuário descobrir.
Jonathan Kuhn,
20
Mais detalhes seriam úteis, mas assumindo que é um sistema linux, e assumindo que o php está rodando sob o apache, ele rodará como sempre o usuário do apache.
Uma maneira fácil de verificar (novamente, assumindo algum ambiente semelhante ao Unix) é criar um arquivo php com:
<?php
print shell_exec('whoami');?>
que lhe dará o usuário.
Para minha instância AWS, estou obtendo uma apachesaída quando executo este script.
Pode ser útil para alguns usuários: se você executar a partir da interface da linha de comando, obterá o usuário que executa o comando, e não o usuário PHP.
Bram Vanroy
12
eu usaria:
lsof -i
lsof -i | less
lsof -i | grep :http
nenhum desses. Você pode digitar em na linha de comando ssh e você verá qual usuário está ouvindo qual serviço.
Realmente não posso usar exec ou sistema ou qualquer função intermediária.
Wesley
@Wesley: então isso não é possível.
genesis
2
Pode ser útil para alguns usuários: se você executar a partir da interface da linha de comando, obterá o usuário que executa o comando, e não o usuário PHP.
e qual variável / valor nessa saída estamos procurando?
Andrew
Tenho certeza que você já encontrou isso, mas pesquisar por "usuário" nessa página?
CRTLBREAK
0
Em minha configuração, desejo verificar se o processo atual tem permissão para criar pastas, subpastas e arquivos antes de iniciar um processo e sugerir uma solução, caso pareça que não posso. Eu queria executar stat(<file>)em várias coisas para garantir que as permissões correspondam às do processo em execução (estou usando php-fpm, portanto, varia dependendo do pool).
A solução baseada em posix que Mario deu acima parece perfeita, no entanto, parece que a extensão posix está --disabled, então eu não pude fazer o acima e como eu quero comparar os resultados com a resposta da execução de stat () whoamiem um shell separado também não é útil (preciso do uid e do gid, não do nome de usuário).
No entanto eu encontrei uma dica útil, que pude stat(/proc/self)e stat(/proc/self/attr)e veja o uid e GID do arquivo.
O destaque de código acima não é preciso, copie e cole em seu editor favorito e visualize como código PHP ou salve e teste você mesmo.
Como você provavelmente sabe, get_current_user()retorna o proprietário do "script em execução atual" - então, se você não "chown" um script no servidor para o usuário do servidor web, muito provavelmente será "ninguém", ou se o desenvolvedor- usuário existe no mesmo sistema operacional, ele irá exibir esse nome de usuário.
Para contornar isso, criamos um arquivo com o processo em execução atual. Se você apenas fizer require()isso no script em execução atual, ele retornará o mesmo que o script-pai mencionado; portanto, precisamos executá-lo como uma solicitação separada para ter efeito.
Fluxo de processo
Para tornar isso eficaz, considere executar um padrão de design que incorpore o "modo de tempo de execução", de modo que quando o servidor estiver em "modo de desenvolvimento ou modo de teste", apenas ele poderá executar esta função e salvar sua saída em algum lugar de inclusão , -ou apenas texto simples ou banco de dados, ou o que for.
Claro que você pode alterar algumas particularidades do código acima, se desejar torná-lo mais dinâmico, mas a lógica é a seguinte:
definir uma referência única para limitar a interferência com outros usuários
definir um caminho de arquivo local para escrever um arquivo temporário
definir uma url / caminho público para executar este arquivo em seu próprio processo
escreva o arquivo php temporário que mostra o nome do proprietário do script
obter a saída deste script fazendo uma solicitação a ele
exclua o arquivo porque não é mais necessário - ou deixe-o se quiser
retornar a saída da solicitação como valor de retorno da função
Respostas:
Se disponível, você pode sondar a conta do usuário atual com
posix_geteuid
e, em seguida, obter o nome do usuário composix_getpwuid
.Se você estiver executando em modo de segurança (o que geralmente é o caso quando exec está desabilitado), então é improvável que seu processo PHP esteja executando em qualquer coisa além do padrão
www-data
ouapache
conta.fonte
get_current_user()
manual que mostra essa abordagem. A partir do PHP 5.4, ele pode ser reduzido para:print posix_getpwuid(posix_geteuid())['name'];
<?php echo exec('whoami'); ?>
fonte
Meio para trás, mas sem exec / sistema:
Se você criar um arquivo, o proprietário será o usuário PHP.
Isso provavelmente também poderia ser executado com qualquer uma das funções de arquivo temporário, como
tempnam()
, que cria um arquivo aleatório no diretório temporário e retorna o nome desse arquivo. Se houver problemas devido a algo como as permissõesopen_basedir
ou modo de segurança que impedem a gravação de um arquivo, normalmente, o diretório temporário ainda será permitido.fonte
$temp_file = tempnam(sys_get_temp_dir(), 'TMP');
, criaria um arquivo temporário no diretório temporário na maioria dos sistemas. Você pode então usar esse arquivo para obter o usuário / grupo. Eu deixei um pouco disso para o usuário descobrir.Mais detalhes seriam úteis, mas assumindo que é um sistema linux, e assumindo que o php está rodando sob o apache, ele rodará como sempre o usuário do apache.
Uma maneira fácil de verificar (novamente, assumindo algum ambiente semelhante ao Unix) é criar um arquivo php com:
que lhe dará o usuário.
Para minha instância AWS, estou obtendo uma
apache
saída quando executo este script.fonte
Você pode tentar usar crases como este:
fonte
eu usaria:
nenhum desses. Você pode digitar em na linha de comando ssh e você verá qual usuário está ouvindo qual serviço.
você também pode verificar este arquivo:
e procure por estas linhas:
para filtrar os dados do arquivo envvars, você pode usar grep:
fonte
grep "APACHE_RUN_" /etc/apache2/envvars
funcionou bem, obrigado.exec('whoami')
vai fazer issofonte
Direto do shell, você pode executar:
fonte
adicione o arquivo info.php ao seguinte diretório - seu diretório http / apache padrão - normalmente / var / www / html
com o seguinte conteúdo
Em seguida, reinicie o httpd / apache e vá para o diretório html padrão http://enter.server.here/info.php
entregaria todo o pedigree do php!
fonte
Em minha configuração, desejo verificar se o processo atual tem permissão para criar pastas, subpastas e arquivos antes de iniciar um processo e sugerir uma solução, caso pareça que não posso. Eu queria executar
stat(<file>)
em várias coisas para garantir que as permissões correspondam às do processo em execução (estou usando php-fpm, portanto, varia dependendo do pool).A solução baseada em posix que Mario deu acima parece perfeita, no entanto, parece que a extensão posix está --disabled, então eu não pude fazer o acima e como eu quero comparar os resultados com a resposta da execução de stat ()
whoami
em um shell separado também não é útil (preciso do uid e do gid, não do nome de usuário).No entanto eu encontrei uma dica útil, que pude
stat(/proc/self)
estat(/proc/self/attr)
e veja o uid e GID do arquivo.Espero que ajude outra pessoa
fonte
Você pode usar estes comandos:
ou
ou
ou
ou
fonte
Eu costumo usar
Ficarei feliz se te ajudou
fonte
get_current_user() - Gets the name of the owner of the current PHP script
- não o usuário executando o processo PHP.fonte
echo $_SERVER["USER"];
funciona, mas fornece o nome de usuário conectado no momento em SSH.Proposta
Um pouco tarde, mas mesmo que o seguinte seja uma solução alternativa, ele resolve o requisito, pois funciona muito bem:
Descrição
O destaque de código acima não é preciso, copie e cole em seu editor favorito e visualize como código PHP ou salve e teste você mesmo.
Como você provavelmente sabe,
get_current_user()
retorna o proprietário do "script em execução atual" - então, se você não "chown" um script no servidor para o usuário do servidor web, muito provavelmente será "ninguém", ou se o desenvolvedor- usuário existe no mesmo sistema operacional, ele irá exibir esse nome de usuário.Para contornar isso, criamos um arquivo com o processo em execução atual. Se você apenas fizer
require()
isso no script em execução atual, ele retornará o mesmo que o script-pai mencionado; portanto, precisamos executá-lo como uma solicitação separada para ter efeito.Fluxo de processo
Para tornar isso eficaz, considere executar um padrão de design que incorpore o "modo de tempo de execução", de modo que quando o servidor estiver em "modo de desenvolvimento ou modo de teste", apenas ele poderá executar esta função e salvar sua saída em algum lugar de inclusão , -ou apenas texto simples ou banco de dados, ou o que for.
Claro que você pode alterar algumas particularidades do código acima, se desejar torná-lo mais dinâmico, mas a lógica é a seguinte:
fonte
salvar como info.php e
abra info.php em seu navegador
ctrl + f e digite qualquer um destes:
você pode ver o usuário e o grupo com o qual o apache está sendo executado.
fonte
http://php.net/manual/en/reserved.variables.server.php
Usuário autenticado
fonte