Linux Shadow Password HOWTO

Michael H. Jackson, mhjack@tscnet.com
V1.3, 3 de Abril de 1996.
Traduzido por: Bruno H. Collovini - buick@microlink.com.br
Traduzido em: 11 de Março de 1998.

Aviso: Esta tradução não está relacionada com o Projeto de Documentação do Linux LDP) que no Brasil é representada pela LDP-BR em <http://www.dca.fee.unicamp.br/~malheiro/linux/LDP-br.html>, este material é uma tradução técnica e básica somente para auxiliar os colegas com a leitura em português.

Outros documentos você pode obter em: <http://www.microlink.com.br/~buick/>

Este documento descreve como obter, instalar e configurar o Pacote password Shadow no Linux. Também discute a obtenção, e reinstalação de outros softwares e daemons de network para ter acesso de passwords aos usuários. Estes outros softwares não faz parte de fato de nenhum Pacote do Shadow, mas estes programas precisarão ser recompilados para suportar o Pacote do Shadow. Este documento também contém um exemplo de programação para adicionar ao programa do Shadow.. Respostas para algumas da perguntas mais fre freqüentes está na parte final deste documento.

1. Introdução.

Este é o Linux Shadow-Password-HOWTO. Este documento descreve como usar e configurar o suporte ao passoword shadow em um sistema Linux. Alguns exemplos de como usar algumas das características do Pacote Shadow também esta incluído.

Quando instalando o Pacote do Shadow e quando usarmos muitos dos programas utilitários, você deve estar como root. Quando for instalar o Pacote Shadow você estará fazendo mudanças do software de sistema, e é altamente recomendado que você faça copias de backup dos programas indicados. Eu também recomendo que você leia e entenda todas as instruções antes de você fazer algo.

1.1. Mudanças nesta versão do documento.

