Inventário de hardware e software

3

Objetivo

Colete informações de hardware e software dos computadores do laboratório, respeitando a privacidade dos alunos.

Tipo de informação para coletar

Exemplos:

  • Memória do sistema
  • Bash verion
  • Versão da JVM
  • Versão do sistema operacional (compilar / última atualização)

Base de usuários

  • OS X
  • Linux
  • FreeBSD

Tipo de informação para evitar coletar

  • número de série da CPU
  • Número de série do computador (por exemplo, saída de sudo lshw )
  • Endereço MAC da placa de interface de rede

Método de entrega

  • Os clientes ingressam na rede do laboratório e executam um script Bash como usuários simples (ou seja, não root )

Restrições

  • Nenhum plano de fundo dos processos
  • Nenhuma instalação de software personalizado fora dos pacotes de distribuição
  • Nenhuma leitura de dados pessoais, em qualquer lugar
  • Nenhum agente
  • Não é necessário programar automaticamente a reexecução mais tarde / data
  • Script para ser mantido em código aberto, os alunos podem consultá-lo a qualquer momento (transparência total)

Permissível para fazer

  • Bloqueie o acesso à rede até que o script seja executado ( aviso: código que já existe, mantendo a VLAN desligada até que o "relatório" tenha sido enviado de volta e validado ... não é necessário codificar isso )
  • Se apenas um usuário tiver 16 GB de RAM, embora isso o identifique de maneira exclusiva, tudo bem

Exemplo de comandos aceitáveis

printf -v operating_system \
          'OS X v%s (build %s)' \
          $(sw_vers -productVersion) \
          $(sw_vers -buildVersion)

ou

 local -r linux_kernel_version=$(uname -r)
 printf -v operating_system \
           'Linux (kernel %s)' \
           "$linux_kernel_version"
 if [[ -f /etc/issue ]]; then
   operating_system+=" $(cat /etc/issue | sed 's/ \n \l//g')"
 fi

Condição

Se esse tipo de script já estiver disponível em outro lugar, um perfil de usuário "higienizado" não contém nenhuma informação pessoal identificável, útil para um centro de suporte, selecionei o projeto errado. É muito melhor usar uma estrutura existente e direcionar as energias de meu aprendiz para outro lugar.

    
por Robottinosino 28.03.2013 / 18:59

4 respostas

2

aqui está uma lista de comandos que se encaixam nos critérios, o dpkg só funciona para sistemas baseados no debian. No Mac / FreeBSD não tenho certeza qual seria o melhor método, mas isso deve ser um bom começo. Nenhum deles precisa ser instalado em uma nova instalação do Ubuntu.

Isso fornece uma lista completa de pacotes instalados e versões com uma breve descrição.

dpkg -l >> pkg.info

lshw no Ubuntu tem uma opção para excluir informações confidenciais

lshw -sanitize

Isso mostra apenas as informações da versão no Ubuntu

lsb_release -a

A informação da memória

free

Minha recomendação é criar um script que salve todas essas informações em arquivos .info individuais, colocando-os em um arquivo tar para facilitar a coleta. depois do "dpkg -l" você pode colocar um padrão para combinar com pacotes específicos para os quais você quer informações. "dpkg -p" mostra informações muito detalhadas sobre um pacote específico como "dpkg -p bash"

    
por 28.03.2013 / 19:38
2

As coisas específicas que você está pedindo são simples o suficiente para coletar. Eu acho que você está pensando em algo mais complexo, mas a menos que você especifique o que eu não posso especular.

  • Memória do sistema

    $ free -h | gawk  '/Mem:/{print $2}'
    7.8G
    
  • Versão Bash

     $ bash --version | head -1 
     GNU bash, version 4.2.36(1)-release (x86_64-pc-linux-gnu)
    
     $ bash --version | head -1 | gawk '{print $4}'
     4.2.36(1)-release
    
  • Versão da JVM

    $ java -version 2>&1 | head -1
    java version "1.6.0_24"
    
    $ java -version 2>&1 | head -1 | gawk '{print $NF}' | sed 's/"//g'
    1.6.0_24
    

    O comando java -version imprime no erro padrão (STDERR), portanto, para analisar, precisamos redirecionar STDERR para STDOUT. No bash, isso é feito por 2>&1 .

  • Versão do sistema operacional (compilar / última atualização)

    $ uname -vo
    #1 SMP Debian 3.2.32-1 GNU/Linux
    

    Não tenho certeza do que você quer dizer com a última atualização. Atualização de quê? O kernel? Qualquer software?

Se você combinar tudo isso em um script bash, verá:

#!/usr/bin/env bash
echo "RAM              : 'free -h | awk  '/Mem:/{print $2}''
Bash version     : 'bash --version | head -1 | awk '{print $4}''
Java version     : 'java -version 2>&1 | head -1 | awk '{print $NF}' | sed 's/\"//g''
Operating System : 'uname -s'
OS version       : 'uname -v'"

Este script simples retorna essa saída no meu sistema:

RAM              : 7.8G
Bash version     : 4.2.36(1)-release
Java version     : 1.6.0_24
Operating System : Linux
OS version       : #1 SMP Debian 3.2.32-1
    
por 30.03.2013 / 03:03
1

Confira sistemas como OCS . Há vários por aí, pergunte ao Google por "inventário de software de hardware" ou algo parecido. Encobrir algo que você mesmo irá quebrar ou será menos que seguro.

    
por 28.03.2013 / 20:28
0
O

Chef , além de seu principal objetivo de implantar software e configuração, também mantém incidentalmente um banco de dados com as informações que você precisa procurando o hardware em todos os seus clientes.

Se você deseja obter essas informações de um cliente Chef, sem lidar com um servidor Chef e, em seguida, agregar as informações por meio de outro processo, o que você deseja é Ohai , que produz uma saída como esta: link

    
por 28.03.2013 / 19:05