Como impedir que um usuário veja argumentos de linha de comando?

1

Temos um aplicativo de servidor de IC executado como o usuário build . Qualquer comando com argumentos executados pelo servidor de IC é visível por meio de ps . Embora os usuários não administradores não tenham acesso ao carregamento de um shell no servidor de IC, eles, no entanto, têm acesso à execução de comandos unix por meio de uma tarefa.

Minha preocupação é; O usuário A pode potencialmente expor a tarefa de um usuário B que possui argumentos de linha de comando (que poderiam ser informações confidenciais) simplesmente fazendo um ps .

Observe que todas as tarefas no servidor de IC são executadas como o usuário build . Os usuários não podem alternar para diferentes user .

Eu poderia, talvez, bloquear o comando ps , de modo que, dentro de uma tarefa, um usuário não possa executar ps , o que deve resolver meu problema, no entanto, estou curioso em saber:

  1. Existem outros comandos que podem ser executados para expor os argumentos da linha de comando sem ter root privileges?
  2. Dado o contexto desse problema, existe uma maneira melhor / segura de gerenciá-lo?
por kaizenCoder 21.02.2016 / 04:25

3 respostas

3

I'm afraid all commands are run as the build user.

Então, qualquer pessoa que enviar uma versão pode ver e até mesmo interferir nos trabalhos de outro usuário. Executar uma compilação pode executar código arbitrário; Isso permite que qualquer pessoa que envie uma compilação não apenas execute ps , mas também leia e grave arquivos pertencentes a outras tarefas. Se você não pode confiar nos usuários que enviam compilações, você deve executar as compilações como usuários separados.

Se estiver preocupado apenas com usuários que tenham uma conta nesse servidor de IC, mas não tenham permissão para enviar versões, A opção hidepid pode ajudá-lo. Como alternativa, edite os remetentes da versão para passar informações confidenciais em arquivos ou variáveis de ambiente em vez de argumentos da linha de comando. Note que o comando ps não é o que você precisa para cuidar, é apenas uma impressora bonita para informações encontradas no proc sistema de arquivos . A linha de comando do processo 1234 pode ser impressa com cat /proc/1234/cmdline .

Se você tiver preocupações de confidencialidade com compilações, recomendo que, em vez de tentar conectar um possível vazamento de informações de cada vez, execute todas as compilações em um contêiner ou máquina virtual.

    
por 22.02.2016 / 00:55
4

confira a opção hidepid para montagem / proc

On multi-user systems, it is often useful to secure the process directories stored in /proc/ so that they can be viewed only by the root user. You can restrict the access to these directories with the use of the hidepid option.
To change the file system parameters, you can use the mount command with the -o remount option. As root, type:

mount -o remount,hidepid=value /proc

Here, value passed to hidepid is one of:

    0 (default) — every user can read all world-readable files stored in a process directory.
    1 — users can access only their own process directories. This protects the sensitive files like cmdline, sched, or status from access by non-root users. This setting does not affect the actual file permissions.
    2 — process files are invisible to non-root users. The existence of a process can be learned by other means, but its effective UID and GID is hidden. Hiding these IDs complicates an intruder's task of gathering information about running processes. 

link para mais informações -

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/ch-proc.html
    
por 21.02.2016 / 07:30
1

Em vez de passar informações sobre a linha de comando, você poderia modificar seu programa para ler as informações em sua entrada padrão e executá-las por meio de um subprocesso que inicia com popen (um canal). Apenas certifique-se de fechar o pipe com pclose quando terminar.

Leitura adicional:

por 21.02.2016 / 12:49