Adicionados:

  • Adicionado uma sub-seção sobre o por que de você não querer instalar o shadow.
  • Adicionado uma sub-seção em updating do programa xdm
  • Adicionado uma seção de como usar caracteristicas do Pacote Shadow para trabalhos.
  • Adicionado uma seção que contém as perguntas mais freqüentes.
  • Correções/Updates:

  • Referências de html corrigidas em Sunsite
  • Seção corrigida em wu-ftp para refletir adicionando o -lshadow para o Makefile correlacionar ortografia secundária e de erros.
  • Seção mudada em wu-ftpd para suporte ao ELF
  • Atualizado para refletir problemas de segurança em vários programas de login
  • Atualizado para recomendação do Pacote Shadow Linux por Marek Michalkiewicz
  • 1.2. Versões novas deste documento.

    A mais recente versão lançada deste documento sempre pode ser obtida por FTP anônimo em:

    sunsite.unc.edu - /pub/Linux/docs/HOWTO/Shadow-Password-HOWTO

    ou:

    /pub/Linux/docs/HOWTO/other-formats/Shadow-Password-HOWTO{-html.tar,ps,dvi}.gz

    ou via a World Wide Web no Servidor do Projeto de Documentação do Linux <http://sunsite.unc.edu/mdw/linux.html>, a página é : Shadow-Password-HOWTO <http://sunsite.unc.edu/linux/HOWTO/Shadow-Password-HOWTO.html> ou diretamente por mim, mhjack@tscnet.com.
    Também é postada no newsgroup: comp.os.linux.answers

    Este documento é empacotado agora com os pacotes Shadow-YYDDMM.

    1.3. Realimentação.

    Por favor envie qualquer comentário, atualização, ou sugestões para mim: Michael H. Jackson . Quanto mais cedo eu adquiro realimentação, o mais cedo eu possa atualizar e corrigir este documento. Se você acha qualquer problema com ele, por favor remeta-me diretamente como eu raramente fico em dia no newsgroups.

    2. Por que o shadow no seu arquivo de passwd?

    Por default, muitas das distribuições do Linux atuais não contém o Pacote Shadow instalado. Isto inclui o Slackware 2.3, Slackware 3.0, e outras distribuições populares. Um das razões para isto é que as advertências de direito autorais no Pacote do Shadow original não estavam claras nas redistribuições se uma taxa fosse cobrada. O Linux usa Direitos autorais GNU (às vezes arbitrado como um Copyleft) isso permite que muitas pessoas criem pacotes em um pacote conveniente (como uma distribuição de CD-ROM) e cobra-se uma taxa por isto.

    O mantedor atual do Pacote do Shadow, Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> recebeu o código fonte do autor original debaixo de um estilo de direitos autorais BSD que permitiu a redistribuição. Agora que os assuntos de proteção por direitos autorais estão resolvidos, é esperado que futuras distribuições conterão o password shadow por default. Até então, você precisará instalar.

    Se você instala de sua distribuição do CD-ROM, você pode achar que, embora a distribuição não tenha o Pacote do Shadow instalado, alguns dos arquivos que você precisa instalar do Pacote do Shadow podem estar no CD-ROM.

    Porém, Pacote do Shadow versões 3.3.1, 3.3.1-2, e o Shadow-mk todos têm problemas de segurança com o programa de logine vários outros programas com suid de root vieram com eles, e já não deveria ser usados.

    Todos os arquivos necessários podem ser obtidos por FTP anônimo ou pela World Wide Web.

    Em um sistema de Linux sem o Pacote do Shadow instalado, informação sobre o usuário inclusive a senhas é armazenado no arquivo de /etc/passwd. A password é armazenado em um formato codificado. Se você pergunta para um perito de criptografia, porém, ele ou ela lhe falará que a password é de fato codificado em um formato codificado porque quando usando o crypt(3), o texto é fixado para nulo e a password é a chave. Então, daqui em diante, eu usarei o termo codificado neste documento.

    O algoritmo codifica o campo de password é tecnicamente chamado uma referência a uma função. Este é um algoritmo que é fácil de computar em uma direção, mas muito difícil calcular na direção inversa. Mais sobre o algoritmo atual usado pode ser achado na seção 2.4 ou na sua página do manual do crypt(3).

    Quando um usuário escolhe ou é nomeado uma password, é codificado com um valor randomico gerado chamado pelo salt. Isto significa que qualquer password particular poderia ser armazenada de 4096 modos diferentes. O valor salt é armazenado então como a password codificada.

    Quando um usuário acessa com a sua password, primeiro o salt recorre a password armazenada codificada. Então codifica a password com o valor salt, e então compara com a password codificada. Se há uma partida, então o usuário é autenticado.

    É computacionalmente difícil (mas não impossível) pegar uma password codificada randomicamente e recuperar a password original. Porém, em qualquer sistema com mais de alguns usuários, pelo menos algumas das passwords serão palavras comuns (ou variações simples de palavras comuns).

    Os crackeadores de sistema sabem tudo isto, e codificará um dicionário simplesmente de palavras e passwords comuns que usam todas os 4096 valores possíveis do salt. E então eles compararão as passwords codificadas em seu arquivo /etc/passwd arquive com o banco de dados deles. Uma vez eles que eles acharem uma partida, eles têm uma password para outra conta. Isto é chamado de um ataque de dicionário, e é um dos métodos mais comuns para ganhar ou expandir acesso sem autorização para um sistema.

    Se você pensar nisto, uma password com 8 caráter codificado são 4096 * 13 strigns de caracteres. Assim um dicionário de 400,000 palavras comuns, nomes, passwords, e variações simples ajustariam facilmente em uns 4GB de Hard Disk. Só necessidade de ataque ordenado, e então conferir para partidas.
    Considerando que um disco rígido de 4GB pode ser $1000.00, isto é bem dentro dos meios da maioria de sistemas de crackers.

    Também, se um cracker obtém o seu arquivo /etc/passwd primeiro, eles só precisam codificar o dicionário de fato com os valores do salt em seu arquivo de /etc/passwd. Este método é utilizável por adolescente comum com um par de cem Megabytes sobressalentes e um computador da classe 486.

    Até mesmo sem muitos espaço de drive, utilizando o crack(1) normalmente podemos quebrar várias passwords pelo menos em um sistema com bastante usuários (assumindo que os usuários do sistema são permitidos a escolher a própria passwords).

    O arquivo /etc/passwd também contém informação como ID de usuário e o grupo de ID que é usado por muitos programas do sistemas. Então, o arquivo /etc/passwd tem que permanecer mundialmente legível. Se você fosse mudar o arquivo /etc/passwd de forma que ninguém pode ler, a primeira coisa que você notaria é que o comando ls -l agora exibi a ID's do usuário ao invés dos nomes!

    O Pacote do Shadow resolve o problema localizando de novo as passwords em um outro arquivo (normalmente /etc/shadow). O arquivo de /etc/shadow é configurado para não ser lido por qualquer um. Somente o root poderá ler e escrever no arquivo /etc/shadow.
    Alguns programas (como o xlock) não precisa mudar passwords, eles só precisam ser capaz de verificar. Estes programas ou podem ser rodados com a suid do root ou você pode montar um grupo shadow que permita ler somente o arquivo /etc/shadow. Então o programa pode ser rodado com a sgid shadow.

    Movendo as Passwords para o arquivo /etc/shadow, estamos efetivamente impedindo o atacante de ter acesso às passwords codificadas com o qual executa um ataque de dicionário.

    Adicionalmente, o Pacote do Shadow adiciona muitas outras características agradáveis:

  • Um arquivo de configuração para configurar um login default (/etc/login.defs)
  • Utilitários para adicionar, modificar e apagar usuários e grupos.
  • Password com tempo de expiração
  • Controlador de expiração e fechamento
  • Grupo do Shadow Passwords(opcional)
  • Passwords com o dobro de número (16 caracter para passwords) NÃO RECOMENDADO
  • Um melhor controle na seleção de password para usuários.
  • Passwords para Dial-up
  • Programas secundários para autentificação Não Recomendado
  • Instalar o Pacote do Shadow contribui para um sistema mais seguro, mas há muitas outras coisas que também podem ser feitas para melhorar a segurança de um sistema Linux, e haverá uma série eventualmente no HOWTO Segurança do Linux que discutirá outras segurança e assuntos relacionados.

    Para informação atuais sobre outras seguranças no Linux e incluzão de advertências sobre vulnerabilidade conhecidas vê a home page Segurança no Linux. <http://bach.cis.temple.edu/linux/linux-security/>

    2.1. Por que você pode NÃO querer instalar o shadow no seu arquivo de passwd.

    Há alguns circunstâncias e configurações em que instalar o Pacote do Shadow não seria uma boa idéia:

  • Se a máquina não contém usuários.
  • Sua máquina está correndo em uma LAN e está usando NIS (Network Information Services) e adquirir ou prove o nome dos usuários e passwords para outras máquinas na network.
    (Isto pode ser feito de fato, mas é além do âmbito deste documento, e realmente não aumentará a segurança muito de qualquer maneira)
  • Sua máquina está sendo usada através de servidores terminais e verificar os usuários por NFS (Network File System), NIS, ou algum outro método.
  • Sua máquina roda outro software que valida os usuários, e não nenhuma versão do Shadow disponível, e você não tem o código fonte.
  • 2.2. Formato do arquivo /etc/passwd

    Um arquivo /etc/passwd não-shadow tem o seguinte formato:

    username:passwd:UID:GID:nome_completo:diretório:shell

    Onde:

         username
            O nome do usuário (login)
    
         passwd
            A password codificada
    
         UID
            ID do número do usuário
    
         GID
            ID do número do grupo default
    
         nome_completo
            O nome do usuário - De fato este campo é chamado de GECOS
            (General Electric Comprehensive Operating System) campo e pode
            armazenar informações diferentes. Os comandos Shadow e as páginas do manual referem se a este campo como campo de comentário.
    
         diretório
            O diretório home do usuário (pathname completa)
    
         shell
            O shell que o usuário usa (Pathname completo)
    
      Por exemplo:
    
           Username:Npge08pfz4wuk:503:100:Nome Completo:/home/username:/bin/sh
    
    Onde Np é o salt e ge08pfz4wuk é a password codificada. O salt/password codificado puderia ser da mesma maneira que kbeMVnZM0oL7I e os dois são exatamente a mesma Password. Há 4096 possível encodificações para a mesma Password. (A Password deste exemplo neste caso é 'password', uma password realmente ruim).

    Uma vez que o Pacote do Shadow é instalado, o arquivo de /etc/passwd iria ao invés conter:

           Username:x:503:100:Nome Completo:/home/username:/bin/sh
    
    O x no segundo campo neste caso é agora um possuidor do lugar.
    O formato do arquivo de /etc/passwd realmente não mudou, isto só não contém mais a password codificada. Isto significa que qualquer programa lê o arquivo /etc/passwd mas não precisa verificar de fato se as passwords ainda estão funcionando corretamente.

    As Passwords são localizadas de novo agora no arquivo do Shadow (normalmente o arquivo /etc/shadow).

    2.3. Formato do arquivo do Shadow

    O arquivo /etc/shadow contém as seguintes informações

           username:passwd:last:may:must:warn:expire:disable:reserved
    
      Onde:
         username
            O Nome do Usuário
    
         passwd
            A password Codificada
         último
            Dias como Jan 1, 1970 quando a password foi mudada pela última vez.
    
         may
            Dias antes da password podem ter sido mudada
    
        must
            Dias depois dos quais password deve ser mudada
    
         advirta
            Dias antes de password se expirar aquele usuário é advertido
    
         expire
            Dias depois que a password expira aquela conta é inválida
    
         incapacite
            Dias como Jan 1, 1970 aquela conta é inválida
    
         reservado
            Um campo reservado
    
      O exemplo prévio poderia ser então:
    
           username:Npge08pfz4wuk:9479:0:10000::::
    

    2.4. Revisão do crypt(3).

    Da página do manual crypt(3)

    "crypt é a função de encripitação da password. Está baseado no Padrão de Criptografiaos de Dados (DES) com variações pretendidas (entre outras coisas) desencorajar o uso de implementação de hardware para a procura de uma chave.

    A chave é a password digitada do usuário. A string codificada é toda NULA. O salt é uma string de dois-caráter escolhido de o a-zA-Z0-9./.
    Esta stringo é usada para perturbar um algoritmo com 4096 diferentes modos.

    Levando os 7 pedaços mais baixos de cada caráter da chave, uma chave de 56-bit é obtido. Esta chave de 56-bit é usada para codificar uma string constante repetidamente (normalmente uma string que consiste em todos os zeros). O valor devolvido para a password codificada, é uma série de 13 caracter ASCII imprimíveis (os primeiros dois caráter representam o próprio salt). O valor de retorno para os dados é estáticos pelo cujo do conteúdo é escrito elaboradamente a cada chamada.

    Advertência: O espaço chave consiste em 2**56 igual a 7.2e16 valores possíveis iguais. Procuras exaustivas deste espaço de chave são maciçamente possíveis usando computadores paralelos. Software, como crack(1), está disponível para procurar a porção deste espaço de chave pelo qual é geralmente usado password humanas. Conseqüentemente, a seleção de password deve, no mínimo, evitar palavras comuns e nomes. O uso do programa passwd(1) que chequa passwords quebravéis durante o processo de seleção são recomendado.

    O próprio algoritmo DES tem alguns truques dos quais fazem o uso a interface do crypt(3) uma escolha muito pobre para qualquer coisa diferente de autenticação de password. Se você está planejando usar as interface do crypt(3) para um projeto de criptografia, não faça isto: adquira um livro bom sobre criptografia e um das bibliotecas extensivás do DES disponiveis."

    A maioria dos Pacotes do Shadow contêm um código para dobrar o tamanho da password para 16 caráter. Peritos em des são contra esta recomendação, como a codificação é primeiro à esquerda simplesmente é aplicada no meio da password mais long. Por causa das palavras criptografadas, pode trazer uma password codificada menos segura então se o tamanho da password for o dobro a passwords não eram usadas no primeiro lugar. Adicionalmente, é menos provável que um usuário poderá se lembrar de uma password de 16 caracteres.

    Há trabalho de desenvolvimento que permitirá o algoritmo de autentificação ser substituído por algo mais seguro e com o suporte para passwords mais longas (especificamente o algoritmo MD5) e retenha compatibilidade com o método crypt.

    Se você está procurando um livro bom de criptografia, eu recomendo:

    "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
    by Bruce Schneier <schneier@chinet.com>
    ISBN: 0-471-59756-20-471-59756-2

    3. Adquirindo o Pacote do Shadow.

    3.1. História do Pacote do Shadow para Linux

    NÃO USE OS PACOTES NESTA SEÇÃO, ELES TÊM PROBLEMAS DE SEGURANÇA

    O Pacote do Shadow original foi escrito por John F. Haugh II.

    Há várias versões que foram usado em sistemas Linux:

  • shadow-3.3.1 é o original.
  • shadow-3.3.1-2 é o patch específico para o Linux feito por Florian La Roche <flla@stud.uni-sb.de> e contém alguns adicionais.
  • Shadow-mk especificamente foi empacotado para Linux.
  • O Pacote Shadow-mk contém o pacote shadow-3.3.1 distribuído por John F. Haugh II com o shadow-3.3.1-2 patch instalado, alguns erros arrumados por Mohan Kokal <magnus@texas.net> faz a instalação mais fácil, um patch por Joseph R.M. Zbiciak para login1.c (login.secure) isso elimina o -f, -h para segurança do furo no /bin/login, e algumas outras miscelanias de patches.

    O pacote de shadow.mk era o pacote previamente recomendado, mas deveria ser substituído devido a um problema de segurança com o programa de login.

    Há problemas de segurança com Shadow versões 3.3.1, 3.3.1-2, e Shadow-mk envolvendo o programa de login. Estes bug de login não envolve a checagem de tamanho no nome de login. Isto causa um overflow no buffercausa um crashe ou piores coisas. Fazendo que isto aconteça pode permitir que alguém com uma conta no sistema use este bug e as bibliotecas compartilhadas para ganhar acesso de root. Eu não vou discutir exatamente como isto é possível porque há muitos sistemas Linux que são afetados, mas sistemas com estes Pacotes Shadow, e a maioria das distribuições pre-ELF sem o Pacote do Shadow são vulneráveis!

    Para mais informação sobre isto e outra segurança do Linux, veja a home page Segurança no Linux (Compartilhamento de Bibliotecas e Programa de login Vulneravéis) <http://bach.cis.temple.edu/linux/linux - security/Linux-Security-FAQ/Linux - telnetd.html>

    3.2. Onde adquirir o Pacote do Shadow.

    O único Pacote do Shadow recomendado ainda está em BETA teste, porém, as mais recentes versões estão seguras em um ambiente de produção e não são vulneráveis ao programa de login.

    O pacote usa a seguinte convenção para nome

    shadow-YYMMDD.tar.gz

    onde YYMMDD é a data do Pacote gerado.

    Esta versão será eventualmente Versão 3.3.3 quando é lançado o BETA teste, e é mantido por Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>. Está disponível como: shadow-current.tar.gz
    <ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-current.tar.gz>.

    Os locais de espelho seguintes também foram estabelecidos:

  • ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz
  • ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz
  • ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz
  • ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz
  • Você deveria usar a versão mais atual disponível.

    Você NÃO deve usar uma versão mais velha que o shadow-960129 como eles também tem o problema de segurança de login discutido acima.

    Quando este documento se refere ao Pacote do Shadow eu estou me referindo a este pacote. É assumido que este é o pacote que você esta usando.

    Para referência, eu usei o shadow-960129 para fazer as instruções de instalação.

    Se você estiver usando previamente o shadow-mk, você deve pegar o upgrade desta versão e reconstruir tudo do que você compilou do original.

    3.3. O que é incluído no Pacote do Shadow.

    O Pacote do Shadow contém programas de substituição para:

    su, login, passwd, newgrp, chfn, chsh, e id

    O pacote também contém os programas novos:

    chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod,, groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv e pwunconv

    Adicionado, a biblioteca: libshadow.a é incluído para escrever e/ou copilar os programas que precisam ter acesso ao passwords de usuário.

    Também, as páginas manuais para os programas são incluídas.

    Também há um arquivo de configuração para o programa de login que será instalado como /etc/login.defs.

    4. Compilando os programas.

    4.1. Descompactando o arquivo.

    O primeiro passo depois de obter o pacote é descompactando. O pacote está com o formato tar (arquivo de fita) e usa compressão gzip, então primeiro mova para /usr/src, e digita:

    tar -xzvf shadow-current.tar.gz

    Isto descompactará no diretório: /usr/src/shadow-YYMMDD

    4.2. Configurando o arquivo de config.h

    A primeira coisa que você precisa fazer é copiar antes do Makefile o arquivo de config.h:

           cd /usr/src/shadow-YYMMDD
           cp Makefile.linux Makefile
           cp config.h.linux config.h
    

    Então você deve dar uma olhada no arquivo config.h. Este arquivo contém definições para algumas das opções de configuração. Se você está usando o pacote recomendado, eu recomendo que você desabilite o suporte ao shadow de grupo durante a sua primeira vez.

    Por default o shadow de grupo de usuários está habilitada. Desabilite editando o arquivo config.h, e altere o #define SHADOWGRP para #undef SHADOWGRP. Eu recomendo que você desabilite para começar, e então se você realmente quiser passwords de grupo e administradores de grupo você habilite depois e recompile. Se você manter habilitado, você deve criar o arquivo /etc/gshadow.

    Habilitando a opção de passwords longa NÃO é recomendado como discutido acima.

    NÃO altere a colocação: #undef AUTOSHADOW

    A opção AUTOSHADOW foi projetada originalmente de forma que programas que ignoram o shadow ainda funcionaria. Isto soa bem em teoria, mas não trabalha corretamente. Se você habilita esta opção, e o programa roda como root, pode chamar o getpwnam() como root, e depois escrever modificações de entrada no arquivo /etc/passwd (com não é um shadow-password). Tais programas incluem chfn e chsh. (Você não possa ir ao redor disto trocando a realidade e uid efetivos antes de chamar o getpwnam() porque o raiz pode usar chfn e chsh também.)

    A mesma advertência também é válida se você está construindo libc, tem uma opção SHADOW_COMPAT que faz a mesma coisa. Não deveria ser usado! Se você começa codificando passwords dentro do seu arquivo /etc/passwd, este é o problema.

    Se você está usando uma versão do libc anterior ao 4.6.27, você precisará fazer mais mudanças no config.h e no Makefile. Para o config.h edite e mude:

           #define HAVE_BASENAME
    
      para:
    
           #undef HAVE_BASENAME
    

    E então no Makefile, mude:

           SOBJS = smain.o env.o entry.o susetup.o shell.o \
                   sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
    
           SSRCS = smain.c env.c entry.c setup.c shell.c \
                   pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \ tz.c hushed.c
    
           SOBJS = smain.o env.o entry.o susetup.o shell.o \
                   sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o
    
           SSRCS = smain.c env.c entry.c setup.c shell.c \
                   pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \ tz.c hushed.c basename.c
    

    Estas mudanças somam ao código contido em basename.c que é contido na libc 4.6.27 depois.

    4.3. Fazendo copias de backups de seus programas originais.

    Também seria uma boa idéia por segurança fazer copias de backup de programas que o pacote do shadow substituirá. Em um sistema Slackware 3.0 são estes:

  • /bin/su
  • /bin/login
  • /usr/bin/passwd
  • /usr/bin/newgrp
  • /usr/bin/chfn
  • /usr/bin/chsh
  • /usr/bin/id
  • O pacote BETA tem uma opção de save no Makefile, mas é comentado por fora porque as distribuições diferentes colocam os programas em diferentes lugares.

    Você também deveria fazer um copiado de backup do seu arquivo /etc/passwd, mas seja cuidadoso ao nomear ele para qualquer outra coisa se você coloca ele no mesmo diretório você não poderá digitar o comando passwd.

    4.4. Rodando o make

    Você precisa estar logado como root para fazer a maior parte da instalação.

    Rode o make para copilar os executavéis do pacote:

        make all
    
    Você pode ver a advertência: rcsid definida mas não usado. Isto está bem, isto, acontece porque o autor está usando um pacote de controle da versão.

    5. Instalando

    5.1. Tenha um disco de boot à mão no caso de você quebrar qualquer coisa.

    Se algo acontecer terrivelmente errado, é bom ter à mão o disquete de boot. Se você tem uma combinação de boot/root de sua instalação, isso será útil, caso contrário veja o Bootdisk-HOWTO <http://sunsite.unc.edu/mdw/HOWTO/Bootdisk-HOWTO.html>, o qual descreve como fazer um disco de boot.

    5.2. Páginas do man removidas

    Você também deve mover as páginas de manuais que serão substituídas. Até mesmo se você é bastante valente para instalar o Pacote do Shadow sem fazer backups, você ainda ira quererá as páginas de manuais velhas removidas. As novas páginas de manuais não são regularmente elaborada como as velhas porque as velhas estão provávelmente comprimidas.

    Você pode usar uma combinação de: do comando man -aW que localiza o comando para localizar as páginas de manuais que precisam ser (re)movidas. Geralmente é mais fácil obte-las as mais velhas antes de você rode o make install.

    Se você está usando a distribuição Slackware 3.0, então as páginas de manuais, você quer remover são:

  • /usr/man/man1/chfn.1.gz
  • /usr/man/man1/chsh.1.gz
  • /usr/man/man1/id.1.gz
  • /usr/man/man1/login.1.gz
  • /usr/man/man1/passwd.1.gz
  • /usr/man/man1/su.1.gz
  • /usr/man/man5/passwd.5.gz
  • Também pode haver páginas de man do mesmo nome nos sub-diretórios /var/man/cat[1-9] que também devem ser apagados.

    5.3. Rodando o make install

    Você está agora pronto para isto: (faça isto como root)

        make install
    
    Isto instalará o novo e substituirá programas e fixar os arquivos de permissão. Também ira instalar as páginas do man.

    Isto também leva ao cuidado de instalar o Pacote do Shadow incluir os arquivos nos lugares corretos em /usr/include/shadow.

    Usando o pacote BETA você têm que copiar o arquivo manualmente login.defs para o sub-diretório /etc e tem certeza que somente o root pode fazer mudanças nele.

        cp login.defs /etc
        chmod 700 /etc/login.defs
    

    Este arquivo é o arquivo de configuração para o programa de login. Você deve revisar e faz mudanças neste arquivo para o seu sistema particular. Isto é onde você decide que o root de qual tty pode logar-se, e definir outras colocações de política de segurança (como vencimento de password defaults).

    5.4. Rodando o pwconv

    O próximo passo é rodar o pwconv. Isto também deve ser feito como root, e é melhor usado dentro do sub-diretório /etc:

        cd /etc
        /usr/sbin/pwconv
    

    pwconv leva o seu arquivo /etc/passwd e tira os campos para os dois arquivos: /etc/npasswd e /etc/nshadow.

    Um programa pwunconv também é provido se você precisar fazer do arquivo de saída /etc/passwd uma combinação do /etc/passwd e do /etc/shadow.

    5.5. Renomeando o npasswd e o nshadow

    Agora que você rodou o pwconv ele criou os arquivos /etc/npasswd e /etc/nshadow. Estes precisam ser copiados em cima do /etc/passwd e do /etc/shadow. Nós também queremos fazer um copia auxiliar do arquivo original /etc/passwd, e ter a certeza que somente o root pode ler. Nós poremos o backup no diretório home do root.

        cd /etc
        cp passwd ~passwd
        chmod 600 ~passwd
        mv npasswd passwd
        mv nshadow shadow
    

    Você também deve assegurar que as propriedades de arquivo e permissões estão corretos. Se você vai estar usando o X-Windows, os programas xlock e o xdm precisam poder ler o arquivo de Shadow (mas não escrever).

    Há dois modos para isto ser feito. Você pode setar o xlock para suid do root (xdm normalmente é rodado de qualquer maneira como root). Ou você pode fazer o arquivo de shadow possuír um grupo de root para o shadow, mas antes de você fazer isto, tenha certeza que você tem um grupo de shadow (olhar em /etc/group). Nenhum dos usuários no sistema devem estar de fato no grupo do shadow.

         chown root.root passwd
         chown root.shadow shadow
         chmod 0644 passwd
         chmod 0640 shadow
    

    O seu sistema tem o arquivo de password agora para o shadow. E você deveria estar agora em um outro terminal virtual e verificar se você pode se logar.

    Realmente, faça isto agora!

    Se você não pode, então algo está errado! Volte as declarações do não-shadow, e faça o seguinte:

        cd /etc
        cp ~passwd passwd
        chmod 644 passwd
    

    Você restabeleceria os arquivos que você salvou antes das mudanças.

    6. Outros programas que você pode precisar melhorar ou consertar(patch)

    Embora o pacote do shadow contem programas de substituição para a maioria programas que precisam ter acesso ao passwords, há alguns programas adicionais que a maioria dos sistemas requerem ter acesso a passwords.

    Se você está rodando uma Distribuição do Debian (ou até mesmo se você não esta), você pode obter as fontes de programas para o Debian que precisam ser reconstruidos em: ftp://ftp.debian.org/debian/stable/source/

    O remanescente desta seção discute como pegar o upgrade do adduser, wu_ftpd, ftpd, pop3d, xlock, xdm e sudo de forma que eles suportem o pacote do shadow.

    Veja a seção ``Adicionando Suporte Shadow para um programa em C'' para discussão em como por o suporte de shadow em qualquer outro programa que tenha estas necessidades (embora o programa deve ser rodado com SUID de root ou SGID de shadow e então pode ter acesso ao arquivo de shadow).

    6.1. Programa Slackware adduser

    As Distribuições de Slackware (e possivelmente alguns outros) contem um programa interativo para adicionar usuários chamado de /sbin/adduser. Uma versão deste programa para o shadow pode ser obtida em ftp://sunsite.unc.edu/pub/Linux /system/Admin/accounts/adduser.shadow-1.4.tar.gz.

    Eu encorajaria que você a usar os programas que são vem com o Pacote do Shadow (useradd, usermod, e userdel) em vez do programa slackware adduser. Leva um pouco de tempo para aprender a usar, mas é bom o preço do esforço porque você tem muito mais controle e eles executam o arquivo formal fechado do /etc/passwd e o arquivo /etc/shadow (o adduser não faz).

    Veja a seção em ``Colocando o Pacote do Shadow para usar'' para mais informações.

    Mas se você quiser, aqui é o que tem que fazer:

        tar -xzvf adduser.shadow-1.4.tar.gz
        cd adduser
        make clean
        make adduser
        chmod 700 adduser
        cp adduser /sbin
    

    6.2. O Servidor wu_ftpd

    A maioria dos sistemas de Linux tem algum servidor de wu_ftpd. Se sua distribuição não vem com o shadow instalado, então seu wu_ftpd não está compilado para o shadow. O wu_ftpd é rodado do inetd/tcpd como um processo root. Se você está rodando um daemon do velho wu_ftpd, você irá querer melhoras de qualquer maneira porque quanto mais velho tiver um bug pode permitiri que a conta de root esteja compromissada(Para mais info veja a home page Segurança do Linux <http://bach.cis.temple.edu/linux/linux-security/Linux - Security-FAQ/Linux-wu.ftpd-2.4-Update.html>).

    Afortunadamente, você só precisa adquirir o código fonte e recompilar com o Shadow habilitado.

    Se você não está correndo um sistema ELF, O servidor wu_ftp pode ser achado na Sunsite como wu-ftp-2.4-fixed.tar.gz
    <ftp://sunsite.unc.edu/pub/Linux/system/Network/file- transfer/wu-ftpd-2.4-fixed.tar.gz>

    Uma vez wue você recobrar o servidor, ponha em /usr/src, digite:

      cd /usr/src
      tar -xzvf wu-ftpd-2.4-fixed.tar.gz
      cd wu-ftpd-2.4-fixed
      cp. /src/config/config.lnx.shadow ./src/config/config.lnx
    

    Então edite ./src/makefiles/Makefile.lnx, e mude a linha:

        LIBES = -lbsd -support
    
      para:
    
           LIBES = -lbsd -support
    

    Agora você está pronto para rodar o script de construção(build) e instalar:

        cd /usr/src/wu-ftpd-2.4-fixed
        /usr/src/wu-ftp-2.4.fixed/build lnx
        cp /usr/sbin/wu.ftpd  /usr/sbin/wu.ftpd.old
        cp ./bin/ftpd  /usr/sbin/wu.ftpd
    

    Isto usa o arquivo de configuração do shadow Linux, compila e instala o servidor.

    No meu sistema Slackware 2.3 eu também tive que fazer o seguinte antes de rodar a construção:

           cd /usr/include/netinet
           ln -s in_systm.h in_system.h
           cd -
    

    Foram informados problemas de compilação deste pacote debaixo de sistemas ELF, mas a versão Beta do próximo lançamento trabalha bem. Pode ser achado como wu-ftp-2.4.2-beta-10.tar.gz
    <ftp://tscnet.com/pub/linux/network/ftp/wu-ftpd-2.4.2-beta-10.tar.gz>

    Uma vez que você obtenha o servidor, ponha em /usr/src, digite:

        cd /usr/src
        tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz
        cd wu-ftpd-beta-9
        cd ./src/config
    
      Então edite config.lnx, e mude:
    
           #undef SHADOW.PASSWORD
    
      para:
    
           #define SHADOW.PASSWORD
    
      Então,
    
           cd ../Makefiles
    
      e edite o arquivo Makefile.lnx e mude:
    
           LIBES = -lsupport -lbsd #-lshadow
    
      para:
    
           LIBES = -lsupport -lbsd -lshadow
    
      Então construa e instale:
    
           cd..
           build lnx
           cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
           cp ./bin/ftpd /usr/sbin/wu.ftpd
    

    Nota que você deve conferir seu arquivo /etc/inetd.conf para ter certeza se o seu servidor de wu.ftpd realmente esta vivo. Foi informado que algumas distribuições colocam daemons de servidor em lugares diferentes, e então o wu.ftpd pode ser nomeado com qualquer outra nome em particular.

    6.3. Ftpd standard

    Se você está correndo o servidor ftpd standard, eu recomendaria que você faça upgrade do seu servidor de wu_ftpd. Aparte de bug conhecido e discutido, geralmente é pensado que está mais seguro.

    Se você insiste no standard, ou você precisa de suporte NIS, na Sunsite tem o ftpd-Shadow-nis.tgz
    <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/ftpd-Shadow-nis.tgz>

    6.4. pop3d (Protocolo de Agência Postal 3)

    Se você precisa apoiar ao terceiro Protocolo de agência postal (POP3), você vai precisar recompilar o programa pop3d. O pop3d normalmente são rodados no inetd/tcpd como root.

    Há duas versões disponíveis na Sunsite: pop3d-1.00.4.linux.shadow.tar.gz
    <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/pop3d-1.00.4.linux.shadow.tar.gz> e pop3d+shadow+elf.tar.gz Ambos são bastantes fáceis de instalar.

    6.5. xlock

    Se você instalar o pacote do shadow, e então rodar X Window System e a tela travar você tem que fazer o upgrade do seu xlock, você terá que usar CNTL-ALT-Fx para ir para outro tty, logar-se, e matar o processo xlock (ou usa CNTL-ALT-BS para matar o servidor X). Afortunadamente é bastante fácil fazer o upgrade do seu programa de xlock.

    Se você está rodando o XFree86 Versões 3.x.x, você provavelmente está usando xlockmore (que é um grande screen-saver além de so permitir o acesso ao usuário que estava usando lock por password do usuário). O pacote de shadow tem o suporte recopilado. Se você tem um xlock mais velho, Eu recomendo que você melhore este.

    xlockmore-3.5.tgz estão disponível em:
    <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz>

    Basicamente, isto é o que você precisa fazer:

    Adquira o arquivo xlockmore-3.7.tgz e descompacte em /usr/src:

           tar -xzvf xlockmore-3.7.tgz
    

    Edite o arquivo: /usr/X11R6/lib/X11/config/linux.cf, e muda a linha:

           #define HasShadowPasswd NO
    
           para
    
           #define HasShadowPasswd YES
    

    Então construa(build) os executavéis:

           cd /usr/src/xlockmore
           xmkmf
           make depend
           make
    

    Então passe todos para atualizar as propriedades do arquivo de permissões:

           cp xlock /usr/X11R6/bin/
           cp XLock /var/X11R6/lib/app-defaults /
           chown root.shadow /usr/X11R6/bin/xlock
           chmod 2755 /usr/X11R6/bin/xlock
           chown root.shadow /etc/shadow
           chmod 640 /etc/shadow
    

    Seu xlock irá rodar agora corretamente.

    6.6. xdm

    xdm é um programa que apresenta uma tela de login para o X-Windows. Alguns sistemas começam o xdm quando o sistema é rodado um nível de goto especifico (veja /etc/inittab).

    Com o Pacote do Shadow instalo, xdm precisará ser atualizado.
    Afortunadamente é bastante fácil de melhorar o seu programa de xdm.

    xdm.tar.gz está disponível em:
    <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz>

    Pegue o arquivo xdm.tar.gz ponha em /usr/src, então descompacte:

       tar -xzvf xdm.tar.gz
    
      Edite o arquivo: /usr/X11R6/lib/X11/config/linux.cf, e muda a linha:
    
    
           #define HasShadowPasswd NO
    
           para
    
           #define HasShadowPasswd YES
    
      Então construa(build) os executáveis:
    
           cd /usr/src/xdm
           xmkmf
           make depend
           make
    
      Então passe tudo para o lugar correto:
    
      cp xdm /usr/X11R6/bin/
    

    xdm é rodado como root assim você não precisa mudar as permissões do arquivo.

    6.7. sudo

    O programa sudo permite que um administrador de sistema deixe rodar programas por usuários que requerem acesso de root normalmente. Isto é uma mão porque deixa para o administrador limitar o acesso para a conta de root enquanto ainda permite que os usuários façam coisas como montar drivers.

    O sudo precisa ler passwords porque verifica se password de usuários quando invocado. O sudo já roda SUID de root e têm acesso assim ao arquivo de /etc/shadow que não é um problema.

    O sudo para o pacote do shadow, está disponível em:
    <ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz>

    Advertência: Quando você instala o sudo o seu arquivo de /etc/sudoers será substituído por um default, assim você precisa fazer um backup dele se você tem adicionando qualquer coisa no default. (você também poderia editar o Makefile e remover a linha que copia o arquivo default para o /etc).

    O pacote já é configurado para Shadow, assim tudo que é requerido é recopilar o pacote (ponha em /usr/src):

           cd /usr/src
           tar -xzvf sudo-1.2-shadow.tgz
           cd sudo-1.2-shadow
           make all
           make install
    

    6.8. imapd (Pacote de E-mail Pine)

    O imapd é um servidor de e-mail semelhante ao pop3d. imapd vem com o Pacote de E-mail Pine. A documentação que vem com este pacote que a falta para sistemas Linux é incluir o suporte para o shadow.
    Porém, eu achei que isto não era verdade. Além disso, o script de construção(build)/Makefile combinado neste pacote é faz com muita dificuldade adicionar a biblioteca de libshadow.a quando recopilado, assim eu estava impossibilitado de adicionar o suporte de shadow ao imapd.

    Se qualquer um tem conseguido, por favor E-mail para mim, e eu incluirei a solução aqui.

    6.9. pppd (Servidor de Protocolo Ponto-a-Ponto)

    O servidor pppd pode ser configurado para usar vários tipos de autentificação:
    Protocolo de Autenticação de Password (PAP) e Protocolo Cryptographic Handshake (CHAP). O servidor de pppd normalmente lê as strings de password que usa de /etc/ppp/chap-secretes e/ou de /etc/ppp/pap-secrets. Se você está usando este comportamento por default do pppd, não é necessário reinstalar pppd.

    O pppd também lhe permite usar o parâmetro de login (ou no comando de linha, ou na configuração ou arquivos de opções). Se a opção de login é determinado, então pppd usarão o arquivo /etc/passwd para o username e passwords para o PAP. Isto, claro que, não irá trabalhar agora com o nosso arquivo de password é shadow. Para o pppd-1.2.1d isto requer adicionar o código de suporte ao shadow.

    O exemplo cedido na próxima seção está adicionado o suporte ao Shadow para pppd-1.2.1d (uma versão mais velha do pppd).

    O pppd-2.2.0 já contêm o suporte ao shadow.

    7. Colocando o Pacote do Shadow para usar.

    Esta seção discute algumas das coisas que você quer saber agora que você tem o Pacote do Shadow instalado em seu sistema. E é contida mais informações nas páginas de manuais para cada comando.

    7.1. Adicionando, Modificando e deletando os usuários

    O Pacote do Shadow adiciona a linha de comando a seguinte orientação de comandos para adicionar, modificar, e deletar os usuários. Você também pode ter instalado o programa de adduser.

    7.1.1. useradd

    O comando de useradd pode ser usado para adicionar os usuários no sistema. Você também pode invocar este comando para mudar as colocações default.

    A primeira coisa que você deve fazer é examinar as colocações default e fazer as mudanças específicas para o seu sistema:

        useradd -D
    
    GROUP=1 HOME=/home INACTIVE=0 EXPIRE=0 SHELL= SKEL=/etc/skel

    As default provavelmente não são o que você quer, assim se você começar adicionando usuários agora você terá que especificar toda a informação para cada usuário.
    Porém, nós podemos e devemos mudar os valores default.

    No meu sistema:

  • Eu quero o grupo default para ser 100
  • Eu quero que as passwords expirem em 60 dias
  • Eu quero fechar uma conta porque a password foi expirada
  • Eu quero definir o shell para ser /bin/bash
  • Para fazer estas mudanças eu usaria:

           useradd -D -g100 -e60 -f0 -s/bin/bash
    
      Agora rodando o useradd -D ele mostrará:
    
    GROUP=100 HOME=/home INACTIVE=0 EXPIRE=60 SHELL=/bin/bash SKEL=/etc/skel

    Por via das dúvida você quiser saber, estes defaults estão armazenadas no arquivo /etc/default/useradd.

    Agora você pode usar useradd para adicionar os usuários no sistema. Por exemplo, para adicionar o usuário fred com o defaults, você usa o seguinte:

        useradd -m -c "Fred Flintstone" fred
    
      Isto irá criar a seguinte entrada no arquivo /etc/passwd:
    
           fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
    
      E a seguinte entrada no arquivo /etc/shadow:
    
           fred:! :0:0:60:0:0:0:0
    

    O diretório home do fred será criado e os conteúdos de /etc/skel seram copiados para lá por causa da opção -m.

    Também, desde que nós não especificamos uma UID, o próximo disponível será usado.

    A conta do fred é criada, mas fred ainda não será capaz de se logar até que nós destrancarmos a conta. Nós fazemos isto mudando a password.

        passwd fred
    
    Changing password for fred Enter the new password (minimum of 5 characters) Please use a combination of upper and lower case letters and numbers. New Password: ******* Re-enter new password: *******
    Agora o /etc/shadow conterá: fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0 Observação: Na passoword use combinação de letras maiúsculas e minúsculas e números.

    E fred será capaz de logar e usar o sistema. A coisa agradável sobre useradd e os outros programas que vêm com o Pacote do Shadow é que eles fazem mudanças nos arquivos /etc/passwd e no /etc/shadow automaticamente. Assim se você está adicionando um usuário, e outro usuário está mudando a password dele ao mesmo tempo, serão executadas ambas as operações corretamente.

    Você deve usar os comandos providos em lugar de editar diretamente o /etc/passwd e o /etc/shadow. Se você estiver editando o arquivo /etc/shadow, e um usuário mudar a password dele enquanto você está editando, e então você salvar o arquivo que você estava editando, o usuário que mudou a password será perdida.

    Aqui é uma pequeno script para adicionar usuários usando o useradd e passwd:


    # #/sbin/newuser - Um script para adicionar os usuários para usar o sistema com # o Pacote do Shadow com os comandos useradd e passwd. # #Escrito por Mike Jackson <mhjack@tscnet.com> como um exemplo # para o Linux Password Shadow Howto. Permissão concedida para usar e modificar expressamente. # #Isto pode ser modificado para mostrar os defaults e permitir modificações semelhantes #para o programa Slackware Adduser. Também poderia ser modificado para desaprovar #entradas estúpidas. (i.e. checagem de erros) # ## #Defaults para o comando useradd ## GROUP=100 #Grupo Default HOME=/home #localização do diretório home (/home/username) SKEL=/etc/skel #Diretório do Esqueleto INACTIVE=0 # Dias depois que a password expirar para desabilitar (0=nunca) EXPIRE=60 #dias que será mantida a password SHELL=/bin/bash #shell default (caminho completo) ## #Defaults para o comando passwd ## PASSMIN=0 #dias para mudanças de password PASSWARN=14 #dias antes da password expirar uma advertência é determinada ## #Assegure que o script esta rodando como root. ## WHOAMI = ` /usr/bin/whoami` if [$WHOAMI != "root"]; then echo "Você deve ser root para adicionar os novos usuários!" exit 1 fi ## # Pedindo a conta (o username) e o nome_completo (fullname). ## echo "" echo -n "Username: " read USERNAME echo -n "Nome Completo: " read FULLNAME # echo " Adicionando o usuário: $USERNAME ". # #Nota que o " " ao redor do $FULLNAME é requerido porque este campo é #quase sempre contem pelo menos um espaço, e sem o "' s #o comando de useradd pensaria que você que mover para o próximo #parâmetro quando alcançar o caráter espaço. # /usr/sbin/useradd -c"$FULLNAME " -d$HOME/$USERNAME -e$EXPIRE \ -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME ## #Setando uma password defaults ## /bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1 ## #Deixe o comando passwd de fato pedir a password (duas vezes) ## /bin/passwd $USERNAME ## #Exibindo tudo ## echo "" echo "Entrada no /etc/passwd: " echo -n "" grep "$USERNAME:" /etc/passwd echo "Entrada no /etc/shadow:" echo -n "" grep "$USERNAME:" /etc/shadow echo " Sumária de saída do comando passwd: " echo -n " " passwd -S $USERNAME echo ""

    Usar um script para adicionar novos usuários realmente é muito mais preferível que editar os arquivos /etc/passwd ou /etc/shadow diretamente ou usando um programa como o programa Slackware adduser. Sinta se livre para usar e modificar este script para o seu sistema em particular.

    Para mais informação sobre o useradd online veja as páginas de manual.

    7.1.2. usermod

    O programa usermod é usado para modificar as informação sobre um usuário. As opções são semelhantes ao programa useradd.

    Digamos que você quer mudar o shell do fred, você faria o seguinte:

    usermod -s /bin/tcsh fred Agora o arquivo /etc/passwd na entrada de fred teria a seguinte mudança: Fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh Façamos a conta do fred expirar em 09/15/97: usermod -e 09/15/97 fred Agora a entrada do fred no /etc/shadow se tornaria: fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0

    Para mais informação sobre o comando usermod veja o manual online de página.

    7.1.3. userdel

    O userdel faz o que você esperaria, deleta a conta do usuário. Você simplesmente usa:

        userdel -r username
    

    O -r causa que todos os arquivos no diretório home do usuário serão removidos junto com o próprio diretório home dele. Os arquivos localizados em outras partes do sistema terão que ser procurado e apagadas manualmente.

    Se você quer fechar a conta simplesmente em lugar de apagar, use o comando passwd.

    7.2. O comando passwd e o passwd antigo.

    O comando passwd tem óbivamente váriaveis de passwords.
    Adicionalmente, é usado pelo usuário de root para:

  • Trancar e destrancar contas (-l e -u)
  • Setar o número máximo de dias que uma password permanece válida (-x)
  • Setar os dias mínimos entre mudanças de Password (-n)
  • Setar o número de dias de advertência para que uma password que está aproximadamente expirada (-w)
  • Setar o número de dias depois da password expirada antes que a conta seja fechada (-i)
  • Visualizar as informações de uma conta em um formato mais claro (-S)
  • Por exemplo, vamos olhar novamente o fred

           passwd fred de -S
           fred P 03/04/96 0 60 0 0
    

    Isto significa que a password do fred é válida, foi mudado por último em 03/04/96, pode ser mudado a qualquer hora, e expira depois de 60 dias, não será advertido o fred, e e a conta não será incapacitada quando a password expirar.

    Isto simplesmente diz que se fred logar depois da password expirar, ele será recebido com o prompet pedindo uma nova password de login.

    Se nós decidirmos que queremos advertir o fred 14 dias antes da password dele expirar e fazer para a conta dele seja inativalo de 14 dias depois que ele deixe expirar, nós precisaríamos fazer o seguinte:

           passwd -w14 -i14 fred
    
      Agora fred é mudado para:
           fred P 03/04/96 0 60 14 14
    

    Para mais informação sobre o comando passwd veja a página de manual online.

    7.3. O arquivo de login.defs.

    O arquivo /etc/login é o arquivo de configuração para o programa de login e também para o Pacote do Shadow como um todo.

    /etc/login contém configurações para o uso de prompts que estarão fechados por default de expiração e o que o vencimento será usando quando um usuário muda a password dele.

    O arquivo de /etc/login.defs é totalmente documentado pelos comentários isso é contido dentro deleo. Porém, há alguns coisas para notar:

  • Contém flags que podem ser alterados para on ou off determinando sobre os logins.
  • Contém ponteiros para outros arquivos de configuração.
  • Contém omições default para tarefas de como envelhecer uma password.
  • Acima você pode ver que este é um arquivo bastante importante, e que você deve ter certeza que esta presente, e que as configurações são as que você deseja para o seu sistema.

    7.4. Grupo de Passwords.

    O arquivo /etc/groups pode conter passwords que permitem que um usuário se torne um sócio de um grupo em particular. Esta função é habilitada se você define a constante SHADOWGRP no arquivo /usr/src/shadow- YYMMDD/config.h.

    Se você definir esta constante e então compilar, você tem que criar um arquivo /etc/gshadow para segurar as passwords do grupo e informações sobre admnistração do grupo.

    Quando você criou o /etc/shadow, você usou um programa chamado pwconv, lá não há nenhum programa equivalente para criar o arquivo /etc/gshadow , mas isto realmente não importe, basta ter cuidado.

    Crie o arquivo /etc/gshadow inicialmente faça o seguinte:

           touch /etc/gshadow
           chown root.root /etc/gshadow
           chmod 700 /etc/gshadow
    

    Uma vez que você criou grupos novos, eles serão adicionado ao arquivo /etc/group e ao /etc/gshadow. Se você modificar um grupo adicionando ou removendo usuários ou mudando a password de grupo, o arquivo /etc/gshadow será mudado.

    Os programas para grupos groupadd, groupmod, e groupdel são providos como parte do Pacote do Shadow para modificar grupos.

    O formato do arquivo de /etc/group é como que segue:

        groupname:! :GID:member,member,...
    
      Onde:
    
         groupname
            O nome do grupo
    
         !  O campo que normalmente assegura a password, mas isso é agora
          mudado no arquivo  /etc/gshadow.
    
         GID
            O número ID do grupo
    
         member
            Lista de membros do grupo
    
      O formato do arquivo de /etc/gshadow é como o que segue:
    
           groupname:password:admin,admin,... :member,member,...
    
      Onde:
    
         groupname
            O nome do grupo
    
         Password
            A password do grupo codificada.
    
         admin
            Lista de administradores do grupo
    
         member
            Lista dos membros do grupo
    

    O comando gpasswd só é usado para adicionar ou remover os administradores e membros de um grupo. O root ou alguém na lista de administradores podem adicionar ou remover membros do grupo.

    A password de grupos que usa o comando passwd pode ser mudada através do root ou de qualquer administrador listado na lista do grupo.

    Apesar do fato que não há uma página de manual atualmente para gpasswd, digitando gpasswd sem qualquer parâmetro dá um listando de opções. É bastante fácil entender como tudo funciona se uma vez você entender o formato do arquivo e os conceitos.

    7.5. Consistência de checagem dos programas

    7.5.1. pwck

    O programa pwck é provido para prover um cheque de consistência nos arquios /etc/passwd e /etc/shadow. Conferirá cada username e verifica o seguinte:

  • O número correto de campos
  • O nome de usuário é igual
  • Se usuário válido e identificador do grupo
  • Grupo primário válido
  • Diretório home válido
  • Shell de login válido
  • Também advertirá de qualquer conta que não tem nenhuma password.

    É uma boa idéia rodar o pwck depois de instalar o Pacote do Shadow.
    É também uma boa idéia rodar isto periodicamente, talvez semanalmente ou mensalmente. Se você usar a opção -r, você pode usar cron para rodar em uma base regular de relatório será remetido para você.

    7.5.2. grpck

    grpck é o programa que confere a consistência dos arquivos /etc/group e /etc/gshadow. Executa o checape sobre o seguinte:

  • O número correto de campos
  • Nome de grupo é igual
  • Lista válida de membros e administradores
  • Também tem a opção de -r para relatórios automatizados.

    7.6. Passwords Dial-Up

    Dial-up de passwords é outra linha opcional de defesa para sistemas isso permite acesso a dial-up. Se você tem um sistema que permite que muitas pessoas possam conectar localmente ou por uma network, mas você quer limitar que possam discar e possam conectar, então dial-up passwords é para você. Para habilitar passwords, você tem que editar o arquivo /etc/login.defs e mudar o DIALUPS_CHECK_ENAB para yes.

    Dois arquivos contêm informação para dial-up, /etc/dialups que contém o ttys (um por linha, com o "/dev/" principal removido). Se um tty é listado então dial-up de checapes é executado.

    O segundo arquivo é o arquivo /etc/d_passwd. Este arquivo contém o nome de caminho completamente qualificado de um shell, seguido por uma password opcional.

    Se um usuário anota em uma linha que é listada em /etc/dialups, e seu shell é listado no arquivo /etc/d_passwd que lhe permitirá o acesso só através de suppling da password correta.

    Outro propósito útil para usar passwords poderia ser a ligação de um tipo de conexão(talvez um PPP ou conexão de UUCP). Se um usuário tenta adquirir outro tipo de conexão (i.e. uma lista de shells), ele tem que saber a password para usar a linha.

    Antes de você possa usar as caracteísticas do dial-up, você tem que criar os arquivos.

    O comando dpasswd é definido para nomear as passwords dos shells no arquivo /etc/d_passwd. Veja a página de manual para mais informação.

    8. Adicionando o suporte do Shadow em um programa C

    O suporte do shadow para ser adicionado em um programa é realmente bastante direto. O único problema é que o programa deve ser rodado através do root (ou ter a SUID do root) para que o o programa possa ter acesso ao arquivo /etc/shadow.

    Isto representa um grande problema: práticas de programação muito cuidadosas devem ser seguidas quando criamoso programas com SUID. Por exemplo, se um programa tem uma fuga de shell, isto não deve acontecer como root se o programa é SUID de root.

    Para adicionar suporta de shadow para um programa de forma que isto pode conferir passwords, mas caso contrário precisar rodar como root, é muito mais seguro rodar o programa com SUID de shadow. O programa xlock é um exemplo.

    No exemplo dado abaixo, o pppd-1.2.1d já roda SUID como root, assim adicionando o suporte do shadow não deveria tornar o programa mais vulnerável.

    8.1. Arquivos Header

    Os arquivos de header devem residir em /usr/include/shadow. Lá deve ter também um /usr/include/shadow.h, mas será um vínculo simbólico para/usr/include/shadow/shadow.h.

    Para adicionar o suporte do shadow a um programa, você precisa incluir os arquivos header:

      #include <shadow/shadow.h>
      #include <shadow/pwauth.h>
    

    Poderia ser uma boa idéia para usar diretivas de compilador condicionalmente para copilar o código do Shadow (eu faço isto no exemplo abaixo).

    8.2. biblioteca libshadow.a

    Quando você instala o Pacote do Shadow o arquivo libshadow.a é criado e instalado em /usr/lib.

    Quando copilado o suporte do shadow em um programa, o linker precisa ser incluido a biblioteca libshadow no vínculo.

    Isto é feito assim:

           gcc programa.c -o programa -lshadow
    

    Porém, como nós veremos no exemplo abaixo, o uso de muitos programas grandes de um Makefile, normalmente tem uma variável chamado LIBS =... que nós vamos modificar.

    8.3. Estrutura do Shadow

    A biblioteca libshadow.a usa uma estrutura que chama o spwd que recorre a informação ao arquivo /etc/shadow. Isto é a definição da estrutura de header do arquivo spwd em /usr/include/shadow/shadow.h:


    struct spwd { char *sp_namp; /*nome do login */ char *sp_pwdp; / * password codificada */ sptime sp_lstchg; / * data de última mudança * / sptime sp_min; / * número mínimo de dias entre mudanças * / sptime sp_max; / * número máximo de dias entre mudanças * / sptime sp_warn; / * nmero de dias de advertncia antes da password expirar * / súptime sp_inactê; / * nmero de dias depois que a password expirar at qúue a conta se torna bloqueada. * / sptime sp_expire; / * dias desde 1/é1/70 at a conta expirar */ unsigned long sp_flag; / * reservado para uso futuéro * / }

    O Pacote do Shadow h pouco pode por coisas no campo sp_pwdp alm do passwd codificado. Oá campo password poderia conter:

    é

           username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::
    

    Isto significa que alm da password, o programa /sbin/extra deveria ser chamado péara autentificaão adicional. O programa chamado passado o username e uma opão que indica çpor que est sendo échamado. Veja o arqçuivo /usr/include/shadow/ápwauth.h e o cdigo de fonte para pwauth.c para mais informaão.

    ó ç O que isto significa que nós deveramos usar a funão pwauth para executar a autentificéaão aítual, cçomo levar ao cuidado da autentificaão secundria. O exemplo abaixo çfaz isto.

    áç á O autor do Pacote do Shadow indica que desde ento a maioria dos programas existentes no faz isto, e que pode sãer removido ou pode ser mudado em verses fãuturas do Pacote do Shadow.

    õ 8.4. Funões de Shadow

    ç O arquivo shadow.h tambm contém os prottipos da funão para as funões que contiveram éna biblióotecça libshadow.a:

    ç
    
    extern void setspent __P ((void)); extern void endspent __P ((void)); extern struct spwd *sgetspent __P ((__const char *__string)); extern struct spwd *fgetspent __P ((FILE *__fp)); extern struct spwd *getspent __P ((void)); extern struct spwd *getspnam __P ((__const char *__name)); extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));

    A funão que ns vamos usar no exemplo : getspnam que recobrar para çóns uma estruturéa do spwd para oá nome provido.

    ó 8.5. Exemplo Este um exemplo para adicionar o suporte do shadow para um programa que pérecisa, mas no tem isto atravs default.

    ãé Este exemplo usa o Servidor de Protocolo Ponto-a-Ponto (pppd-1.2.1d), que tem um modo no qual executa autenticaão de PAP que usa o nome do usurio e a passwords do arquivo /etc/pasçswd em vez de arquivos PAP ou CHáAP.
    Voc não precisaria adicionar este cdigo para pppd-2.2.0 porque ele j êo tem.

    ó á Esta caracterstica do pppd provavelmente no é muito usada, mas se voc instalarí o Pacote do Shadow, ãno irá mais funcionar porque as pasêsword j não são mais armazenadas em /etãc/passwd.

    á O cdigo para autenticar os usurios no pppd-1.2.1d localizado no óarquivo /usr/src/ppápd-1.2.1d/ppépd/auth.c.

    O cdigo seguinte precisa ser adicionado no topo do arquivo onde todóas as outros diretivas de #include esto. Nós chamamos as diretivas atravs de #includes (i.e. s inclui sãe estamos copilando para ésuporte ao shadóow).


    #ifdef HAS_SHADOW #include #include #endif

    A prxima coisa para fazer modificar o cdigo atual. Ns estamos fazóendo mudanaés no aórquivoó auth.c.

    ç Funão auth.c antes de ser modificada:

    ç
    
    /* * login - Confira o nome de usurio e password no sistema de * banco de dados de password, eá login do usurio se o OK. *á * retorna: * UPAP_AUTHNAK: Login sem sucesso * UPAP_AUTHACK: Login com sucesso. * Em qualquer caso, msg aponta a uma mensagem apropriada. */ static int login(user, passwd, msg, msglen) char *user; char *passwd; char **msg; int *msglen; { struct passwd *pw; char *epasswd; char *tty; if ((pw = getpwnam(user)) == NULL) { return (UPAP_AUTHNAK); } /* * XXX If no passwd, let them login without one. */ if (pw->pw_passwd == '\0') { return (UPAP_AUTHACK); } epasswd = crypt(passwd, pw->pw_passwd); if (strcmp(epasswd, pw->pw_passwd)) { return (UPAP_AUTHNAK); } syslog(LOG_INFO, "user %s logged in", user); /* * Write a wtmp entry for this user. */ tty = strrchr(devname, '/'); if (tty == NULL) tty = devname; else tty++; logwtmp(tty, user, ""); /* Add wtmp login entry */ logged_in = TRUE; return (UPAP_AUTHACK); }
    A password do usurio é colocada em pw->pw_passwd, assim o que ns realmente práecisamos fazer adicionar a funão getspnam. E cóolocar a password dentro do sépwd->çsp_pwdp. Ns adicionaremos a funão pwauth para executar o autenticaão atual.
    Iósto executarç autenticaão secundria auçtomaticamente se o arquivo shadow est configurado paraá isto.

    çá á A funão auth.c depois de modificada para suportar o shadow:

    ç


    /* * login - Confira o nome de usurio e Password ao sistema de * banco de dados de password e áo login do usurio se o OK. *á * Esta funão foi modificada para suportar Pacote de Shadow Password Linux * Se o USEç_SHADOW for definido. * * retorna: * UPAP_AUTHNAK: Login sem sucesso. * UPAP_AUTHACK: Login com sucesso. * Em qualquer caso, a msg mostra uma mensagem apropriada. */ static int login(user, passwd, msg, msglen) char *user; char *passwd; char **msg; int *msglen; { struct passwd *pw; char *epasswd; char *tty; #ifdef USE_SHADOW struct spwd *spwd; struct spwd *getspnam(); #endif if ((pw = getpwnam(user)) == NULL) { return (UPAP_AUTHNAK); } #ifdef USE_SHADOW spwd = getspnam(user); if (spwd) pw->pw_passwd = spwd->sp-pwdp; #endif /* * XXX If no passwd, let NOT them login without one. */ if (pw->pw_passwd == '\0') { return (UPAP_AUTHNAK); } #ifdef HAS_SHADOW if ((pw->pw_passwd && pw->pw_passwd[0] == '@' && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL)) || !valid (passwd, pw)) { return (UPAP_AUTHNAK); } #else epasswd = crypt(passwd, pw->pw_passwd); if (strcmp(epasswd, pw->pw_passwd)) { return (UPAP_AUTHNAK); } #endif syslog(LOG_INFO, "user %s logged in", user); /* * Write a wtmp entry for this user. */ tty = strrchr(devname, '/'); if (tty == NULL) tty = devname; else tty++; logwtmp(tty, user, ""); /* Add wtmp login entry */ logged_in = TRUE; return (UPAP_AUTHACK); }
    Examine cuidadosamente para rever as mudanas que fizemos. A verso original permiti acesso (devolve çUPAP_AUTHACK se NO tem nenhumãa password no arquivo /etc/passwd. Isto no é bom,Ã porque o uso comum desta caracterstica de login usar uma conta ãpara permitir acesso para o processo de PPP eí ento éconfere o username e password providas pelo PAP com o username no arquivo de /eãtc/passwd e o password no arquivo /etc/shadow.

    Assim se ns tivéssemos fixado a verso original at rodar o shell com usurio i.e. ppp,ó ento qualquer umã podeéria adquirir uáma conexo de ppp setado pelo PAP deles para o ppp ãde um usurio com uma password de nula.

    ã á Ns também fixamos devolvendo o UPAP_AUTHNAK em vez de UPAP_AUTHACK óse o campo de password estiver vazio.

    De maneira bastante interessante, o pppd-2.2.0 tm o mesmo problema.

    ê Logo ns precisamos modificar o Makefile de forma que duas coisas aconteam:
    óç USE_SHADOW deve ser definido, e a libshadow.a precisa ser adicionada no linkamento do processo.

    Edite o Makefile, e adicione:

           LIBS = -lshadow
    
      Ento procure pela  linha:
    ã
           COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t
    
      E muda para:
    
           COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW
    

    Agora use o make e install.

    9. As Perguntas mais Freqentes.

    ü Q: Eu controlava o root atravs dol tty que poderia anotar em um arquivo /etc/securettys, mas no paréece trabalhar mais, como fazer agora?
    ã A: O arquivo /etc/securettys no faz absolutamente nada agora que o Pacote do Shadow esta instaladão. O tty que root pode usar agora localizado no arquivo de configuraão de login /etc/login.defs.é A entrada neste arquivo pode aponçtar para outro arquivo.

    Q: Eu instalei o Pacote do Shadow, mas agora eu no consigo logar, o que fao?
    ã ç A: Voc provavelmente instalou o programa shadow, mas no rodou o pwconv ou você esqueceu de copiar o /etc/npasswd para ã/etc/passwd e o /etc/nshadow êpara /etc/shadow. Tambm, você pode precisar copiar o login.defs para /etc.

    é Q: Na seão do xlock, disse para mudar a propriedade de grupo no arquivo /etc/shçadow para shadowr. Eu no tenho um grupo de Shadow, o que fazer?
    ã A: Voc pode adicionar um. Simplesmente edite o arquivo /etc/group, e inseraê uma linha para o grupo shadow. Voc precisa assegurar que o nmero de grupo no é usado por outro grupo, e voêc precisa inserir iústo antães na entrada de nogroup. Ou vêoc pode usar a suid do root para o xlock simplesmente.

    ê Q: H uma lista de discursso para o Pacote de Shadow Password Linux?
    áã A: Sim, mas para o desenvolvimento e beta testes do prximo Pacote do Shéadow para o Linux. Voc pode se inóscrever mandando um mail para: shadow-lista-request@neptune.cinê.net com p subject: subscribe. A lista de fato para discusses da série de lanamentos do Linux Shadow-YéYMMSS. Voc õdeveria unçir se se quiser se envolver mais adiante no desenvolvimento ou se voêc instala o shadow em seu sistema e quer adquirir informaões sobre novos laênamentos.

    çç Q: Eu instalei o Pacote do Shadow, mas quando eu uso o comando userdel, eu recebo "userdel: cannot open shadow group file", o que isto?
    é A: Voc compilou o Pacote do Shadow com a opão SHADOWGRP habilitada, mas vêoc não tem um arquivo /etc/gsçhadow. Voc precisa ou editar o arquivo configê.h e recopilar, ou criar um arquivo /eêtc/group. Veja a seão em grupos de shadow.

    ç Q: Eu instalei o Pacote do Shadow mas agora eu tenho passwords codificadas em meu arquivo /etc/passwd, o que est errado?
    á A:Voc ou habilitou a opão do AUTOSHADOW no config.h do arquivo do shêadow, ou o çseu libc foi copilado com a opão de SAHDOW_COMPAT. Voc precisa saber determinar qual o problema, e recopilaçr.

    êé 10. Mensagem de Direitos autorais. O Linux Shadow Password HOWTO Protegido por direitos autorais (c) 1996 por Michael H. Jackséon.

    permitido distribuir cpias literais deste documento com Éa advertncia pórotegido por direitos autorais e esta nota de permisso preserêvando em todas as cpias.

    ãó Permisso concedida para copiar e distribuir verses modificadas deste documenãto literalmente debaixo das condiõões acima, contanto uma nota declarando claramente que o documento que uma verçso modificada e tambm includo no documento modificado.é

    ã éí Permisso concedida para copiar e distribuir traduões deste documento em outrão idioma, debaixo das condiões esçpecificadas acima, para verses modificadas.

    çõ Permisso é concedida para converter este documento em outras mdia debaixoã das condiões especificadas acima para versesí modificadas providas a exigncia paraç reconhecer o documento dõe fonte cumprida por incluso deê uma referncia óbvia para o documento de fonte na énova mdia. Ondãe haja qualquêer dvida sobre como definir 'obvio' que o díono dos direitos autorais reserúva o direito paréa decidir.

    11. Miscelanias e Reconhecimentos.

    Os exemplos de cdigos para o auth.c do pppd-1.2.1d e Ppp-2.1.0e, direóito autorais (c) 1993 da Universidade Nacional australiana e Direito autorais (c) 1989 Universidade Carnegie Mellon.

    Obrigado a Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> por escrever e manter o Pacote do Shadow para o Linux, e pela reviso dele e comentrios neste documento.

    ã á Obrigado a Ron Tidd <rtidd@tscnet.com> pela reviso útil e testes.

    ã Obrigado a todo o mundo que me enviou realimentaão ajudando a melhorar este documento.

    ç Por favor, se voc tiver qualquer comentrio ou sugesto remete-os para mim.

    êáã Cumprimentos Michael H. Jackson <mhjack@tscnet.com>


    [Help OnLine] [Distribuições] [Novidades] [Eventos] [Usuários] [Aplicativos] [Hardware] [Projetos] [Vendedores] [Serviços]
    [Linux Brasil]
    WebSite Design: Buick
    Copyright © 1997-1998 - Buick. All Rights Reserved.
    [Linux-Org]