Administração e Segurança em Sistemas Linux
Administração e Segurança em Sistemas Linux
Administração e Segurança em Sistemas Linux
O curso tem foco na distribuio Debian, considerada a mais estvel e muito tradicional, possibilitando um ambiente que permite ao aluno capacitar-se no somente para o Linux mais tambm para outros sistemas Like Unix;
Debian GNU/Linux
Conhecendo a estrutura Os discos e parties no aparecem necessariamente como unidades diferentes, como o C:, D:, E: do Windows. Tudo faz parte de um nico diretrio, chamado diretrio raiz ou simplesmente "/". Dentro deste diretrio temos no apenas todos arquivos e as parties de disco, mas tambm o CD-ROM, drive de disquete e outros dispositivos, formando a estrutura abaixo: /
/bin
/boot
/dev
/etc
/home
/lib
/mnt
/opt
/proc
/root
/sbin
/tmp
/var
Um inode um identificador nico que um arquivo recebe, nele contm uma lista com 12 blocos diretos de dados que o arquivo deve ter, se ele possui mais de 12 blocos, ele segue uma regra para gravar esses blocos no disco e poder achar mais tarde.
INSTALAO DO DEBIAN GNU/LINUX Antes de iniciar o processo de instalao necessrio configurar a BIOS para que a inicializao do computador ocorra pelo drive de CD-ROM; Leia sempre e atentamente todas as telas do processo de instalao. Elas trazem informaes importantes para a compreenso do processo; Insira o CD;
PARTICIONAMENTO DO DISCO RGIDO Observe o esquema de particionamento, as recomendaes direcionam a um esquema para particionar: Tabela de particionamento
/ /var /usr
/var
/usr
/tmp
/swap
/home
A identificao de discos rgidos no GNU/Linux feita da seguinte forma: /dev/hda1 | | || | | | | | | |_Nmero que identifica o nmero da partio no disco rgido. |_Letra que identifica o disco rgido (a=primeiro, b=segundo, etc...).
Customizando, compilando e instalando um kernel Linux em seu servidor Antes de tudo: Quais so os requerimentos mnimos de hardware? Varia de acordo com a arquitetura e a verso do kernel. Mas tenha em mente o seguinte para ter um sistema mnimo funcional: 16 MB de RAM (memria fsica), 100 MHz de clock de processamento e 100 MB de espao em disco (memria virtual). Qual o processador? Qual o clock? Qual a arquitetura? # cat /proc/cpuinfo # arch Qual a quantidade de memria? # cat /proc/meminfo
Baixando o pacote Baixe o pacote que contm o cdigo fonte mais atualizado do kernel Linux da srie 2.6 em http://www.kernel.org. Fazendo o download com o comando wget: # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.x.tar.bz2 Como superusurio (faa o login no sistema com o usurio root), descompacte e desempacote o arquivo assim: # tar xvjf linux-2.6.x.tar.bz2 -C /usr/src Crie o link simblico /usr/src/linux apontando para /usr/src/linux-2.6.x assim: # ln -sf /usr/src/linux-2.6.x /usr/src/linux Acesse /usr/src/linux assim: # cd /usr/src/linux Este ser o diretrio raiz de compilao, ou seja, o diretrio base para os passos seguintes.
Caso j exista uma compilao anterior, retorne ao padro os arquivos de configurao do kernel. # make mrproper Edite o arquivo Makefile para personalizar a verso de sua compilao. Altere a varivel EXTRAVERSION. VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = x EXTRAVERSION = -i386-mwsf-1 Quais so os Softwares que preciso para iniciar a compilao? # cat /usr/src/linux/Documentation/Changes Supondo que sua arquitetura de hardware seja i386, faa uma cpia do arquivo defconfig para o diretrio raiz de compilao com o nome .config: # cp -f /usr/src/linux/arch/i386/defconfig /usr/src/linux/.config
Execute a ferramenta de configurao assim: # make menuconfig ou # make xconfig (modo grfico) Aps a configurao do kernel, vamos compil-lo realmente. Para isto, execute o comando: # make Aps a compilao do kernel, vamos instalar os mdulos com o seguinte comando: # make modules_install Vamos copiar o kernel (bzImage) para o diretrio /boot. O arquivo est no diretrio de acordo com a arquitetura que voc estiver utilizando. Se voc compilou o kernel em um PC, o que mais comum, ento execute o comando para copiar: # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.x-i386-mwsf-1 Nomeie os arquivos de acordo com a verso do kernel que est compilando e de acordo com a arquitetura de hardware.
Agora vamos copiar o arquivo System.map para /boot: # cp /usr/src/linux/System.map /boot/System.map-2.6.x-i386-mwsf-1 Criando um link simblico para System.map: # ln -sf /boot/System.map-2.6.x-i386-mwsf-1 /boot/System.map Agora vamos copiar o .config para /boot: # cp /usr/src/linux/.config /boot/config-2.6.x-i386-mwsf-1 Vamos criar um arquivo initrd assim: # mkinitrd -o /boot/initrd-2.6.x-i386-mwsf-1.img 2.6.x A opo (-o arquivo) diz onde salvar o arquivo initrd gerado. A prxima opo de parmetro a verso do kernel que voc compilou. O initrd utilizado mais para kernel's genricos que acompanham as distribuies Linux. As distribuies so lanadas com kernel's genricos para suportar o maior nmero de hardware possvel.
Se for instal-lo na MBR, isso cria um diretrio /boot/grub. Depois disso, s rodar "update-grub" que ele gera um /boot/grub/menu.lst pra voc. Se voc j possui um menu.lst, faa o backup e remova-o, a no ser que voc tenha muitas modificaes nele. Edite o menu.lst, altere configuraes como: # kopt=root=/dev/hda3 ro # groot=(hd0,0) De acordo com seu sistema est configurado. Note que as linhas devem permanecer comentadas ("#" no comeo da linha), essas so metaconfiguraes. Depois de acertar isso, rode update-grub de novo e... Ele gera as entradas no menu do grub automaticamente, a partir das imagens de kernel instaladas e das meta-configuraes que voc fez. Reinicie o Sistema
Configurando e instalando um Boot Manager um programa que gerencia as parties que sero inicializadas em um sistema computacional. As verses atuais deste programa so instaladas no Setor de Boot Mestre (MBR - Master Boot Record) do disco rgido, fazendo com que um menu interativo seja apresentado toda a vez em que voc inicializa o micro, perguntando ao usurio que partio ele deseja para boot. LILO (Linux Loader) Instalando o LILO: # apt-get install lilo Editando seu arquivo de configurao: # nano /etc/lilo.conf
Aps o termino da instalao, execute o liloconfig. Editando o seu arquivo de configurao: # nano /etc/lilo.conf Adicione as seguintes linhas ao final do arquivo: -------------------------------------------------------------------------------------------------------image=/boot/[caminho da imagem gerada] label=Novo Kernel initrd=/boot/initrd-2.6.x-i386-mwsf-1.img read-only -------------------------------------------------------------------------------------------------------Para que as alteraes sejam lidas pelo sistema, precisamos dar o comando lilo: # lilo
GRUB GRUB (GRant Unified Bootloader) um outro gerenciador de boot, desenvolvido pelo projeto GNU, tambm muito utilizado pelos sistemas Linux. Assim como o Lilo, o Grub possui um arquivo centralizado para configurar o menu utilizado por ele. Vamos editar este no arquivo: # nano /boot/grub/menu.lst Adicione as seguintes linhas ao final do arquivo: ------------------------------------------------------------------------------------------------------Title Novo Kernel root (hd0,0) kernel /boot/vmlinuz-2.6.x-i386-mwsf-1 initrd /boot//initrd-2.6.x-i386-mwsf-1.img root=/dev/hdx1 ro savedefault boot ------------------------------------------------------------------------------------------------------Depois de alterar o arquivo, precisamos atualizar o GRUB na MBR: # grub-install /dev/hdx Aps a atualizao, reinicie o sistema.
Uso do Shell
SHELL Sistema Operacional GNU/Linux
O que um shell? Um shell um interpretador de comandos que analisa o texto digitado na linha de comandos e executa esses comandos produzindo algum resultado. Para que serve um shell? O shell pode ser considerado como um ponto a partir do qual voc pode iniciar todos os comandos do Linux. A maior parte das diferenas existentes entre os shells mais conhecidos (bash, csh, ksh e zsh) envolve facilidade de operao e tipos de configurao. Qual seu shell? # echo $SHELL Veja os tipos de shells: # cat /etc/shells
Usando o interpretador de comandos Abre uma nova sesso para um usurio: # login Tem como funo desconectar um usurio de uma determina sesso: # logout O objetivo encerrar uma sesso de trabalho: # exit Desligar: # halt # shutdown -h now # shutdown 18:00 # shutdown -h 10 # init 0 # shutdown <opes> <hora> <mensagem>
Reiniciar: # reboot # shutdown -r now # shutdown -r 15 now # init 6 Exibe a quantidade de tempo desde a ltima reinicializao do sistema: # uptime Pgina de manual e de informaes sobre os comandos: # man shutdown ou # info shutdown Processos em tempo real: # top Processos em execuo no sistema: # ps aux
Modificar data e hora do sistema: # date MMDDHHMMYY Arquitetura de mquina: # arch Mostra o diretrio corrente: # pwd Comando que muda um subdiretrio corrente a partir do diretrio atual: # cd [diretrio] # cd /root # cd - (volta ao ltimo diretrio acessado) # cd .. (acessa o diretrio anterior na rvore de diretrios)
Este comando acima mudar o diretrio atual de onde o usurio est. H tambm algumas abreviaes de diretrios no Linux para facilitar a identificao, estes so:
Abreviao . (ponto) .. (dois pontos) ~ (til) / (barra) - (hfen) Significado Diretrio atual Diretrio anterior Diretrio HOME do usurio Diretrio Raiz ltimo diretrio
Criar novo diretrio: # mkdir [diretrio] # mkdir free Remover diretrio vazio: # rmdir [diretrio] Remover um diretrio e todo o seu contedo (cuidado com este comando): # rm rf [diretrio] # rm rf / ( No faa isso! ) Linkando arquivos: # ln -s <arquivo_origem> <link simblico> Este comando usado para gerar links simblicos, ou seja, que se comportam como um arquivo ou diretrio, mas so apenas redirecionadores que mandam seu comando para outro arquivo ou diretrio, por exemplo: # ln -s /manual /home/linux-manual Este comando criar o link /home/linux-manual, se voc der um ls -l voc ver que o diretrio /home/linux-manual est apontando para /manual. Se voc for para o /home/linux-manual, voc na verdade estar no /manual, mas como um link, no h diferena.
Mostra os arquivos no formato longo em ordem inversa de data: # ls ltr # ls ltr [diretrio] l = longo t = date r = inversa Mostra o tamanho do diretrio em Megabytes # du msh # du msh [diretrio] du = a abreviao de se referir a disk usage (uso do disco). Indica o espao usado em disco pelos arquivos ou diretrios dados. Sintaxe: du [diretrio] Indica onde esto os binrios, fontes e pginas de manual de um comando dado: # whereis ls Indica o caminho completo para o comando dado: # which ls
geralmente utilizado para atualizar a hora e a data de um determinado arquivo. Caso este arquivo no exista, ele ser criado pelo touch, porm sem contedo algum. A sua sintaxe do comando touch : Sintaxe: touch [opes] [arquivos] # touch arquivo Atualizando hora e data de um arquivo: # touch -t YYYYMMDDhhmm arquivo Criando um arquivo: # : > [arquivo] # : > linux Criando vrios arquivos: # touch gnu linus unix hurd Movendo um arquivo: # mv /root/debra /home/user/ Movendo um arquivo para o diretrio local: /home/user# mv /root/debra .
Copiando um arquivo: # cp gnu /home/user/ # cp /root/gnu /home/user Copiando um arquivo para o diretrio local: /home/user# cp /root/gnu . Listando em detalhes todos os arquivos de um diretrio e exibe em cores: # ls -lah --color Simulao de resultado do comando: -rw-r--r-- 2 user user 100k 2007-02-24 11:00 gnu Exibe um calendrio: # cal Editando um arquivo: # nano gnu
#################################### Linux #################################### ## (0> ## Porque ## / \\ ## Amamos a ## \_/_ ##Liberdade! #################################### Linux Basic System Administration Tinha uma pedra no meio do caminho, No meio do caminho tinha uma pedra. Mostra o contedo de um arquivo binrio ou texto: # cat gnu Mostra o arquivo na ordem invertida de leitura: # tac ian Exibe as primeiras linhas de um determinado arquivo: # head [arquivo] # head n [arquivo] # head -3 gnu
Exibe as ltimas linhas de um determinado arquivo: # tail [arquivo] # tail n [arquivo] # tail -3 gnu Localiza um determinado arquivo especificado: # locate linus Atualiza a base de dados do locate: # updatedb O comando cat possibilita exibir o texto de um arquivo. Com o more existir uma pausa a cada tela cheia, possibilitando a leitura do arquivo. Exemplo: # cat [arquivo] | more # more [arquivo] Possibilita exibir o arquivo de maneira paginada, com opo de rolagem para trs e para frente: # cat /proc/cpuinfo | less Exibindo um arquivo em linhas numeradas: # nl gnu
Contador de linhas, palavras e bytes: # wc [opes] [arquivo] # wc gnu # wc -l gnu # wc -w gnu # wc -c gnu Visualiza de forma crescente as informaes do arquivo: # sort gnu Visualiza de forma decrescente as informaes do arquivo: # sort -r gnu Mostra informaes de um arquivo: # file [arquivo] # file gnu Indica o tipo de arquivo: # type [arquivo] # type gnu Mostra inode com atributos MAC (Modify, Access, Changes): # stat [arquivo] # stat gnu
Exibe a rvore de diretrios: /# tree Exibir informaes do sistema, tais como: o sistema operacional, verso do kernel, arquitetura da mquina e muitos outros: # uname [opes] # uname -r (verso de kernel) # uname -m (arquitetura de mquina) # uname -n (mostra o hostname) # uname -p (mostra o tipo de processador) # uname -v (mostra a data da verso do kernel) # uname -o (mostra o nome do Sistema Operacional) # uname -s (mostra o nome do Kernel) Mostra uma listagem de entrada e sada de usurios no sistema: # last Exibe o histrico: # history Logins mal sucedidos: # lastb
Alias Alias significa atalho, nome falso ou pseudnimo e pode ajudar em muito sua vida no Linux. Um alias para todos os usurios voc edita em: # vi /etc/bash.bashrc Um alias para root voc edita em: # vi /root/.bashrc Atualize o arquivo toda vez que voc adicionar contedo ao arquivo: source /etc/bash.bashrc Ou source /root/.bashrc Exemplos: alias opencd=eject; sleep 5s; eject -talias ls=ls --color -lah OBS: sempre editar ao final do arquivo.
Variveis O shell executado no sistema controlado por variveis de ambiente (espaos de memria que armazenam valores), as mesmas podem ser: Variveis locais Variveis globais Descrio de algumas variveis de ambiente, que so importantes para facilitar o entendimento: HOME - Esta varivel identifica o diretrio do usurio domstico, use o comando echo $HOME para saber qual o seu diretrio HOME. PATH - Esta a varivel de ambiente que define quais diretrios pesquisar e a ordem na qual eles so pesquisados para encontrar um determinado comando, para saber como o sistema faz esta pesquisa e quais diretrios ele procura um comando use o comando echo $PATH. OSTYPE - Essa varivel define o tipo de sistema operacional em uso. Para saber qual o sistema operacional em uso use o comando echo $OSTYPE. SHELL - Esta varivel identifica qual shell est sendo usado, use o comando echo $SHELL para saber qual o shell que o seu sistema est usando.
Variveis locais: $ set Variveis globais: $ env ou $ printenv Para atribuir um valor a uma varivel local. Exemplo: $ LINUX=free $ echo $LINUX free O comando echo exibe o valor de uma varivel de ambiente. Vamos verificar se a varivel aparece na relao de variveis locais. Exemplo: $ set | grep LINUX LINUX=free Agora vamos transformar esta varivel local uma varivel global. Para isso devemos usar o comando export: # export LINUX # env | grep LINUX LINUX=free
Para deletar uma varivel de ambiente, usamos o comando unset e para verificarmos se a varivel foi excluda usaremos o comando echo. Exemplo: # unset LINUX # echo $LINUX Agora vamos editar o nosso prompt de comando que representado pela varivel PS1. Podemos utilizar os seguintes argumentos para esta tarefa: Argumento Descrio \h Host da mquina. \W Diretrio corrente. \w Caminho completo do diretrio corrente. \u Nome do usurio. \t Hora do sistema. \d Data. \\$$ para usurio comum # para root. # export PS1="[\h@\w]\\$" [trabalho@~]# Observe que o prompt mudar, ele deve mostrar o host (trabalho), o caminho completo do diretrio corrente (~) e o tipo de caractere que faz referncia ao prompt.
Podemos criar variveis globais editando-as no arquivo /etc/profile: # vi /etc/profile Podemos criar variveis que so executadas somente no ambiente do usurio editando o arquivo ~/.bash_profile, sendo executadas automaticamente no login: # vi /home/user/.bash_profile
Introduo a programao em Shell Script Passos para criar um Shell Script Escolha um nome para o script Use apenas letras minsculas e evite acentos, smbolos e espao em branco. nome: sistema Escolha o diretrio onde colocar o script Para que o script possa ser executado de qualquer parte do sistema, movao para um diretrio que esteja no seu PATH. Para ver quais so estes diretrios, use o comando: echo $PATH Se no tiver permisso de mover para um diretrio do PATH, deixeo dentro de seu HOME. Crie o arquivo e coloque nele os comandos Use o editor de textos de sua preferncia para colocar todos os comandos dentro do arquivo. Coloque a chamada do Shell na primeira linha A primeira linha do script deve conter: # !/bin/bash para que ao ser executado, o sistema saiba que o Shell quem ir interpretar estes comandos.
Torne o script um arquivo executvel Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executvel: chmod +x sistema Problemas na execuo do Script "Comando no encontrado Descrio: O Shell no encontrou o seu script. Verifique se o comando que voc est chamando tem exatamente o mesmo nome do seu script. Lembrese que no Linux as letras maisculas e minsculas so diferentes, ento o comando "SISTEMA" diferente do comando "sistema". Caso o nome esteja correto, verifique se ele est no PATH do sistema. O comando echo $PATH mostra quais so os diretrios conhecidos, mova seu script para dentro de um deles, ou chameo passando o caminho completo.
Se o script estiver no diretrio corrente, chameo com um ./ na frente. Exemplo: $ ./sistema Caso contrrio especifique o caminho completo desde o diretrio raiz: $ /tmp/scripts/sistema "Permisso Negada" Descrio: O Shell encontrou seu script, mas ele no executvel. Use o comando; # chmod +x nome_escript para tornlo um arquivo executvel. "Erro de Sintaxe" Descrio: O Shell encontrou e executou seu script, porm ele tem erros. Um script s executado quando sua sintaxe est 100% correta. Verifique os seus comandos, o erro pode ser algum IF ou aspas que foram abertos e no foram fechados. A prpria mensagem informa o nmero da linha onde o erro foi encontrado.
Criando um Shell Script Aps ler e executar os passos para a criao de um Shell Script, voc j sabe o bsico para fazer um script em Shell do zero e executlo. O Shell Script que vamos criar serve para melhorar a sada de algumas aes. Executar vrios comandos seguidos resulta num bolo de texto na tela, misturando as informaes e dificultando o entendimento. Vamos trabalhar um pouco, fazendo a sada do script de uma forma legvel. O comando echo serve para mostrar mensagens na tela. Vamos criar uma mensagem de cada comando antes de execut-lo: Crie um diretrio: mkdir /tmp/shells Acesse o diretrio: cd /tmp/shells
Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma linha em branco ser exibida. Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma linha em branco ser exibida. Para o script ficar melhor, vamos colocar uma interao com o usurio, solicitando uma confirmao antes de executar os comandos:
O comando "read" leu o que o usurio digitou e guardou na varivel RESPOSTA. Logo em seguida, o comando "test" checou se o contedo dessa varivel era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha h vrios detalhes importantes: O contedo da varivel acessado colocandose um cifro "$" na frente; O comando test muito til para fazer vrios tipos de checagens em textos e arquivos; O operador lgico "&&", s executa o segundo comando caso o primeiro tenha sido OK; O operador inverso o "||".
Melhorando o script:
Alguns dos conceitos vistos no script anterior: Variveis As variveis so a base de qualquer script. dentro delas que os dados obtidos durante a execuo do script sero armazenados. Para definir uma varivel, basta usar o sinal de igual "=" e para ver seu valor, usase o "echo":
Ainda possvel armazenar a sada de um comando dentro de uma varivel. Ao invs de aspas, o comando deve ser colocado entre "$(...)", veja:
O comando "unset" apaga uma varivel. Para ver quais as variveis que o Shell j define por padro, use o comando: # env
Trabalhando com modos de inicializao Processo init O init o primeiro processo iniciado no Linux, logo aps a carga do kernel do sistema. Quando disparado, o init continua a carga do sistema, geralmente executando vrios scripts que iro verificar e montar sistemas de arquivos, configurar teclado e iniciar servidores, entre outras tarefas. O init utilizado no Linux permite que existam diversos nveis de execuo no sistema. Um nvel de execuo uma configurao de software do sistema que define quais processos devem ser inicializados e quais no devem, e tambm de que modo so inicializados. O administrador do sistema quem define qual ser o nvel de execuo em que o sistema e os processos sero executados.
Runlevels Toda a inicializao do sistema baseada em runlevels, ou seja, nveis de execuo. Os sistemas Linux possuem 6 runlevels:
Nveis de Execuo 0 1 2 3 4 5 6 Ao desligar o sistema modo monousurio, tambm chamado de modo single modo multiusurio, texto modo multiusurio, texto, com servios no utilizado modo grfico (X11) reinicializar o sistema
A descrio do sistema de runlevels normalmente pode ser encontrada no arquivo /etc/inittab, onde voc tambm poder alterar o runlevel padro do sistema. Alguns runlevels que merecem destaque so o 1, 3 e 5. O runlevel 1 nunca deve ser utilizado, a no ser para manuteno do sistema, devido a falta total de segurana. O runlevel 3 o mais comum.
O runlevel 5 o mais indicado para usurios novatos, que dependem completamente do sistema grfico para trabalhar. Com o uso do runlevel 5, gasta recursos de mquina, se a sua placa de vdeo estiver configurada incorretamente, o servidor X tentar forar a inicializao grfica e sua tela ocasionalmente ficar piscando, tornando impossvel qualquer comunicao com o sistema, o que tambm dificultar a reconfigurao da placa de vdeo. Editando o arquivo: # nano /etc/inittab
Recomendaes para configurao e armazenamento de dados H vrias vantagens, e algumas poucas desvantagens, em se usar um esquema de particionamento. Neste curso usaremos um aspecto do particionamento do disco rgido de um servidor Linux, tendo em vista aspectos de segurana. Observe o esquema de particionamento, as recomendaes direcionam a um esquema para particionar:
/
/var
/tmp
/home
Gerenciando hardware Parties montadas automaticamente no processo de boot: # cat /etc/fstab Mostra os sistemas de arquivos montados: # df # df -h Criando parties no HD: # cfdisk # fdisk Informaes sobre o hardware de sua mquina: # lspci # scanpci Informaes de processamento /proc: # cd /proc Exemplo: # cat /proc/bus/pci/devices Verificando uma placa: # lspci | grep audio
Verificando as irqs que esto sendo utilizadas: # cat /proc/interrupts Verificando endereos de I/O que esto sendo utilizados: # cat /proc/ioports Verificando informaes de processamento: # cat /proc/cpuinfo Sabendo qual a sua partio swap: # cat /proc/swaps Verificando detalhes de memria: # cat /proc/meminfo Configurando o teclado: # loadkeys -d br-abnt2 # loadkeys -d us Configurando o mouse serial: # apt-get install gpm # gpm -m /dev/ttySO -t ms3/dev/ttySO => corresponde a porta serial 1ms3 => o mouse que tem a barra de rolamento no meio Mouse PS/2: gpm -m /dev/psaux -t ms3
Montando um CDROM: # mount /dev/cdrom /media/cdrom Montando um pendrive: # mkdir /media/pen ; mount /dev/sda /media/pen Formatando uma partio que voc criou: # mkfs -t ext3 /dev/hda4 # mkfs.ext3 /dev/hda4 Montando a partio: # mkdir /mnt/aula ; mount -t ext3 /dev/hda4 /mnt/aula Desmontando uma partio: # umount /dev/cdrom # umount /mnt/aula
Trabalhando com mdulos Lista os mdulos em memria: # lsmod # cat /etc/modules Identifica um hardware: # lspci | grep -i ethernet Informaes do mdulo: # modinfo sis900 Verifica se tem suporte ao mdulo: # modprobe -l | grep -i sis900 Subindo o mdulo: # modprobe sis900 Verifica todo o relatrio se a placa subiu: # dmesg | grep sis900 Consulta se o mdulo est carregado: # lsmod | grep sis900 Adiconando o mdulo ao boot: # echo nomedomdulo >> /etc/modules
mdulos
SO
Vi
"vi" a sigla para "Visual Interface". A origem desse nome se deve ao seguinte fato: quando o vi foi criado (comeo da dcada de 80), no era comum existirem editores de textos como nos dias de hoje. Naquela poca, voc digitava um texto mas no podia v-lo. Em 1992, foi criado o vim (Vi IMitator), um clone fiel ao vi, porm com muitas outras funcionalidades, que s foram sendo adicionadas. Algum tempo depois, o vim passou a ser chamado de `Vi IMproved' (vi melhorado). Existe tambm o gvim, que o vim em modo grfico, com todas as funcionalidades do vim em pleno funcionamento, o que muda apenas o modo grfico mesmo. O vim possui vrios modos, ou seja, estados em que ele se encontra. So eles: modo de insero, comandos, linha de comando, visual, busca e reposio.
Modo de insero e de comandos Para identificar o modo (estado) do vim, basta visualizar o rodap da tela. Vamos prtica. Para executar o vim, utilize:
$ vi $ vi arquivo $ vi arquivo + $ vi arquivo +10 $ vi arquivo +/Clube_do_Hacker => Abre o vim vazio, sem nenhum arquivo e exibe a tela de apresentao. => Abre o arquivo de nome "arquivo". => Abre o arquivo de nome "arquivo", com o cursor no final do mesmo. => Abre o arquivo de nome "arquivo", com o cursor na linha 10. => Abre o arquivo de nome "arquivo", na primeira ocorrncia da palavra Clube_do_Hacker".
Para comear a escrever, pressione "i" em seu teclado. O vim entra em modo de insero, que voc comprova (como falado anteriormente) pelo rodap da tela, onde fica a seguinte marcao:
Suponha que voc j digitou o bastante, e quer salvar, por segurana. Pressione a tecla ESC para voltar em modo de comandos. E veja os comandos para salvar/sair:
:w :wq :x ZZ :w!. :q!. :wq! => Salva o arquivo que est sendo editado no momento. => Salva e sai. => Idem. => Idem. => Salva forado => Sai forado => Salva e sai forado.
Existe centenas de comandos no vim. A nica maneira de conhec-lo melhor, praticando bastante.
Administrao de usurios e grupos Verificando informaes do usurio: id [ opes ] [ usurio ] Onde: usurio => o usurio que desejamos ver a identificao, grupos primrios e complementares. Opes: -g, --group => Mostra somente a identificao do grupo primrio. -G, --groups => Mostra a identificao de outros grupos que pertence. -n, --name => Mostra o nome do usurio e grupo ao invs da identificao numrica. -u, --user => Mostra somente a identificao do usurio (user ID). -r, --real => Mostra a identificao real de usurio e grupo, ao invs da efetiva. Esta opo deve ser usada junto com uma das opes: -u, -g, ou -G.
Exemplos de utilizao: Sem parmetros, pegando as informaes do usurio atual: # id uid=1094(root) gid=500(root) grupos=500(root) Pegando somente o user id do usurio atual: # id u 1094 Verificando o ID, GID e grupos: # id [usurio]
Modificando o formulrio de informaes do usurio: chfn [usurio] [opes] Onde: usurio => Nome do usurio. opes: -f [nome] => Muda o nome completo do usurio. -r [nome] => Muda o nmero da sala do usurio. -w [tel] => Muda o telefone de trabalho do usurio. -h [tel] => Muda o telefone residencial do usurio. -o [outros] => Muda outros dados do usurio. Caso o nome que acompanha as opes (como o nome completo) contenha espaos, use "" para identific-lo. Exemplo: chfn -f "Nome do Usurio root" root Digite: # chfn [usurio]
Tornando-se outro usurio: # su [usurio] Permite o usurio mudar sua identidade para outro usurio sem fazer o logout. til para executar um programa ou comando como superusurio sem ter que abandonar a seo atual. Comando useradd Permite que se criem usurios conforme especificado em opes. Somente o superusurio poder utilizar este comando. useradd [ opes ] usurio Este comando ir alterar quais arquivos? Exemplos de utilizao Cria o usurio: # useradd [usurio] Cria o usurio e designa o diretrio /home/ como o diretrio pessoal deste: # useradd d /home/usurio [usurio]
Cria o usurio com o shell sh: # useradd s /bin/sh [usurio] Cria o usurio com o grupo root. # useradd g root [usurio] Cria o usurio com vrias informaes: # useradd d /home/usurio g users c ESTUDO LINUX usurio Comando adduser Criar um usurio padro: # adduser [usurio] Habilitar uma senha ou modificar senha: # passwd [usurio] O "passwd" formado por linhas onde cada uma um usurio. Ento vamos aprender a montar tais linhas: usurio:x:1001:100:Clube_do_Hacker:/home/usuario:/bin/bash Voc pode especificar outros parmetros para o usurio, como no comando a seguir: # adduser [usurio] -d /var/usuarios/usuario -s /dev/null
Modificando o nome de um usurio # usermod l usurio novo_nome Removendo um usurio: # userdel r usurio Configurando um usurio com poderes de root O root possui o UID e o GID igual a 0 (zero) e um usurio comum no. Se fizermos a mudana do UID e GID de um usurio para 0, ele ficar como o root. Vamos testar, modificando no arquivo /etc/passwd: usurio:x:1001:100:Clube_do_Hacker:/home/usuario:/bin/bash usurio:x:0:0:Clube_do_Hacker:/home/usuario:/bin/bash Trabalhando com grupos Criando um grupo (este comando escreve uma linha no arquivo /etc/group): # groupadd [grupo] Adicionando uma senha para o grupo: # gpasswd [grupo]
Mudando a propriedade de um arquivo: # chown novo-dono.novo-grupo arquivo Removendo um grupo: # groupdel [nome_grupo] Renomeando um grupo: # groupmod [novo_nome] [nome_antigo] Adicionando um usurio a um grupo: # adduser [usurio] [grupo] # gpasswd a [usurio] [grupo] Comando passwd # passwd [usurio] Para sua segurana, deve-se configurar o sistema para que: A senha deva ter no mnimo 6 caracteres; A senha deva ter no mnimo duas letras maisculas e/ou duas letras minsculas e pelo menos um dgito ou caractere especial; So aceitos somente os caracteres ASCII padro de cdigos 0 a 127; A senha deve diferenciar do nome da conta (obrigatrio); A nova senha deve diferenciar da senha velha em pelo menos trs caracteres. As regras acima no se aplicam ao superusurio.
Criando quota para usurios Verificar como est montado o /home: # mount Instalar o pacote quota: # apt-get install quota As quotas so especificadas em parties e no em diretrios. Devese editar o arquivo /etc/fstab e configurar a partio que deve ter suporte,da seguinte maneira:
Devemos entrar no ponto de montagem da partio especificada (/home) e criar dois arquivos: Gerencia quotas para os usurios: /home# : > quota.user Gerencia quotas para os grupos: /home# : > quota.group necessrio mudar as permisses dos arquivos que foram criados, de maneira que s o root tenha permisso de leitura e gravao sobre eles, entramos ento com os seguintes comandos: /home# chmod 600 quota.user /home# chmod 600 quota.group recomenda-se que salve suas aplicaes e reinicie o sistema. Entre com o comando: # shutdown -r now
Para ativar o sistema de quotas de disco, ento entramos com o seguinte comando: # quotaon -v /home Para verificar se o sistema de quotas est ativo, consulte o status de quota para a partio que est sendo trabalhada: # mount a # repquota -v a Criando o usurio para o qual ser definida a quota: # adduser user1 Definindo quanto do sistema de arquivos cada usurio poder utilizar. O comando para configurar quotas o: # edquota -u [usuario]
Definindo quotas para grupos: # edquota -g [grupo] Para consultar informaes sobre quotas na partio, use: quota -u [usuario] quota -g [grupo] # quota -u user1 Exibindo um sumrio de quotas ativas na partio: # repquota -v /home Para saber mais detalhes avanados sobre o uso de quotas nas parties: # quotastats
A permisso de acesso protege o sistema de arquivos Linux do acesso indevido de pessoas ou programas no autorizado. Donos, grupos e outros usurios:
Dono Outros Usurios => a pessoa que criou o arquivo ou o diretrio. O nome do dono do arquivo/diretrio o mesmo do usurio usado para entrar no sistema GNU/Linux. Somente o dono pode modificar as permisses de acesso do arquivo. => a categoria de usurios que no so donos ou no pertencem ao grupo do arquivo. => Para permitir que vrios usurios diferentes tivessem acesso a um mesmo arquivo (j que somente o dono poderia ter acesso ao arquivo), este recurso foi criado. Cada usurio pode fazer parte de um ou mais grupos e ento acessar arquivos que pertenam ao mesmo grupo que o seu (mesmo que estes arquivos tenham outro dono).
Grupo
s=Sx
s=Sx
t=T x
Obs: X - Se voc usar X ao invs de x, a permisso de execuo somente afetada se o arquivo j tiver permisses de execuo. Em diretrios ela tem o mesmo efeito que a permisso de execuo x.
Crie o arquivo hoje e liste suas propriedades: -rw-r--r-- 1 root root 0 2006-12-05 10:09 hoje Modificando as permisses do arquivo: chmod u-rwx,g+w,o+x hoje ----rw-r-x 1 root root 0 2006-12-05 10:09 hoje chmod g-w,o-x,u+r hoje -rw-r--r-- 1 root root 0 2006-12-05 10:09 hoje chmod a-rwx hoje ---------- 1 root root 0 2006-12-05 10:09 hoje Modo Octal: chmod 421 hoje -r---w---x 1 root root 0 2006-12-05 10:09 hoje chmod 000 hoje ---------- 1 root root 0 2006-12-05 10:09 hoje chmod 777 hoje -rwxrwxrwx 1 root root 0 2006-12-05 10:09 hoje
Crie o diretrio aula e liste suas propriedades: drwxr-xr-x 2 root root 1024 2006-12-05 10:22 aula Modificando as permisses do arquivo: chmod u-rwx,g-rwx,o-rwx aula d--------- 2 root root 1024 2016-07-04 10:22 aula chmod a-rwx aula d--------- 2 root root 1024 2016-07-04 10:22 aula chmod a+rwx aula drwxrwxrwx 2 root root 1024 2016-07-04 10:22 aula Modo Octal: chmod 754 hoje drwxr-xr-- 2 root root 1024 2016-07-04 10:22 aula chmod 000 hoje d--------- 2 root root 1024 2016-07-04 10:22 aula chmod 777 hoje drwxrwxrwx 2 root root 1024 2016-07-04 10:22 aula OBS: Mas somente as trs permisses bsicas (rwx) no do toda flexibilidade para controlar acesso aos arquivos e diretrios.
Permisses de acesso Especiais Em adio as trs permisses bsicas (rwx), existem permisses de acesso especiais que afetam arquivos executveis e diretrios: rwsrwsrwt SUIDBIT (set user id) = setuid SGIDBIT (set group id) = setgid STICKBIT (Stick bit) O controle de acesso em arquivos e diretrios a segurana fundamental para qualquer sistema multiusurios. Os sistemas de arquivos nativos do Linux programam controle de acesso utilizando algumas propriedades dos arquivos/diretrios.
SUIDBIT (set user id) = setuid => A propriedade SUID somente para arquivos executveis e no tem efeito em diretrios. => Nas permisses bsicas, o usurio que executou o programa dono do processo. Mas em arquivo executvel com a propriedade SUID aplicada, o programa rodar com o ID do dono do arquivo, no com o ID do usurio que executou o programa. => Normalmente o usurio dono do programa executvel tambm dono do processo sendo executado. Quando um arquivo/programa executvel tem o controle de acesso SUID, ele executado como se ele estivesse iniciado pelo dono do arquivo/programa. => A permisso de acesso especial SUID pode aparecer somente no campo Dono.
Trabalhando com o SUID: Exemplo: ifconfig # ls -lah /sbin/ifconfig -rwxr-xr-x 1 root root 57K 2004-04-22 18:27 /sbin/ifconfig No terminal root: #ifconfig #ifconfig eth0 up obs: ls -lah tamanhos da cpia no formato readable humano (por exemplo, 1K 234M 2G) Como usurio: lammer@debian:/sbin$ ./ifconfig bash: ifconfig: command not found lammer@debian:/sbin$ ./ifconfig eth0 up SIOCSIFFLAGS: Permisso negada lammer@debian:/sbin$ ./ifconfig eth0 down SIOCSIFFLAGS: Permisso negada
Como root: # chmod 4755 /sbin/ifconfig Aplicando a propriedade SUID em um arquivo executvel utilizando formato simblico (s): # chmod u+s arquivo.x # ls -lah arquivo.x -rwsr-xr-x 1 root sala 0 2006-12-05 22:57 arquivo.x Aplicando a propriedade SUID em um arquivo executvel utilizando formato octal (4): # chmod 4750 arquivo.x # ls -lah arquivo.x -rwsr-x--- 1 root sala 0 2006-12-05 22:57 arquivo.x Retirando SUID: # chmod u-s arquivo.x # ls -lah arquivo.x -rwxr-x--- 1 root sala 0 2006-12-05 22:57 arquivo.x
SGIDBIT (set group id) = setgid => A propriedade SGID tem a mesma funo que o SUID para arquivos executveis. Mas a propriedade SGID tem um efeito especial para os diretrios. => SGID aplicado em um diretrio, os novos arquivos que so criados dentro do diretrio assumem o mesmo ID de Grupo do diretrio com a propriedade SGID aplicado. => A permisso de acesso especial SGID pode aparecer somente no campo Grupo. Exemplo: Se no diretrio /home/user1 tem o grupo sala e tem o SGID habilitado, ento todos os arquivos dentro do diretrio /home/user1 sero criados com o grupo sala. drwxr-xr-x 2 user1 sala 4096 2006-12-05 08:52 user1 Este um importante atributo para uma equipe, assumindo que todos os arquivos compartilhados devem ter o mesmo grupo.
Aplicando a propriedade SGID em um diretrio executvel utilizando formato simblico (s): # chmod g+s /home/user1 # ls --color -lah /home/user1 | more drwxr-sr-x 2 root sala 4096 2006-12-05 17:54 . Aplicando a propriedade SGID em um diretrio executvel utilizando formato octal (2): # chmod 2750 /home/user1 # ls -lah /home/user1 drwxr-s--- 2 root sala 4096 2006-12-05 17:54 . Retirando SGID: # chmod g-s /home/user1 # ls -lah /home/equipe drwxr-xr-x 2 root sala 4096 2006-12-05 17:54 .
Um outro exemplo: # chmod g+s /home # ls -ld /home drwxrwsr-x 6 root staff 4096 2016-07-04 08:56 /home # touch /home/arquivo # ls -l /home/arquivo -rw-r--r-- 1 root staff 0 2016-07-04 14:18 /home/arquivo
STICKBIT (Stick bit) Aplicando STICK => Em arquivos executveis, a propriedade STICK faz com que o sistema mantenha uma imagem do programa em memria depois que o programa finalizar. De fato, essa capacidade aumenta o desempenho, pois ser feito um cache do programa para a memria e da prxima vez que ele for executado, ser carregado mais rpido. => Em diretrios, a propriedade STICK impede que outros usurios deletem ou renomeam arquivos dos quais no so donos. => Com o STICK, o diretrio estar em modo append-only (somente incremente). => Sendo assim, somente o usurio que Dono do arquivo, poder deletar ou renomear os arquivos dentro de um diretrio com a propriedade STICK aplicada. => A permisso especial Stick pode ser especificada somente no campo outros usurios das permisses de acesso.
Exemplo bem prtico: # ls l # chmod 0777 /tmp # ls -ld /tmp drwxrwxrwx 14 root root 1024 2016-07-04 14:40 /tmp # touch /tmp/arq_novo No teminal como usurio tente remover o arquivo: $ rm /tmp/arq_novo -f ou rm -rf /tmp/arq_novo Voltando o STICK: # chmod 1777 /tmp drwxrwxrwt 14 root root 1024 2016-07-04 14:40 /tmp Crie novamente o arquivo e tente remover: # touch /tmp/arq_novo $ rm /tmp/arq_novo -f ou rm -rf /tmp/arq_novo
Exemplo: No diretrio /tmp, todos os usurios devem ter acesso para que seus programas possam criar os arquivos temporrios, mas nenhum pode apagar arquivos dos outros. Ento. necessrio que a propriedade STICK seja feita no diretrio /tmp. drwxrwxrwt 14 root root 1,0K 2016-07-04 13:15 tmp Aplicando a propriedade Stick em um arquivo executvel utilizando formato octal (1): # chmod 1750 programa.x # ls -lah programa.x -rwxr-x--T 1 root root 2,9M 2006-09-26 23:51 programa.x Aplicando a propriedade Stick em um arquivo executvel utilizando formato simblico (t): # chmod o+t programa.x # ls -lah programa.x -rwxr-x--T 1 root root 2,9M 2006-09-26 23:51 programa.x
Aplicando a propriedade Stick em um diretrio utilizando formato simblico (t): # chmod o+t /tmp # ls -lah /tmp drwxrwxrwt 8 root root 264 2006-09-26 23:22 . Apicando a propriedade Stick em um diretrio utilizando formato octal (1): # chmod 1777 /tmp # ls -lah /tmp drwxrwxrwt 8 root root 264 2006-09-26 23:22 . Retirando Stick: # chmod o-t /tmp # ls -lah /tmp drwxrwxrwx 8 root root 264 2006-09-26 23:22 .
Manipulao de pacotes
Manipulao de pacotes (programas) Gerenciadores de pacotes: dselect dpkg apt-get tasksel aptitude
Gerenciando pacotes com o dpkg: Fazer uma instalao a partir do CD-ROM: # cd /cdrom/pool/main ; ls color # dpkg -i nome_do_pacote ou caminho_do_pacote
Listar todos os pacotes que esto instalados no formato .deb: # dpkg -l | more Onde sero instalados todos os arquivos de um determinado programa: # dpkg -c /cdrom/pool/main/m/mozilla/nome_do_pacote.deb | more Para obter a listagem de arquivos de pacotes j instalados no sistema, use o comando: # dpkg -L arquivo Remover um programa e todos os arquivos: # dpkg - -purge nome_do_programa O dpkg (Debian Package) o programa responsvel pelo gerenciamento de pacotes nos sistemas Debian. Sua operao feita em modo texto e funciona atravs de comandos, assim caso deseje uma ferramenta mais amigvel para a seleo e instalao de pacotes, prefira o dselect (que um front-end para o dpkg) ou o apt.
Configurando pacotes desconfigurados Pacotes esto desconfigurados quando, por algum motivo, a instalao do mesmo no foi concluda com sucesso. Pode ter faltado alguma dependncia, acontecido algum erro de leitura do arquivo de pacote, etc. Quando um erro deste tipo acontece, os arquivos necessrios pelo pacote podem ter sido instalados, mas os scripts de configurao ps-instalao no so executados. # dpkg --configure [NomedoPacote] Mostrando a lista de pacotes do sistema: # dpkg --get-selections Gerenciando pacotes com o apt: Instalar um programa: # apt-get install mozilla Arquivo onde ficam armazenados todos os mirros (sources) de busca de pacotes: /etc/apt/souces.list
Para usar outro tipo de source, voc pode inserir o caminho de pesquisa no arquivo. O mesmo pode ter uma ou mais sources: # apt-setup Ao inserir uma nova linha no arquivo, pode-se atualizar a busca de pacotes no apt: # apt-update Para saber se um determinado que voc quer instalar est disponvel no cache do apt: # apt-cache search gaim OBS: Todo pacote instalado via apt-get install, armazena um cache no seguinte caminho: /var/cache/apt/archives. Vamos limpar esse cache: # apt-get clean Fazer uma atualizao de pacotes usando um nico comando: # apt-get upgrade Removendo um programa com: # apt-get remove - -purge gimp
O comando que adiciona automaticamente uma linha para cada CD no arquivo /etc/apt/sources.list e atualizar a lista de pacotes em /var/state/apt/lists: # apt-cdrom add Verificando pacotes corrompidos A correo feita automaticamente. A lista de pacotes tambm atualizada quando utiliza este comando: # apt-get check Corrigindo problemas de dependncias e outros problemas: # apt-get install -f pacote # apt-get -f install pacote # dpkg -i - -force-all *.deb Baixa o pacote, mas no instala: # apt-get install -d pacote Tasksel # tasksel Aptitude # aptitude
Procedimentos de backup
------------------------------------------------------------------------------------------------------1 parte GZIP ------------------------------------------------------------------------------------------------------Pacotes GZIP Empacotando, compactando e descompactando. Criando um diretrio e acessando este diretrio: # mkdir /tmp/backup # cd /tmp/backup Empacotando o contedo do diretrio /home/user: /tmp/backup# tar cvf backup1.tar /home/user /tmp/backup# file backup1.tar Compactar usando o GZIP: /tmp/backup# time gzip backup1.tar /tmp/backup# ls lh sada: backup1.tar.gz Descompactando o arquivo: /tmp/backup# time gunzip backup1.tar.gz /tmp/backup# ls lh sada: backup1.tar
PROCEDIMENTOS DE BACKUP
------------------------------------------------------------------------------------------------------1 parte BZIP2 ------------------------------------------------------------------------------------------------------Pacotes BZIP2 Empacotando, compactando e descompactando. Criando um diretrio: # mkdir /tmp/backup # cd /tmp/backup Empacotando o contedo do diretrio /home/user: /tmp/backup# tar cvf backup1.tar /home/user /tmp/backup# file backup1.tar Compactar usando o BZIP2: /tmp/backup# time bzip2 backup1.tar /tmp/backup# ls lh sada: backup1.tar.bz2 Descompactando o arquivo: /tmp/backup# time bunzip2 backup1.tar.bz2 /tmp/backup# ls lh sada: backup1.tar
------------------------------------------------------------------------------------------------------2 parte GZIP ------------------------------------------------------------------------------------------------------Pacotes GZIP (Empacotando / Compactando e Descompactando / Desempacotando) Criando um diretrio:# mkdir /tmp/backup ; cd /tmp/backup EMPACOTANDO e COMPACTANDO o contedo do diretrio /etc: /tmp/backup# tar cvzf backup2.tar.gz /etc ; file backup2.tar.gz Crie um diretrio com o nome gzip: /tmp/backup# mkdir gzip DESCOMPACTANDO E DESEMPACOTANDO o contedo: /tmp/backup/gzip# tar xvzf /tmp/backup/backup2.tar.gz DESCOMPACTANDO E DESEMPACOTANDO o contedo, direcionando a um diretrio: # tar xvzf /tmp/backup/backup2.tar.gz -C /tmp/backup/gzip Verificando o arquivo: /tmp/backup/gzip# ls -lh Verificando o tamanho: /tmp/backup/gzip# du -hs caminho Verificando o tamanho do diretrio original: /tmp/backup/gzip# du -hs /etc
PROCEDIMENTOS DE BACKUP
------------------------------------------------------------------------------------------------------2 parte BZIP2 ------------------------------------------------------------------------------------------------------Pacotes BZIP2 (Empacotando / Compactando e Descompactando / Desempacotando) Criando um diretrio: # mkdir /tmp/backup ; cd /tmp/backup EMPACOTANDO e COMPACTANDO o contedo do diretrio /etc: /tmp/backup# tar cvjf backup3.tar.bz2 /etc ; file backup3.tar.bz2 ; ls -lh Crie um diretrio com o nome bzip2: /tmp/backup# mkdir bzip2 DESCOMPACTANDO E DESEMPACOTANDO o contedo: /tmp/backup/bzip2# tar xvjf /tmp/backup/backup3.tar.bz2 DESCOMPACTANDO E DESEMPACOTANDO o contedo, direcionando a um diretrio: # tar xvjf /tmp/backup/backup3.tar.bz2 C /tmp/backup/gzip ; ls -lh Verificando o tamanho: /tmp/backup/bzip2# du -hs caminho Verificando o tamanho do diretrio original: /tmp/backup/bzip2# du -hs /etc
PROCEDIMENTOS DE BACKUP
Compactador compatvel com o Windows: # gzip backup1.tar Descompactador de pacotes .zip: # unzip backup.zip Criando uma compactao zip: # find /etc -name *.conf -print | xargs zip backup4 -@ find /etc -name *.conf -print => Procura no diretrio /etc e sub-diretrios um arquivo/diretrio, no caso arquivos chamado .conf e otimiza a procura. xargs zip backup4 -@ => o xargs resolve se ocorrer algum problema, e o zip o compactador. Outra maneira: # find /etc | cpio -pdv backup Outra maneira: # find | xargs zip backup
Trabalhando com o dump Fazendo um backup de /tmp, com o comando dump: # dump -0 -f backupdump /etc Restaurando este backup: # restore rf backupdump Trabalhando com o comando cpio Fazer um backup de todas as bibliotecas em /lib que terminam com 0, para dentro de /tmp/backup/bacana (o diretrio gerado na execuo do comando), usando o cpio: # find /lib -name *.0 | cpio -pdv /tmp/backup/bacana
Compilao de programas O procedimento de compilao de um programa parte do princpio que, atravs do cdigo fonte do programa disponvel para uso, qualquer um possa ter acesso ao cdigo e gerar o binrio final a partir dele. O procedimento de compilao sempre bem parecido para todas as aplicaes, porm sempre que for compilar algum programa devemos consultar o arquivo INSTALL que sempre est presente junto com o cdigo fonte. Durante este trabalho vamos precisar dos seguintes programas prinstalados: gcc g + + make libc6-dev glibc-devels (algumas outras distribuies usam)
Incio
documenta o
make
FIM
Se tiver o ./configure, rode o configure. Todos os recursos de compilao esto no makefile. Vamos baixar o nmap (utilitrio de rede para verificao e anlise de portas. Baixe o cdigo fonte, que est disponvel em www.insecure.org. Descompactando o pacote: # tar xvjf nmap-verso.tar.bz2 C /usr/local Acessando o diretrio dos fontes: # cd /usr/local/nmap-verso Comeando a compilao: Executar o script configure, este passa parmetros de como deve ser compilado o programa. Gera o arquivo Makefile, que serve como referncia para o comando make. Digite: # ./configure Comando para compilar o pacote: # make Comando opcional para testar a integridade dos binrios compilados: # make check
Instalar o programa, os arquivos de dados e a documentao: # make install Remover arquivos binrios e de objeto do diretrio fonte que no sero mais necessrios: # make clean O programa foi compilado. Agora s testar: # nmap localhost
Servidor X Window
X Window System a interface grfica mais utilizada em ambientes UNIX. O pacote necessrio para uso desta interface grfica pode ser encontrado diretamente no site oficial http://www.xfree86.org. Instalando o Xfree86 via apt-get: # apt-get install x-window-system-core Comando de instalao do X.org (projeto de continuao do Xfree): # apt-get install xserver-xorg xlibs xlibs-data Fazendo a configurao do Xfree86: # xf86config Ou # XFree86 configure Fazendo a configurao no X.org: # Xorg -configure O comando XFree86 configure gera em /root, um arquivo com o nome XF86Config.new. Vamos adicionar algumas configuraes neste arquivo: Configurando o arquivo /root/XF86Config.new:
# Configurao geral do servidor, tela e dispositivos de entrada e sada: Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection # Localizao dos mdulos e das fontes que sero utilizadas pelo servidor grfico: Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" ModulePath "/usr/X11R6/lib/modules" FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" FontPath "/usr/X11R6/lib/X11/fonts/CID/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" EndSection
# Informaes dos mdulos que sero carregados pelo servidor: Section "Module" Load "dbe" Load "dri" Load "extmod" Load "glx" Load "record" Load "xtrap" Load "speedo" Load "type1" EndSection # Configuraes do teclado: Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" --------------------------------------- padro ABNT2-------------------------------------------Option xkbmodel abnt2 Option xkblayout PS/2 -----------------------------------padro internacional (Americano)------------------------Option xkbmodel pc102 Option xkblayout us_intl EndSection
# Configurao do mouse: Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/mouse" --------------------------------------- mouse PS/2 ---------------------------------------------Option Protocol PS/2 Option Device /dev/psaux ------- se for com rodinha, modifique a ltima linha: Option Device /dev/input/nice EndSection
# Especificaes do monitor, como taxa de atualizao vertical e freqncia horizontal de sincronizao: Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" Horizsync 31.5 48.5 Vertrefresh 50 - 90 EndSection # Informao do driver atualizado da placa de vdeo: Section "Device" ### Available Driver options are:### Values: <i>: integer, <f>: float, <bool>: "True"/"False", ### <string>: "String", <freq>: "<f> Hz/kHz/MHz" ### [arg]: arg optional #Option "HWcursor" # [<bool>] #Option "NoAccel" # [<bool>] Identifier "Card0" Driver "vmware" VendorName "VMWare Inc" BoardName "Unknown Board" BusID "PCI:0:15:0" EndSection
# Seo de configurao da resoluo e nmero de cores a ser utilizado: Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaulDepth 24 SubSection "Display" Depth 1 EndSubSection SubSection "Display" Depth 24 Modes 1024x768 800x600 EndSubSection EndSection
Para verificar se o servidor grfico foi configurado corretamente, digite: #X Para configurarmos o servidor X precisamos editar o arquivo que controla quem ir acessar o servidor X: # vi /etc/X11/xdm/Xacess Inclua a seguinte linha no arquivo: 100.100.100.0 Isto permite que todas as mquinas desta rede podem acessar o servidor. Reiniciando o servio do xdm: # /etc/init.d/xdm restart
U S U R I O S
Instalando o wmaker, gnome e kde: # apt-get install wmaker # apt-get install gnome # apt-get install kde OBS: Para alternar a configurao da tela do ambiente grfico, use as teclas: CTRL ALT + ou CTRL ALT Atravs do modo texto, possvel escolher o ambiente grfico que ser usado. Para tal ao, digite o comando: # echo exec startgnomesession > ~/.xinitrc Ou # echo exec startkde > ~/.xinitrc Ou # echo exec startwmaker > ~/.xinitrc Para executar a interface grfic adotada. Digite: # startx
Configurando uma rede Descobrindo o modelo da placa de rede: # lspci Verificando se h o mdulo para esta interface: # ls /lib/modules/`uname r`/kernel/drivers/net Caso precise levantar o mdulo, digite o comando: # modprobe [mdulo] Para verificar se o mdulo est carregado, digite: # lsmod | grep [mdulo] Informaes de endereamento IP: # ifconfig Eliminando as configuraes de rede: # ifconfig eth0 down Exibindo a configurao: # ifconfig Subindo o service de rede: # ifconfig eth0 up
Configurando o IP, Mscara e Broadcast: # ifconfig eth0 100.100.100.x netmask 255.0.0.0 broadcast 100.100.100.255 Verificando se h conectividade: # ping 100.100.100.x O ifconfig dinmico, para que as configuraes de endereamento IP sejam carregadas durante o boot. O arquivo de configurao : # vi /etc/network/interfaces Verificar daemon networking, para garantir boot do servio: # ls /etc/rcS.d Configurando o nome da mquina: # vi /etc/hostname Configurando o nome da mquina e o nome de domnio: # vi /etc/hosts Verificar domnio que est sendo utilizado: # hostname -f Roteamento: # route
Configurando o roteamento: # route add default gw 100.100.100.1 Configurando Localidade Mostrar como est configurado atualmente: # locale Para configurar sua localidade corretamente: # dpkg-reconfigure locale Primeira tela: pt_BR ISO-8859-1 Segunda tela: pt_BR Testando: ifconfig # LANG=us (modificando a linguagem) # ifconfig Configuraes relacionadas localidade: # cat /etc/environment Configuraes relacionadas ao fuso horrio: # cat /etc/timezone Configurar data: # date MMDDhhmmYY Atualizar a hora da bios de acordo com a hora do S.O: # hwclock -w
TELNET No Telnet as informaes trafegam sem criptografia (clear text). Se rodar um sniffer no mesmo seguimento de rede, ser possvel olhar todos os dados. # dpkg -l | grep telnet # apt-get install telnet-server # dpkg -l | grep telnet ii telnet 0.17-29 The telnet client ii telnetd 0.17-29 The telnet server Habilitando o telnet, que o mesmo controlado pelo super daemon de rede inetd. # vi /etc/inetd.conf #:OTHER: Other services #<off># netbios-ssn stream tcp nowait root /usr/sbin/tcpd /usr/sbin/smbd
telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd/usr/sbin/in.telnetd
Devemos subir o servio agora: # cd /etc/init.d/ /etc/init.d# ./inetd stop /etc/init.d# ./inetd start Faa um check list, para verificar se tudo est OK. Agora s fazer um teste no servidor telnet do colega. #adduser telnetx senha: x Por padro o telnet no permite conexes como root. Vamos acessar o computador do colega: # telnet ip_do_colega Se for usar o telnet no Sistema. Garanta que o servio est na inicializao: # ls /etc/rc2.d
SSH um outro tipo de servidor remoto fde LOGIN. responsvel pela autenticao segura e criptografia de dados, alm de logins e execuo de arquivos remotamente. # dpkg -l | grep ssh # apt-get install ssh Detalhes do arquivo de configurao: # vi /etc/ssh/sshd_config Port 22 Protocol 2 KeyRegenerationInterval 3600 LoginGraceTime 600 PermitRootLogin yes RSAAuthentication yes PubkeyAuthentication yes PermitEmptyPasswords no Passwordauthentication yes
Start no servio: # /etc/init.d/ssh start Conectando no servidor SSH: # ssh <hostname> # ssh usuario@hostname # ssh -l usuario ip_do_servidor Tambm se pode executar comandos remotamente: # ssh -l usuario 100.100.100.x du -hs /etc Fazendo cpia de dados: Fazendo um download de arquivos do servidor: # scp usuario@ip_do_servidor:/diretrio_remoto/arquivo diretorio_local Fazendo um upload do servidor: # scp arquivo usuario@ip_do_servidor:/diretorio_remoto # scp /tmp/teste usuario@100.100.100.35:/home/usuario Fazendo um download do diretrio remoto do SSH: # scp -r usuario@ip_do_servidor:/diretorio_remoto diretorio_local # scp -r usuario@100.100.100.35 :/tmp /root Fazendo um upload no diretrio no servidor. # scp -r diretorio_local usuario@ip_do_servidor:/diretorio_remoto
SSH com Chaves Gera chaves de autenticao RSA com o protocolo SSH: #ssh-keygen -t rsa Podemos deixar uma palavra para permitir acesso no servidor remoto. Sero gerados dois arquivos no home do usuario, no subdiretorio .ssh, so eles: id_rsa e id_rsa.pub. O primeiro chave privada. O segundo deve ser enviado via canal para o servidor de acesso, pois o arquivo de chave pblica: # scp ~/.ssh/id_rsa.pub usuario@ip:.ssh/ O usuario deve ser o mesmo no servidor do cliente. Acesse o servidor SSH com o usurio, e coloque sua chave pblica no arquivo, onde o servidor mantm o controle das chaves autorizadas: # ssh usuario@ip # cd .ssh/ # cat id_rsa.pub >> authorized_keys Agora s logar no servidor noprmalmente e ver se consegue logar sem senha: # ssh usuario@ip
TCPWrappers Para liberar o acesso de um determinado servio para todos da rede, necessrio adicionar a seguinte linha no arquivo /etc/hosts.allow: in..telnetd:ALL ------------------------------------------------------------------------------------------------------Bloqueando o acesso a um servio, para todos da rede 192.168.100.0 menos para o ip 192.168.100.100: Adicione a seguinte linha no arquivo /etc/hosts.deny: sshd: 192.168.100. EXCEPT 192.168.100.100 ------------------------------------------------------------------------------------------------------O arquivo /etc/hosts.allow tem preferncia de leitura em relao ao /etc/hosts.deny. Insira nos dois arquivos, a seguinte linha: in.sshd:ALL O que vai acontecer?
Agendamento de tarefas (cron) O cron um daemon que permite o agendamento da execuo de um comando/programa para um determinado dia/ms/ano/hora. muito usado em tarefas de arquivamento de logs, checagem da integridade do sistema e execuo de programas/comandos em horrios determinados, mas isso no impede que ele possa ser usado para tarefas simples. Utilize o comando at para agendar a seguinte tarefa: listar todos os arquivos do diretrio /root e direcionar a sada para o arquivo /tmp/arquivo.txt, utilize o comando date para saber a hora e data do sistema e coloque esta tarefa para que seja executada daqui a 1 minuto. #date # at 21:30 03/05/2007at> ls l /root> /tmp/arquivo.txt O atalho CTRL D salva o agendamento. Visualizando as tarefas agendadas: # atq Para remover uma tarefa agendada: # atrm Colocando o cron em uma rotina para fazer backup do diretrio /etc/ de um em um minuto: chama um arquivo temporrio para edio do agendamento: # crontab e * * * * * tar cvzf backup.tar.gz /etc
Trabalhando com servidor de sincronizao de horrio NTP Tem por funo, estabelecer uma sincronia do relgio do sistema com a referncia mundial de tempo, o padro UTC (Horrio Universal Coordenado), atravs do protocolo NTP. Feito o download da ltima verso do NTP a partir de: http://www.ntp.org Descompactando o pacote: tar -xvzf nome_do_pacote.tar.gz C /usr/local/ ou tar -xvjf nome_do_pacote.tar.bz2 C /usr/local/ A compilao e instalao do servidor NTP trivial, normalmente basta seguir os passos indicados no arquivo INSTALL contido na distribuio. Estes se resumem basicamente execuo dos seguintes comandos: # ./configure --prefix=/usr/local/ntps # make # make check # su # make install Os binrios foram instalados no diretrio /usr/local/ntps/bin: ntpd: Processo daemon. ntpdate: Utilitrio que permite configurar o horrio e data locais usando como referncia um servidor NTP remoto. Similar ao conhecido comando ntpdate. ntpq e ntpdc: Programas de monitoramento e controle. Permitem realizar consultas a servidores NTP sobre o estado do mesmo e, eventualmente, requerer mudanas de tal estado. ntptrace: Determina de onde um determinado servidor NTP obtm a referncia de tempo e raa o caminho seguido at o servidor master (comumente, servidor NTP stratum 1). Todos eles so criados com permisso 755 (isto , rwxr-x-r-x), tendo como dono o usurio root.
A configurao do servidor NTP incluiu os seguintes passos: Inicializao do daemon ntpd. O daemon pode ser inicializado usando o seguinte comando: # /usr/local/ntps/bin/ntpd -c /usr/local/ntps/etc/ntp.conf Ou atravs do script de inicializao ntpd contido em /etc/init.d/. Implementando o servio NTP na sua rede local: ntpq -p [ip_servidor_NTP_local] ntpdc [ip_servidor_NTP_local] => Uma inicializao sem sucesso ser reportou no arquivo de logs por uma mensagem do tipo: ntpq: read: Connection refused Neste caso preciso ajustar previamente o relgio local com algum servidor NTP remoto, usando para tal o mecanismo de ajuste ntpdate: ntpdate [ip_servidor_NTP_remoto] => Uma inicializao com sucesso indicada por uma sada do tipo: ntpq -p xxx.xxx.xxx.xxx
Configurao dos clientes Linux Aps instalados os softwares necessrios, temos de fazer as configuraes dos mesmos. No arquivo /etc/crontab foram adicionadas as seguintes linhas: #[minutos] [horas] [dias do ms] [ms] [dias da semana] [usurio] [comando]0,30 * * * * root /usr/sbin/ntpdate xxx.xxx.xxx.xxx Onde xxx.xxx.xxx.xxx o endereo IP do nosso servidor de NTP. Ento reiniciamos o cron. Identificao dos servidores fonte de horrios: # ntptrace 192.168.100.100 Para as mquinas de rede que forem os clientes NTP, possvel fazer a sincronizao do horrio com o servidor atravs do comando ntpdate: # ntpdate 192.168.100.100
Acessando o arquivo de configurao do servidor de impresso, para visualizarmos algumas opes importantes de configurao: # cat /etc/cups/cupsd.conf | less Levantando o CUPS: # /etc/init.d/cupsys start Testando para verificar se o servio est ok: # lpstat t A gerencia das configuraes relacionadas fila de impresso, impressoras instaladas, e outros, ocorre atravs da interface grfica de gerenciamento do CUPS via browser. No browser digite: localhost:631/admin
Servidor NFS O Servidor NFS o servidor de compartilhamento de arquivos padro em sistemas Linux e/ou Unix. Ele se utiliza do protocolo NFS (Network File System). Suas principais utilidades em uma rede so a centralizao de informaes pblicas e de intenso acesso, e o armazenamento de grandes arquivos em um nico local (facilitando o backup da rede). Instalando o servidor NFS: # apt-get install nfs-kernel-server Configurando os diretrios a serem exportados atravs do servidor NFS, editando o arquivo /etc/exports: # nano /etc/exports Indique o diretrio a ser exportado: /tmp *(ro) => exportando o diretrio /tmp do servidor, com a permisso somente leitura para todos. /home/share 100.100.100.0/24(rw) => exportando o /home/share com permisso de leitura e gravao somente para a minha rede.
No mesmo arquivo voc pode acrescentar mais informaes. Compartilhe o diretrio home de um usurio, aplique a permisso de escrita para uma mquina e somente leitura para o resto da rede, mas ningum acessa o diretrio /home/tux/privado: /home/usurio 100.100.100.100(rw,root_squash) /home/usuario 100.100.100.0/24(ro,secure,no_root_squash) Inicializando o portmapper e o NFS: # /etc/init.d/portmap start# /etc/init.d/nfs-kernel-server start Visualizando os arquivos que esto no servidor: # showmount e 100.100.100.100 Montando o compartilhamento ativo do servidor: # mount t nfs 100.100.100.100:/tmp /mnt/nfs Removendo o compartilhamento do diretrio /tmp do servidor sem reiniciar o servio: # exportfs u *:/tmp # showmount e 100.100.100.100 => visualizando compartilhamento do /tmp removido Para reativa-lo sem reiniciar o servio: # exports a -r
Servidor Samba Instalando o Samba: # apt-get install samba smbclient smbfs samba => servidor samba samba-commom => arquivos de configurao do samba smbclient => cliente samba para Linux smbfs => montagem de compartilhamentos atravs do Linux Acessando o arquivo de configurao do samba: # nano /etc/samba/smb.conf
Se necessrio criar um compartilhamento, adicione as linhas ao final do arquivo. Exemplo de compartilhamentos: [linux] comment=testando o samba path=/tmp/samba valid users=user1 user2 writable=yes creat mask=0600 directory mask=0700 [arquivos] comment=mais uma vez testando o samba path=/tmp/arquivos writable=yes write list= @aula valid users= @aula creat mask=0660 directory mask=0700
Verificando se o arquivo possui erros: # testparm /etc/samba/smb.conf Subindo o servio do Samba: # netstat nlp | more # /etc/init.d/samba start # netstat nlp | more Consultando localmente o servio: # smbclient L 127.0.0.1 Consultando se os compartilhamentos do servidor esto ativos: # smbclient L 100.100.100.100 N Adicionando usurios na base de dados SAMBA: # smbpasswd a [usurio] Montando o compartilhamento linux com o usurio user1, e quando ele pedir a senha, coloque a que voc definiu: # smbmount //100.100.100.100/linux /mnt/samba -o username=user1 OBS: Se voc tentar montar com qualquer usurio que no esteja definido com permisso de acesso ao compartilhamento, ser retornado um erro.
Para ativar o suporte no Samba, adicione no final da sesso [global] do smb.conf (abaixo da linha logonscript = netlogon.bat) logon home = \\%L\%U\.profiles logon path = \\%L\profiles\%U a varivel %L neste caso indica o nome do servidor e o %U o nome do usurio que est fazendo logon. Quando tux faz logon montado o compartilhamento \\gdh\profiles\tux Vamos adicionar tambm um novo compartilhamento, adicionando as linhas abaixo do final do arquivo: [profiles] path = /var/profiles writable = yes browsable = No crate mask = 0600 directory mask = 0700 necessrio criar um diretrio /var/profiles, com permisso de escrita para todos os usurios: # mkdir /var/profiles # chmod 1777 /var/profiles
Cada usurio passa a ter uma pasta dentro da pasta (/varprofiles/tux) onde as configuraes so salvas. Vamos reinicializar o servidor SAMBA: # /etc/init.d/samba restart Fazendo um teste para saber se o meu master browser e o meu PDC esto respondendo na minha rede: # nmblookup -A -M 100.100.100.0 Agora preciso configurar a mquina no Windows: necessrio trabalhar com o nome da mquina e com o nome do domnio: Depois reinicie o Windows e ingresse no domnio. usurio: tux (criado anteriormente) senha: a mesma do smbpasswd (agora /etc/samba/smbpasswd ser base de dados dos usurios do domnio) domnio: windows