lsof para arquivos abertos por outros usuários

2

Como posso ver a lista de arquivos abertos ( lsof ) em um diretório específico e por outros usuários?

Eu posso fazer lsof +D /path , mas isso mostra apenas os arquivos do usuário atual.

Qualquer maneira de ver se outros usuários abriram arquivos em um diretório?

    
por U880D 23.11.2009 / 09:48

3 respostas

2

Desde que eu tive a pergunta semelhante recentemente, eu queria compartilhar minhas descobertas aqui também. Também é assumido que o usuário é root e como mencionado nas outras respostas.

Listar arquivos abertos em um diretório específico

lsof +D /var/log/

mostrará arquivos abertos de todos os usuários.

Especificando o usuário

lsof -u ${USER} +D /var/log/

mostrará todos os arquivos do usuário OU dentro do diretório específico (... AND independet do usuário).

Isso ocorre por causa e como declarado em man lsof :

Since they represent exclusions, they are applied without ORing or ANDing and take effect before any other selection criteria are applied.

The -a option may be used to AND the selections. For example, specifying -a, -U, and -ufoo produces a listing of only UNIX socket files that belong to processes owned by user ''foo''.

Para listar arquivos abertos do usuário E dentro de um diretório específico somente

lsof -u ${USER} -a +D /var/log/ 

É então possível listar arquivos abertos que NÃO são o usuário E dentro de um diretório específico.

lsof -u ^${USER} -a +D /var/log/ 

Essa abordagem também funciona bem para conexões de rede. Ou seja, se estiver interessado em todas as conexões TCP ou UDP que são abertas pelo NOT em processos de execução raiz

lsof -u ^root -P -i TCP -i UDP

Para resolver o problema com o usuário não raiz, sudo e sudoers , será necessário Identifique o usuário chamando sudo .

Listar todos os arquivos abertos em um diretório específico E aberto a partir do usuário

sudo lsof -u $(who | cut -d " " -f 1) -a +D /usr/lib/

caso contrário, mostraria arquivos abertos OU dentro do diretório E indepent do usuário.

Listar todos os arquivos abertos em um diretório específico NÃO aberto pelo usuário mencionado

sudo lsof -u ^$(who | cut -d " " -f 1) +D /usr/lib/
    
por 02.05.2018 / 12:42
2

Você não pode, a menos que esteja executando isso como root.

Se você quiser, pode configurar um sudo alias para lsof , mas seria muito genérico.

Ou seja. esse usuário pode ver a saída lsof inteira ou muito específico, já que esse usuário pode ver apenas a saída lsof -u user desse outro usuário.

    
por 23.11.2009 / 12:19
1

Eu suponho que você execute como root / pode sudo como root lsof:

lsof -u www-data
    
por 23.11.2009 / 09:55

Tags