sábado, 24 de março de 2012

Utilizando o SUDO

O comando sudo é uma ferramenta que possibilita ao usuário comum executar tarefas que exigem permissões de super usuário.
Para alguns processos de instalação torna-se necessária a utilização desta ferramenta, em outras situações pode ser necessária a intervenção direta de um super usuário.
Como é questão de segurança, o usuário comum não deve, NUNCA, ter acesso irrestrito ao sudo, então veremos aqui como dar e retirar estas permissões.
A primeira parte do trabalho consiste em atualizar a lista de pacotes, veja a postagem referente a este assunto neste blog.
Inicialmente você deve procurar no diretório /etc (veja a postagem referente a diretórios no Linux) o arquivo sudoers, se não existir é por que o sudo ainda não está instalado.
Como root você deve instalar este pacote para posteriormente alterarmos as parametrizações e permissões.
# apt-get install sudo
Após esta instalação ser efetivada com sucesso, podemos ir ao arquivo de permissões, o sudoers, que encontra-se no diretório /etc.
Este arquivo encontra-se restrito apenas à leitura, portanto precisamos trocar esta permissão para que possamos edita-lo (veja no post sobre comandos linux)
# chmod 600 sudoers
Editando-se este arquivo, usando o seu editor preferido, no meu caso o vi.
# vi sudoers
Encontre a linha onde temos o seguinte :
# User privilege specification
root   ALL=(ALL) ALL
Acrescente uma linha abaixo com um conteúdo semelhante a isto :
marcio   ALL=(ALL) ALL
Com isto você estará permitindo que o usuário marcio utilize o recurso do sudo, sem esta permissão o usuário comum não poderá utilizar este recurso.
Após a gravação das modificações, você deve restaurar as permissões anteriores :
# chmod 440 sudoers
Se não fizer esta modificação, o sudo não executará, também por questões de segurança.

Após o usuário terminar o processo que necessita das permissões, elas DEVEM ser revogadas, isto é, retirar o usuário do arquivo sudoers, pelo menos colocá-lo em comentário.
Não se deve dar a usuários comuns poderes além dos necessários, caso isso se torne imprescindível, faça pelo menor espaço de tempo possível.

quinta-feira, 22 de março de 2012

Atualizando a Lista de Pacotes - Debian

Todos os aplicativos no Linux são compostos por uma série de pacotes que podem vir agregados ao arquivo de instalação, como é o caso de alguns arquivos .bin, ou podem ser agegados de acordo com as necessidades de cada aplicação.
Primeiro de tudo, temos que saber que existe um arquivo dentro do diretório /etc (veja no post sobre diretórios neste blog) onde consta a localização de todos os locais que o Debian deverá pesquisar, este arquivo se chama sources.list. Entendemos que já não consta as informações dos pacotes e sim onde o Debian deve pesquisar para pegar estas informações.Quando vamos fazer uma atualização de pacotes para instalar um aplicativo, temos dois caminhos para percorrer.
  1. Se você não possui acesso à internet, deve abrir este arquivo com o seu editor preferido e acrescentar à lista existente, todos os demais DVDs que possuem os pacotes, uma linha referenciando cada DVD, depois deverá comentar as linhas que farão pesquisas na internet.
  2. Se você possui acesso à internet, então deverá abrir este arquivo, comentar as linhas que referenciam os DVDs e acrescentar as demais localizações que poderão ser úteis na busca de pacotes atualizados, esta lista você encontrará no site oficial do Debian.
Após a  atualização do arquivo sources.list, é necessária a atualização da lista com a localização dos pacotes, suas versões e outras informações que serão pertinentes no processo de instalação no futuro.
Como super usuário "root", você deve executar o comando apt-get update (tudo em minúsculo).
Este processo irá verificar a lista de localizações que você cadastrou, seja DVDs, seja sites da internet, e irá preparar uma relação que será utilizada posteriormente, durante uma instalação de aplicativos.
Devo sempre ressaltar que o usuário root é um usuário de ADMINISTRAÇÃO, não deve ser utilizado para a instalação de produtos e aplicações, por questões de segurança. É CLARO que instalar diretamente no usuário root é MUITO mais simples, porém é errado e deve ser sempre evitado.

terça-feira, 13 de março de 2012

