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:
Correções/Updates:
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
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.
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.
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:
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:
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:
Uma vez que o Pacote do Shadow é instalado, o arquivo de
/etc/passwd iria ao invés conter:
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
2.4. Revisão do crypt(3).
Da página do manual crypt(3)
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./.
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"
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:
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
Os locais de espelho seguintes também foram estabelecidos:
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:
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:
E então no Makefile, mude:
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:
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:
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:
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)
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.
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:
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.
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.
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.
Se você não pode, então algo está errado! Volte as declarações do
não-shadow, e faça o seguinte:
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:
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
Uma vez wue você recobrar o servidor, ponha em /usr/src, digite:
Então edite ./src/makefiles/Makefile.lnx, e mude a linha:
Agora você está pronto para rodar o script de construção(build) e
instalar:
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:
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
Uma vez que você obtenha o servidor, ponha em /usr/src, digite:
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
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
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:
Basicamente, isto é o que você precisa fazer:
Adquira o arquivo xlockmore-3.7.tgz e descompacte em /usr/src:
Edite o arquivo: /usr/X11R6/lib/X11/config/linux.cf, e muda a linha:
Então construa(build) os executavéis:
Então passe todos para atualizar as propriedades do arquivo
de permissões:
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.
xdm.tar.gz está disponível em:
Pegue o arquivo xdm.tar.gz ponha em /usr/src, então descompacte:
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:
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):
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.
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:
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:
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.
No meu sistema:
Para fazer estas mudanças eu usaria:
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:
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.
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:
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:
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:
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.
Por exemplo, vamos olhar novamente o fred
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:
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:
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:
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:
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:
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.
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:
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:
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:
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:
O Pacote do Shadow h pouco pode por coisas no campo sp_pwdp alm do
passwd codificado. Oá campo password poderia conter: é
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:
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. ó
á
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).
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:
çá
á
A funão auth.c depois de modificada para suportar o 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:
Edite o Makefile, e adicione:
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?
Q: Eu instalei o Pacote do Shadow, mas agora eu no consigo logar,
o que fao? é
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? ê
Q: H uma lista de discursso para o Pacote de Shadow Password Linux?
çç
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?
ç
Q: Eu instalei o Pacote do Shadow mas agora eu tenho passwords
codificadas em meu arquivo /etc/passwd, o que est errado?
êé
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>
Considerando que um disco rígido de 4GB pode ser $1000.00, isto é
bem dentro dos meios da maioria de sistemas de crackers.
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.
(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)
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).
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.
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::::
Esta stringo é usada para perturbar um algoritmo com 4096
diferentes modos.
by Bruce Schneier <schneier@chinet.com>
ISBN: 0-471-59756-20-471-59756-2
<ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-current.tar.gz>.
cd /usr/src/shadow-YYMMDD
cp Makefile.linux Makefile
cp config.h.linux config.h
#define HAVE_BASENAME
para:
#undef HAVE_BASENAME
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
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.
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.
cp login.defs /etc
chmod 700 /etc/login.defs
cd /etc
/usr/sbin/pwconv
cd /etc
cp passwd ~passwd
chmod 600 ~passwd
mv npasswd passwd
mv nshadow shadow
chown root.root passwd
chown root.shadow shadow
chmod 0644 passwd
chmod 0640 shadow
cd /etc
cp ~passwd passwd
chmod 644 passwd
tar -xzvf adduser.shadow-1.4.tar.gz
cd adduser
make clean
make adduser
chmod 700 adduser
cp adduser /sbin
<ftp://sunsite.unc.edu/pub/Linux/system/Network/file- transfer/wu-ftpd-2.4-fixed.tar.gz>
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
LIBES = -lbsd -support
para:
LIBES = -lbsd -support
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
cd /usr/include/netinet
ln -s in_systm.h in_system.h
cd -
<ftp://tscnet.com/pub/linux/network/ftp/wu-ftpd-2.4.2-beta-10.tar.gz>
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
<ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/ftpd-Shadow-nis.tgz>
<ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/pop3d-1.00.4.linux.shadow.tar.gz> e pop3d+shadow+elf.tar.gz
<ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz>
tar -xzvf xlockmore-3.7.tgz
#define HasShadowPasswd NO
para
#define HasShadowPasswd YES
cd /usr/src/xlockmore
xmkmf
make depend
make
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
Afortunadamente é bastante fácil de melhorar o seu programa de xdm.
<ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz>
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/
<ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz>
cd /usr/src
tar -xzvf sudo-1.2-shadow.tgz
cd sudo-1.2-shadow
make all
make install
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.
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.
useradd -D
GROUP=1
HOME=/home
INACTIVE=0
EXPIRE=0
SHELL=
SKEL=/etc/skel
Porém, nós podemos e devemos mudar os valores default.
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
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
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.
#
#/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 ""
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
userdel -r username
Adicionalmente, é usado pelo usuário de root para:
passwd fred de -S
fred P 03/04/96 0 60 0 0
passwd -w14 -i14 fred
Agora fred é mudado para:
fred P 03/04/96 0 60 14 14
touch /etc/gshadow
chown root.root /etc/gshadow
chmod 700 /etc/gshadow
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
É 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ê.
#include <shadow/shadow.h>
#include <shadow/pwauth.h>
gcc programa.c -o programa -lshadow
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 * /
}
username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::
ç
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));
Voc não precisaria adicionar este cdigo para pppd-2.2.0 porque ele
j êo tem.
#ifdef HAS_SHADOW
#include
ç
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.
/*
* 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.
/*
* 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);
}
óç
USE_SHADOW deve ser definido, e a libshadow.a precisa ser adicionada no
linkamento do processo.
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
ã
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.
ã
ç
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.
ã
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.
áã
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.
é
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.
á
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.
![[Linux Brasil]](../../../logos/linuxbr.gif)
Copyright © 1997-1998 - Buick. All Rights Reserved.![[Linux-Org]](../../../logos/linuxorg.gif)