É possível 'ocultar' um processo da lista de `ps` ou` top` no Linux

10

Primeiro, presumo que, se isso for possível, seria necessário fazer root (ou como um usuário que compartilhe o UID 0 de root).

Como um processo pode ser iniciado para que não apareça em uma lista ps auxou ps efou topse o comando é executado por não raiz?

Isso é possível?

As distribuições que eu normalmente corro são RHEL / CentOS e Ubuntu - então, se houver uma resposta específica de distribuição, tudo bem também.

Warren
fonte
warren: Já encontrou uma solução para isso?
Chris
@ Chris - não ... a resposta de @ fianchetto parece ser a única rota, e isso é muito mais trabalho do que estou confortável em empreender: - |
Warren
Vou empreender esse projeto e apresentarei um relatório com qualquer coisa que eu determine.
Chris

Respostas:

5

Bem, você tem algumas opções aqui. Tomar o caminho mais fácil seria trocar o ps e os principais programas por versões modificadas que ocultam o que você deseja ocultar.

A alternativa seria executar o código incorporado em um processo existente ou escrever um script de wrapper em torno do código com um nome inócuo.

Em algumas versões do PS, você pode modificá-lo alterando argv [], mas não tem certeza se isso funciona para o topo, e não tem certeza se funciona no linux (é principalmente uma convenção BSD).

Tudo depende, exatamente, do que você deseja alcançar ao fazer isso?

fianchetto
fonte
meu objetivo aqui é para processos gerados pela raiz para não ser visível para todos os usuários (daemons talvez relacionadas à segurança ou similar)
Warren
@flanchetto Então, você está dizendo se eu tenho um programa que já está sendo executado e, posteriormente, executa um comando de linha de comando com uma senha no mesmo processo em que a senha será fornecida com segurança? por exemplo, executar python myScript.pye todos os subprocess.Popencomandos (que podem ou não conter senhas) não são mostrados, desde que seja o mesmo processo?
Brōtsyorfuzthrāx 11/02
Enfim, isso não funciona (eu apenas tentei e vi a senha). Então, eu suponho que você queira dizer outra coisa. Sinta-se livre para esclarecer. :)
Brōtsyorfuzthrāx
13

De acordo com o patch do kernel http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 , você pode usar a opção hidepid para o sistema de arquivos proc:

hidepid = 0 (padrão) significa o comportamento antigo - qualquer pessoa pode ler todos os arquivos / proc / PID / * legíveis pelo mundo.

hidepid = 1 significa que os usuários não podem acessar nenhum diretório / proc //, mas os seus próprios. Arquivos sensíveis como cmdline, sched *, status agora estão protegidos contra outros usuários. Como a verificação de permissão feita em proc_pid_permission () e as permissões de arquivos são deixadas intocadas, os programas que esperam modos de arquivos específicos não são confundidos.

hidepid = 2 significa hidepid = 1 mais todos / proc / PID / serão invisíveis para outros usuários. Isso não significa que oculta se existe um processo (pode ser aprendido por outros meios, por exemplo, com kill -0 $ PID), mas oculta o processo 'euid e egid. Compica a tarefa do invasor de reunir informações sobre processos em execução, se algum daemon é executado com privilégios elevados, se outro usuário executa algum programa sensível, se outros usuários executam algum programa etc.

gid = XXX define um grupo que poderá reunir as informações de todos os processos (como no modo hidepid = 0). Este grupo deve ser usado em vez de colocar o usuário não raiz no arquivo sudoers ou algo assim. No entanto, usuários não confiáveis ​​(como daemons etc.) que não devem monitorar as tarefas em todo o sistema não devem ser adicionados ao grupo.

Você não pode controlar a visibilidade no nível do processo, mas pode garantir que seus usuários possam ver apenas seus próprios processos.

Caso você tenha uma versão do kernel maior que 3.3, você pode tentar com o seguinte comando:

 
mount /proc -o remount,hidepid=2

uha
fonte
Você pode limitar a hidepid=2coisa para que ela afete apenas usuários específicos (ou coloque na lista de permissões certos usuários)?
Brōtsyorfuzthrāx 11/02
Funciona bem! Meu problema era que eu estava me conectando a um servidor usando um script cron e qualquer usuário pôde ver as credenciais usando "htop" (por exemplo). Definir como "hidepid = 2" os usuários não podem ver os processos iniciados por outros usuários, o que eu estava procurando. Por que não está definido por padrão?
Lepe
@ lepe provavelmente por motivos legados. Quebraria isso e aquilo e, portanto, não pode (ainda) ser usado em qualquer lugar.
Florian Wendelborn
A OP pediu que o pid fosse invisível no geral, não apenas para outros usuários ...?
26917 phil294
Existe uma maneira de ocultar processos criados apenas por determinados usuários? por exemplo. root?
Avery235
-2

use o comando F no comando top e n, por exemplo, para configurar o que deseja ver. use o comando W para escrever a configuração que você deseja ~ / .toprc - use? para ver os principais comandos. Isso pode resolver seu problema rapidamente - foi o que aconteceu comigo. Com F eu posso adicionar / remover os campos que quero ver, enquanto em f pode usar s para definir a classificação e, em seguida, q para voltar à exibição. então n para definir quantos processos eu quero ver e W para salvar em .toprc

JamesD
fonte
Que apenas esconde algo em meu ponto de vista
Warren