Diretórios do Linux

Para entender a instalação do do Linux, precisamos compreender o seu sistema de diretórios, se soubermos como funciona poderemos não só encontrar mais facilmente arquivos e aplicações, podemos otimizar o SO para melhor aproveitar seus recursos.

/ - Diretório raiz, é de onde sairão todos os demais diretórios do sistema Linux, abaixo dele ficam os seguintes sistemas de diretórios :.

  • bin - Onde são armazenados os binários, isto é, os aplicativos instalados para básico do sistema operacional.

  • boot - É neste diretório onde encontramos os arquivos para a iniciação do sistema operacional.

  • dev - É neste local onde encontraremos os caminhos dis dispositivos a serem montados, esta informação trabalha em conjunto com os diretórios /mnt e /media.

  • etc - É onde encontraremos os arquivos de configuração, não pode haver arquivos binários, no máximo links.

  • home - Diretório raiz do usuário comum, é aqui que serão armazenadas as informações de perfil, as instalações, documentos, downloads e outras informações do usuário comum.

  • initrd - Diretório / link, que fará o boot do sistema a partir de uma memória armazenada em disco, caso seja feita a opção de iniciação por dual boot ou por kernel diferente.

  • lib - Local onde são armazenadas as bibliotecas básicas, e os módulos do kernel. Neste diretório ficam as imagens das bibliotecas compartilhadaspara o boot e sistema. Aqui ficam as bibliotecas compartilhadas para os binários encontrados nos diretórios /bin e /sbin

  • lib - Pode haver variantes do diretório /lib em sistemas que suportam mais de um formato de bináro, que necessitam de arquivos binários separados. Isso é utilizado geralmente, para suporte 64 ou 32 bits. Nesse caso teriamos, /lib32 e /lib64, sendo o /lib um link simbolico para um desses dois diretórios.

  • lost+found - Diretório utilizado pelo sistema operacional quando se faz necessária a recuperação de uma informação em decorrência de uma falha ou um desligamento inadequado.

  • media - É onde ficam os dispositivos que serão montados pelo comando mount, por exemplo cdrom.

  • mnt - É onde ficam armazenadas as informações sobre o ponto de montagem dos dispositivos.

  • opt - Este diretório, no linux é reservado para armazenar todas a aplicações e adicionais que não fazem parte da instalação padrão.

  • proc - Diretório especial para arquivos virtuais. É utilizado para referenciar pseudo-arquivos de sistema, não contém nenhum arquivo "real", mas informaçõe sd einformações de sistema.

  • root - Diretório raiz do superusuário, é aqui que serão armazenadas as informações do perfil do usuário root

  • sbin - Ao contrário do diretório /bin, este diretório está reservado a apenas aplicações de administrador. Programas de administração local serão instalados nos diretórios /usr/sbin ou /usr/local/sbin. Para a iniciação, recuperação, restauração e backup, os binários se encontrarão aqui.

  • srv - Diretório reservado para a utilização de serviço de diretórios para uma aplicação em específico, a metodologia utilizada para se trabalhar com este diretório não é muito clara pois não há um consenso sobre sua utilização.

  • tmp - Aqui serão armazenados arquivos de uso temporário, muitos programas utilizam este recurso (criação de arquivos temporários) para armazenar informações que serão utilizadas durante seu funcionamento e/ou instalação. Estes arquivos costumam ser removidos ao final do processo ou de tempos em tempos pelo próprio sistema operacional. Não é recomendável remover estes aquivos.

  • usr - Bibliotecas compartilhadas de binários

  • var - Contém dados variáveis registrados pelo sistema operacional como log de arquivos, e-mail, impressoras e arquivos temporários. Muitas áreas dentro do /var não são compartilhadas entre aplicações diferentes, como /var/log, /var/lock e /var/run. Outras como /var/mail, /var/cache/man são compartilhadas.
  • sexta-feira, 9 de março de 2012

    Comandos Básicos

    A lista a seguir são comandos básicos para um melhor aproveitamento do seu Linux. Alguns parâmetros ou localizações irão variar de acordo com a sua distribuição. Estou passando linhas gerais sobre os comandos, para maiores detalhes consulte o comando man.
    Estou escrevendo, a princípio sobre o Debian e Mandriva.

    Farei da mesma forma que o autor do livro Usando Linux, Bill Ball, que colocou a lista dele em ordem alfabética com o objetivo de facilitar a consulta.

    • . - (ponto) Informa ao shell que o arquivo a seguir é um comando e deve ser executado. Também pode se referenciar ao diretório onde estou no momento.
    ex.: #./etc/init.d/single start
    • .. - (ponto ponto) Navegará para o diretório imediatamente superior em sua árvore de diretórios.
    ex.: #cd ..
    • & - (E Comercial) Envia para segundo plano a aplicação que está sendo chamada, libera o terminal para continuar trabalhando
    ex.: #firefox &
    • adduser ou useradd - Adiciona um usuário ao servidor ou ao desktop
    ex.: #adduser marcio -m -G financeiro
    • alias - É utilizado para dar um "apelido" a um comando ou a um diretório
    ex.: #alias dir='ls $LS_OPTIONS --format=long'
    • apropos ou man -k - Pesquisará na documentação interna do Linux o parâmetro solicitado.
    ex.: #apropos gnome
    • bg - passa um determinado processo para segundo plano, se você iniciou um programa sem a opção &, você fica com o terminal "preso" até que o processo seja encerrado, porém, você pode enviar este processo para segundo plano e liberar o terminal.
    ex.: #bg 1234 (sendo 1234 o número do processo que será enviado para segundo plano)
    • cat - Faz com que o sistema verifique o conteúdo de um determinado arquivo e disponha-o na tela, se você utiliza-lo para mostrar um arquivo binário, executável, aparecerão diversos caractéres intelegíveis e certamente alguns sinais sonoros também.
    ex.: #cat <diretório>/<nome do arquivo>
    • cd  - Change Directory - Vai para o diretório específico ou retorna para o diretório "home" do usuário. Se você direcionar para onde deseja ir, por exemplo #cd /etc/apt o comando retira você do diretório onde você se encontra e o coloca no diretório solicitado, no caso /etc/apt. Se você digitar apenas #cd, isto é, sem parâmetros, o comando te enviará de volta ao seu diretório home, se você digitar #cd .. então o comando te levará um nível acima na hierarquia de diretórios.
    ex.: #cd /etc/samba
    • chgrp - Change Group - Muda o grupo que terá acesso a um arquivo ou diretório especificado. Se utilizada a opção -R (maiúsculo), o comando se tornará recursivo, valendo para todos os arquivos e/ou subdiretórios que atendam à especificação. Só o proprietário ou o root tem permissão de alterar esta propriedade.
    ex.: #chgrp <nome do novo grupo> <nome do arquivo ou diretório>
    • chmod - Change Mode - Este comando é utilizado para alterar as permissões de um arquivo ou diretório. Se for utilizada a opção -R (maiúscula), o comando se tornará recursivo, valendo para todos os arquivos e/ou subdiretórios que atendam à especificação. Existem duas maneiras de você alterar as permissões, utilizando o código numérico ou o alfabeto. Existem três grupos de permissões a ser atribuídos, owner (proprietário), group (grupo) e others (outros), todos eles tem o mesmo número de parâmetros, r- Read (leitura), w- Write (gravação) e x- eXecute (executar), estas três opções podem ser alteradas com o sinal de + (mais) e - (menos). Por exemplo, para acrescentar as permissões de ler e executar ao proprietário e grupo do arquivo teste, você insere o seguinte comando : #chmod ug+rx teste, traduzindo, altere as permissões (chmod) do usuário e grupo (ug) acrescentando leitura e execução (+rx). Para remover estas mesmas permissões, use o comando da seguinte forma #chmod ug-rx. Usando o sistema numérico, você terá que se lembrar dos número em binário (vide tabela abaixo). Ao contrário do código alfabético, você deve sempre informar o valor absoluto da permissão, independente dos valores anteriores. Este sistema é composto de três conjuntos numéricos, que vão de zero a sete, onde zero remove qualquer permissão e sete atribui todas as permissões. Os três grupos se referem a owner, group e others, nesta sequência. Se eu der o comando #chmod 700 teste, estarei atribuindo todos os direitos ao dono (owner) e removendo qualquer direito do grupo e outros.
    Valor
    Binário
    Valor
    Decimal
    Permissões
    0000 - ZeroRemove todas as permissões
    0011 - UmPermissão de execução
    0102 - DoisPermissão de escrita
    0113 - TrêsPermissão de escrita e execução
    1004 - QuatroPermissão de leitura
    1015 - CincoPermissão de leitura e execução
    1106 - SeisPermissão de leitura e escrita
    1117 - SetePermissão de leitura, escrita e execução
    • chown - Change Owner -Este comando é utilizado para modificar a identificação (ID) do proprietário de um arquivo ou diretório. Também é possível alterar a identificação do grupo através deste comando.
    ex.: #chown marcio:almeida teste - modifica o owner do arquivo teste para marcio e o grupo para almeida.
    • chroot - Change Root Path - Este comando permite que o diretório raiz (/) seja modificado para uma outra árvore de diretórios. Por exemplo, quando trabalhamos com internet, estamos sujeitos a invasões, porém podemos prevenir eventuais destruições redirecionando o diretório raiz para um lugar inofensivo, por exemplo /home/HoneyPocket. podemos inclusive criar um sistema de diretórios parecido como raiz para que o invasor se sinta satisfeito com tal ação. quando o invasor entra no sistema ele verá que está no diretório raiz, porém está no diretório /home/HoneyPocket. Se ele chegar a destruir qualquer coisa, nada será perdido. Este comando também poderá modificar qualquer outro local do seu sistema de arquivos.
    ex.: #chroot /etc/samba /home/HoneyPocket
    • cp - Copy - Este comando irá permitir que sejam feitas cópias de arquivos ou diretórios para outro local físico ou unidade de mídia.
    ex.: #cp teste.sh /etc/init.d
    • dd  - Este comando irá converter o formato de um arquivo. Por exemplo, para copiar uma imagem partida para um disco, imaginando-se que dispositivo seja /dev/fd0, usa-se o seguinte comando :
    ex.: #dd if=<nome de arquivo> of- /dev/fd0 obs=18k
    • env - Enviroment - Este comando é utilizado para consultar as variáveis de ambiente exportadas. O resultado deste comando será uma lista com duas colunas onde a coluna da esquerda é o nome da variável e a da direita é o valor a ela atribuído.
    • fc - Este comando é utilizado para editar o arquivo de histórico. É possível passar parâmetros especificando a faixa de comandos a partir do histórico. Esta lista então é inserida em um shell de edição.
    • fg - Fore Ground - Os processos que estão em segundo plano poderão ser "puxados" de volta para o terminal. Isto é muito útil quando você tem algum processo aguardando intervenção de usuário, ou você deseja acompanhar o desenrrolar do processo.
    • file - Este comando ira testar os arrquivos que são passados por parâmetro e determinar o tipo de arquivo a que ele se refere. No linux a extensão do arquivo não é tão importante, mesmo que seja mais fácil de identificar, ele utiliza uma série de informações para tratar este arquivo e o comando file irá mostrar qual é o tipo de arquivo em questão.
    • find - Pesquisa - Você poderá utilizar este comando para localiza um ou vários aquivos em todo o sistema de diretórios ou a partir de um ponto da árvore de diretórios.
    ex.: #find / -name *conf - Irá procurar todos os arquivos de configuração a partir do diretório raiz
    • grep - Global Regular Expression Parse - Procura no objeto especificado o texto que você especificou. A sintaxe do comando é : #grep <texto> <arquivo>. Também pode ser utilizado no resultado de uma pesquisa ou no retorno de outro comando.
    ex.: # ps -ef | grep http
    • gzip - Software de compactação. É bastante simples de utilizar porem temos que tomar alguns cuidados. Quando executamos #gzip teste, ele irá gerar um arquivo teste.zip, porém o original será removido.
    • halt - Este é um comando que só poderá ser executado pelo root. Ele envia um sinal ao kernel do Linux para que ele efetue o desligamento do computador.
    • hostname - Nome do Computador - Este comando irá permitir ao usuário se localizar informando o nome do computador ou da rede, é muito útil quando abrimos várias janelas conectando-nos a vários servidores.
    • kill - Matar -Envia um sinal para o kernel do linux referenciando-se a um processo específico. O sinal TERM será enviado se nenhum outro parâmetro for especificado. Caso o processo não "compreenda" o sinal TERM este será interrompido. Aos que "compreendem" o sinal, pode ser que se torne necessário o comando kill por que ele não pode ser processado. A sintaxe deste comando é #kill <opção> <pid>, sendo que <pid> significa Process ID, ou seja, número identificador de processos.
    ex.: #kill -15 1234
    • less - Comando abre um arquivo para leitura e permite, ao ler um documento, a movimentação para trás e para frente. A vantagem é que ele não precisa ler (carregar em memória) o arquivo inteiro antes de iniciar, quando o arquivo é bastante grande e queremos consultar apenas uma parte dele, é uma das maneiras mais rápidas de faze-lo.
    • login - É utilizado quando precisamos entrar no sistema Linux, também pode ser utilizado para trocar de usuário a qualquer momento.
    • logout - É utilizado para desconectar-se do sistema com o usuário atual, se você está conectado apenas com este usuário, ele sai do sistema, caso contrário, volta ao anterior.
    • lpc - Line Printer Control - É utilizado pelo administrador para controlar a operação do sistema de impressão de linha. Usado para ativar ou desativar uma impressora ou fila de impressão, verificar o status das impressoras, das filas de impressão ou dos daemons (Disk And Executation MONitor - Monitor de Execução e de Disco) de impressão. Este comando é válido para qualquer impressora configurada no /etc/printcap.
    • lpd - É o daemon (Disk And Executation MONitor - Monitor de Execução e de Disco) de impressora de linha e normalmente é ativado durante a iniciação do serviço a partir do arquivo rc. Ele verifica o arquivo /etc/printcap para descobrir sobre as impressoras existentes e imprime qualquer arquivo deixado após uma falha. Após esta verificação, ele usa as chamadas do sistema listen e accept, para receber solicitações de impressão na fila de arquivos, transferir arquivos para a área de spool, exibir a fila ou remover serviços da fila.
    • lpq - Line Printer Queue - Examina a área de spool usada pelo lpd para imprimir arquivos na impressora relacionada e relata o status dos serviços especificados ou todos os serviços associados a um usuário. Se o comando é ativado, sem qualquer argumento, ele relata sobre qualquer serviço atualmente na fila de impressão.
    • lpr - Line Printer - Este comando usa um daemon (Disk And Executation MONitor - Monitor de Execução e de Disco) de spool para imprimir os arquivos nomeados quando os recursos ficarem disponíveis. Se nenhum nome aparece, utiliza-se a enrtada padrão.
    ex.: #lpr /etc/hosts
    • ls - Mostra o conteúdo de um diretório. A forma de saída é controlada pelas suas opções. O comando ls sem opções irá mostrar os itens de um diretório que não se encontram ocultos, em ordem alfabética, usando tantas colunas quantas couber na janela.
    ex.: #ls -lia
    • make - Este comando determina automaticamente quais as peças de um grande programa que precisam ser recompiladas para produzir o produto final.
    • man - Manual - Este comando é utilizado para formatar e exibir as documentações online. Estas documentações são textos que descrevem, em detalhes, como utilizar o comando especificado, quais os parâmetros e suas atribuições.
    ex.: #man chmod
    • mesg - Este utilitário é executado por um usuário para controlar o acesso de gravação que outros tem ao dispositivo de terminal associado a uma saída de erro padrão. Se o acesso de gravação é permitido, programas tais como talke write tem permissão para exibir mensagens no terminal. Este acesso a gravação é default.
    • mkdir - Make Directory - Comando utilizado para criar diretórios.
    • mkefs - Este comando é utilizado para criar um sistema de arquivos estendido (partição) . Este comando não formata o novo sistema de arquivos, apenas deixa-o disponível para uso.
    • mkfs - É utilizado para construir um sistema de arquivos no Linux, geralmente uma partição de disco rígido.
    • mkswap - Define uma área de troca do Linux em um dispositivo, geralmente uma partição de disco.
    • more - É um filtro para paginar um texto, uma tela por vez. Este comando é muito útil, porém só pagina para frente, ao contrário do less que permite navegação.
    • mount - Anexa o sistema de arquivos especificado por specialfile, o qual frequentemente é um nome de dispositivo, no diretório especificado como o parâmetro. Somente o root pode montar arquivos. Se o comando mount é executado sem parâmetros, ele lista todos os sistemas de arquivos atualmente montados. 
    • mv - Move - é utilizado para mover um objeto ou um grupo de objetos para outro local. Se são passados dois nomes de arquivos, o primeiro irá sobrepor o segundo. Se o último parâmetro for um diretório, ele irá transferir todos os arquivos da lista para este diretório.
    • netstat - Este comando exibe o status das conexões de rede nos slots TCP, UDP, RAW ou UNIX para o sistema. A opção -r é usada para obter informações sobre a tabela de roteamento.
    • passwd - Este comando é utilizado para trocar a senha de um usuário. O usuário comum não utiliza parâmetros e pede automaticamente uma nova senha que deve ser digitada duas vezes. Para o superusuário, pode ser passado o nome do usuário que deseja trocar a senha.
    • ps - Fornece um instantâneo dos processos atuais sendo executados no Linux.
    • pwd - Este comando permite ao usuário identificar qual o diretório atual.
    • rm - Remove um ou mais arquivos do sistema de diretórios, caso seja utilizada a opção -R, então este comando torna-se recursivo e atingirá toda a árvore de diretórios iniciando-se pelo diretório corrente.
    • rmdir - Demove diretório e seu conteúdo, caso haja subdiretórios estes também serão removidos.
    • set - É utilizado para atribuir temporariamente valores à variáveis de ambiente, para que estes valores sejam definitivos, deve-se colocá-lo no arquivo de iniciação do Linux ou do usuário.
    • shutdown - Comando utilizado para desligar ou reiniciar o sistema Linux.
    • su - Super User - A partir deste comando o super usuário é "chamado" para ser utilizado em funções específicas. Também pode-se chamar outro usuário passando-se por parâmetro o nome deste outro usuário. Uma senha será requerida em ambos os casos.
    • swapoff - É utilizado para interromper a troca para um arquivo ou dispositivo de bloco.
    • swapon - Define a área de troca para o arquivo ou dispositivo de bloco por caminho. Este comando interrompe a troca para o arquivo. É normalmente utilizado durante a iniciação do sistema.
    • tail - Exibe para a saída padrão as últimas dez linhas de um dado arquivo. Se nenhum parâmetro é passado, ele lê a partir da entrada padrão. Se forem passados mais arquivos, ele colocará marcadores indicando o início de cada arquivo listado.
    • talk - É utilizado para obter uma conversa virtual entre usuários através do terminal.
    • tar - É utilizado para agregar arquivos em um único pacote (.tar), também é utilizado para extrair arquivos desse pacote. Para que haja compactação é necessário usar um dos parâmetros específicos para este fim.
    • umount - É o contrário do mount, ele servirá para desmontar as ligações a sistemas de arquivos.
    • unalias- Desfaz o comando alias, os "apelidos" criados podem ser facilmente desfeitos por esta opção.
    • unzip - Serve para descompactar arquivos , também pode listar e testar o conteúdo de um arquivo compactado.
    • wall - Exibe o conteúdo da entrada padrão em todos os terminais de todos os usuários logados no momento. O conteúdo dos arquivos também poderá ser exibido. O root tem a opção de gravar nos terminais daqueles que escolheram a negação de mensagens ou que estão utilizando um programa que automaticamente nega mensagens.
    • who - Exibe o nome de login, tipo de terminal, tempo de acesso e nome do host remoto de cada usuário atualmente conectado.
    • xhost + - Este comando permite que o xterms seja exibido em um sistema. Provavelmente a razão mais comum pela qual um terminal remoto não pode ser aberto é por que este comando não foi executado. Para desativar esta funcionalidade, usamos o xhost -
    • xmkmf - É utilizado para criar imakefailes para fontes X. Ele, na verdade, executa o comando imake com um conjunto de argumentos pré definidos.
    • xset - Define algumas das opções em uma sessão X Window. Você pode usar esta opção para definir o seu aviso sonoro, a velocidade do seu mouse e muitos outros.
    • zip - Lista, testa ou acrescenta arquivos em um arquivo compactado. O padrão é acrescentar arquivos em um arquivo compactado.