Texto originalmente produzido para o endereço
http://colab.interlegis.gov.br/wiki/CriandoServidordeArquivosAutenticacao.
Servidor de Arquivos/Autenticação baseado em NIS + NFS + Samba1 - IntroduçãoO tutorial não é um documento completo sobre o assunto, mesmo porque existe na internet muitos textos completos e bons. Buscamos juntar conteúdo ao fórum, com o intuito de termos em um mesmo ponto soluções sobre todas as nossas necessidades. Esperamos também que o texto possa crescer, com o apoio da comunidade.
Abaixo descrevemos resumidamente os serviços necessários, as configurações devidas (no servidor/estações) para o funcionamento de uma rede com autenticação centralizada, guarda de arquivos no servidor (de forma a facilitar a operação de salvamento/backup dos dados dos usuários), estando todos estes serviços funcionando de forma transparente ao usuário final. Para tanto, antes descreveremos sucintamente as funções de cada serviço que deve ser agregado ao servidor para prover as funcionalidades necessárias ao seu perfeito uso.
NIS: O principal objetivo do serviço é manter todas as contas dos usuários sincronizadas entre servidor e as máquinas existentes no domínio, de forma que o usuário não tenha que guardar vários nomes de usuário/senhas e que possa mover-se de estação em estação sem nenhum inconveniente.
Originalmente, NIS era chamado de YP (Yellow Pages ou Páginas Amarelas), que ainda é utilizado para referenciá-lo. Infelizmente, “páginas amarelas” é uma marca registrada da British Telecom™, e portanto a Sun®, desenvolvedora do NIS, descartou este nome. Entretanto, estes nomes são utilizados nos comandos e pacotes utilizados para a configuração do servidor, tais como ypserv e ypbind.
O NIS mantém as informações da base de dados em arquivos chamados mapas, que contêm pares formados por chave-valor. Um exemplo deste par é o nome de usuário mais a senha de acesso criptografada. Os mapas são armazenados em uma máquina que está executando o NIS, da qual os clientes podem recuperar as informações através de chamadas RPC.
NFS: Acrónimo para Network File System, tem por função permitir o compartilhamento de pastas de uma determinado equipamento (Servidor) para outros (Estações) através de uma rede. Através dele o usuário pode a acessar suas pastas, gravadas em um servidor remoto, como se fossem arquivos locais.
SAMBA: O Samba é um servidor que permite a comunicação entre máquinas Windows e Linux. Em nosso caso o samba proverá as estações baseadas em windows a possibilidade de acesso aos arquivos salvos no servidor bem como a autenticação através do servidor Linux. Existem inúmeras funcionalidades que não serão abordadas aqui, e que vale o estudo para possíveis implementações, já que buscamos aqui um texto simples e que permita a montagem/configuração rápida de um servidor de autenticação/arquivos em rede Linux/Linux/Windows.
Hardware: Os serviços são leves, e funcionaram onde trabalho em uma máquina com Processador Athlon Xp 2.4 Ghz e com apenas 2Gb de RAM por um bom tempo, mas recomendamos um hardware atualizado e bom, além de uma estrutura de rede bem construida.
2 - Instalação/Configuração:2.1 – Instalação do Sistema Operacional no Servidor:Na CMTimóteo usamos Ubuntu 18.04 LTS server para a instalação do sistema operacional do Servidor. Como não existe nada de novo na instalação do Ubuntu, ainda mais tratando-se de uma versão usada normalmente não entraremos aqui em detalhes sobre este passo.
2.2 – NFSOs seguintes daemons são necessários para o funcionamento do NFS:
nfsd | O daemon NFS, que atende as requisições dos clientes |
mountd | O daemon de montagem do NFS |
portmap | O daemon portmapper permite que clientes descubram em que porta o servidor esta utilizando |
nfsiod | Este daemon é opcional e roda no lado do cliente. O nfsiod atende às solicitações do servidor NFS. Apesar de sua existência não obrigatória para a operação correta do NFS ele aumenta o desempenho. |
Para o funcionamento do NFS em nosso servidor instalamos o pacote nfs-kernel-server, como segue:
$ sudo -s
Password: *****
# apt-get install nfs-kernel-server
...
Após a instalação do pacote e suas dependências é necessário realizar sua configuração, bastando editar o seguinte arquivo:
/etc/exports: Este arquivo especifica quais sistemas de arquivos o NFS deve exportar, quais máquinas poderão ter acesso a ele na rede e que permissões elas terão (somente leitura, leitura e escrita e etc). Existem outras opções que poderão ser usadas aqui.
# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/home 192.168.0.*(rw,sync)
#
No caso estamos exportando a pasta /home, para as máquinas com IP 192.168.0.[1-255], permitindo leitura e gravação nesta pasta.
Após a edição do arquivo basta reiniciar o serviço:
# cd /etc/init.d
# ./nfs-kernel-server restart
...
Vale lembrar que este tutorial esta tomando por base o Ubuntu, em sistemas que não sejam derivados do debian para “startar” o serviço você deverá executar os seguintes comandos:
# cd /etc/init.d
# ./portmap start
...
# ./nfs start
...
Para a configuração do
cliente NFS basta instalar o pacote nfs-kernel-server (conforme já foi explicado) e proceder com a montagem do sistema de arquivos. Para tanto execute:
# mount -t nfs <IP do Servidor>:/Caminho/Pasta_Servidor /Ponto_de_Montagem
#
IP do Servidor: IP dá máquina em que foi configurado o servidor NFS
/Caminho/Pasta_Servidor: Uma das pastas relacionadas no arquivo /etc/exports no servidor NFS. No nosso caso /home
/Ponto_de_Montagem: O local em que deseja-se montar a pasta do servidor. No nosso caso, para que a pasta /home seja acessada de forma transparente pelo usuário, usaremos como ponto de montagem a pasta
/home da estação.
Para automatizar o processo de montagem da pasta durante o boot basta editar o arquivo
/etc/fstab e inserir nele a linha correspondente à pasta em questão, conforme exemplo abaixo:
# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hdd2 / reiserfs notail 0 1
/dev/hdd1 none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
192.168.0.1:/home /home nfs defaults 0 0
#
2.3 – NISPara o perfeito funcionamento do NIS os seguintes pacotes devem estar instalados no servidor:
E para os clientes devem estar instalados
Para tanto no servidor execute (no ubuntu):
$ sudo -s
# Password: ******
# apt-get install nis
...
No ubuntu instalamos apenas este pacote porque o mesmo já traz todos os daemons necessários a sua execução, conforme podemos ver pelo comando:
# apt-cache search nis
...
nis - Clients and daemons for the Network Information Services (NIS)
...
Para a configuração do NIS seguimos os seguintes tópicos:
2.3.1) Edite o arquivo
/etc/defaultdomain e insira nele o nome do domínio que irá usar para sua rede
2.3.2) Você pode também definir o nome do domínio a usar com o seguinte comando:
# domainname <Nome_do_Domínio>
2.3.3) E após a alteração do nome você pode conferir usando o comando:
# domainname
nome_do_domínio # como resposta
#
2.3.4) Edite o arquivo
/etc/default/nis e altere a seguinte linha:
NISSERVER=false
para:
NISSERVER=master
* Reinicie o NIS:
# cd /etc/init.d
# ./nis restart
...
* Após "startar" o NIS devemos “popular” a sua base de dados com o seguinte comando:
# /usr/lib/yp/ypinit -m
A primeira pergunta diz respeito aos servidores NIS escravos. Na configuração com somente um servidor digite
Ctrl+d e confirme com “y”.
- Com a execução do script será criado os mapas que ficarão armazenados no diretório /var/yp/<nome_do_domínio>
- A partir deste ponto o servidor NIS já esta em funcionamento, e qualquer alteração/inclusão realizada na base de dados de usuários/grupos (inclusive de senhas) do servidor devemos refazer os mapas do NIS, de forma a disponibilizar as informações para as estações com o comando abaixo
# cd /var/yp
# make
.......
Para a configuração o
cliente NIS seguimos os seguintes passos:
- Primeiro instalamos o NIS:
$ sudo -s
# Password: ******
# apt-get install nis
.....
- Editamos o arquivo /etc/yp.conf e adicionamos a seguinte linha:
ypserver <endereço_ip_servidor>
- Depois editamos o arquivo /etc/nsswitch.conf e alteramos as seguintes linhas, deixando-as conforme abaixo:
passwd: files nis
group: files nis
shadow: files nis
- Altere o arquivo /etc/defaultdomain informando o nome do seu domínio.
- Após as alterações é necessário reiniciar o NIS.
# cd /etc/init.d
# ./nis restart
.....
- Para checar se as modificações ocorreram de forma satisfatória podemos verificar se o /etc/passwd do servidor NIS esta disponível na estação, executando o seguinte comando:
# getent passwd
.......
Este comando deverá listar o conteúdo do /etc/passwd do servidor e não da estação.2.4 – SAMBANa instalação do SAMBA devemos instalar o pacote no servidor:
# apt-get install samba
.....
Uma vez instalado o pacote devemos editar o arquivo
/etc/samba/smb.conf. Já que no samba existem muitas opções, e que seria demasiadamente longo a explicação de todos, será listado abaixo um
smb.conf e caso ocorra a necessidade de novas funções basta fazer uma busca na internet que será encontrado vários tutoriais sobre o assunto.
/etc/samba/smb.conf[Global]
log file = /var/log/samba/log.%m
smb passwd file = /etc/smbpasswd
admin users = administrador # Administrador do domínio
local master = yes
domain master = yes
domain logons = yes
#unix password sync = yes
null passwords = no
load printers = yes
name resolve order = host wins bcast
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
hosts equiv = /etc/hosts
#hostname lookups = yes
username map = /etc/smbusers
encrypt passwords = yes
hosts allow = 192.168.0.0/24 #
logon drive = c:
logon script = logon.bat
logon path = \\%L\profiles
logon home = \\%L\profiles
password level = 0
wins support = true
dns proxy = no
netbios name = samba
server string = Servidor de Arquivos PDC
remote announce = 192.168.0.0 #
workgroup = camara #
os level = 65
debug level = 1
printcap name = /etc/printcap
security = user
max log size = 100
domain logons = yes
domain logons = yes
#-----------------------------------SHARES-------------------------------#
[netlogon]
writeable = yes
path = /home/netlogon
force create mode = 0777
create mask = 0777
comment = Network Logon Service
public = yes
[profiles]
comment = %u
path = /home/%u
public = yes
writable = yes
browseable = yes
printable = no
create mask = 0777
force create mode = 0777
[home]
comment = Home
path = /home
public = yes
writable = yes
browseable = yes
printable = no
create mask = 0777
force create mode = 0777
[usuarios]
comment = Arquivos Pessoais
path = /home/usuarios/%u
public = no
writable = yes
browseable = yes
printable = no
create mask = 0777
force create mode = 0777
[grupos]
comment = Pasta do grupo
path = /home/grupos/%g
public = no
writable = yes
browseable = yes
printable = no
create mask = 0777
force create mode = 0777
[Publico]
path = /home/publico
public = yes
writable = yes
browseable = yes
printable = no
create mask = 0777
force create mode = 0777
force directory mode = 0777
O arquivo listado acima é uma cópia (não 100% exata) do arquivo usado na CMTimóteo e nele estão mapeados a estrutura de rede com as pastas:
- /home/<usuário>: Pasta particular do usuário.
- /home/usuarios/<usuário>: Pasta particular do usuário. Uma vez que a pasta /home/<usuário> também é usada pelo sistema operacional buscamos uma pasta com apenas arquivos dos usuários, já que houve casos de usuários que deletarem arquivos importantes na pasta /home/<usuário>
- /home/grupos/<grupo>: Pasta usada para salvamento de arquivos usados pelo grupo, que no caso da CMTimóteo é o setor de trabalho do usuário
- /home/publico: Pasta usada para troca de arquivos entre os usuários de grupos diferentes. É apagada (sem prévio aviso) uma vez por semana.
Para o mapeamento das pastas no windows criamos o script
logon.bat em
/home/netlogon com o seguinte conteúdo:
net use k: \\samba\usuarios
net use l: \\samba\grupos
net use m: \\samba\Publico
3 – Dicas FinaisAntes de colocar em prática não deixe de considerar o seguinte:
- Não deixe de ler o tópico http://colab.interlegis.gov.br/wiki/EstruturaRedes é mesmo muito importante para a segurança da rede;
- Não se esqueça de criar a pasta /home/netlogon e criar a rotina logon.bat dentro dela;
- Dê permissão de leitura/execução para dono/grupo/outros para a pasta /home/netlogon;
- Para cadastrar um grupo os comandos abaixo devem ser seguidos:
groupadd <NOME-DO-GRUPO> # Cria o grupo de usuário (Setor de trabalho, e etc)
mkdir /home/grupos/<NOME-DO-GRUPO> # Cria uma pasta para salvamento de arquivos comuns ao grupo
chown root /home/grupos/<NOME-DO-GRUPO> # Determina um dono para o grupo, não deve ser nenhum dos usuários de acesso normal
chgrp <NOME-DO-GRUPO> /home/grupos/<NOME-DO-GRUPO> # Determina o grupo de acesso à Pasta
chmod 770 /home/grupos/<NOME-DO-GRUPO> # Dá permissão total a todos os usuários cadastrados no grupo
- Para cadastrar um usuário os comandos abaixo devem ser seguidos:
useradd -g <NOME-DO-GRUPO> <NOME_DO_USUARIO> # Cria um usuário para um grupo já existênte
mkdir /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO> # Cria as pastas do usuário
chmod 700 /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO> # Determina permissão de acesso apenas ao usuário
chown <NOME-DO-USUARIO> /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO> # Determina o dono das pastas do usuário
chgrp <NOME-DO-GRUPO> /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO> # Determina o grupo das pastas do usuário
- No arquivo /etc/profile (nas estações) altere a linha com o comando umask para umask 000, e isso fará que os arquivos criados pelos usuários tenham permissão de leitura/escrita para dono/grupo/outros. Isto não significa nenhuma quebra de segurança uma vez que as pastas /home/<NOME-DO-USUARIO>, /home/usuarios/<NOME-DO-USUARIO> e /home/grupos/<NOME-DO-GRUPO> já tem as permissões necessárias para que apenas os usuários habilitados tenham acesso aos arquivos. Isto é necessário para que os arquivos criados nas pastas /home/grupos/<NOME-DO-GRUPO> e /home/publico sejam acessados por todos que tiverem direitos de acesso a elas.
- Sempre que criar um usuário, criar um grupo, alterar uma senha de usuário a execução dos comandos (no servidor) abaixo tornam-se necessárias:
# cd /var/yp
# make
4 – Considerações FinaisAcreditamos que este texto produzido pela equipe da CMTimóteo possa contribuir com usuários iniciantes, e também para o crescimento da comunidade. Sabemos que existem outras pessoas tão, ou mais capacitadas que nós, mas acreditamos que este documento irá crescer e permitir uma boa discussão sobre as questões de rede criando formas cada vez melhores de atender aos usuários.
Vale salientar por último que devemos atentar para segurança dos dados dos usuários, e que as permissões de pastas é um tópico importante para isto. É um assunto extenso e não cabe neste texto, mas já existem outros tópicos tratando disto. Um deles é o de estrutura de rede já citado anteriormente, que encontra-se no endereço:
http://colab.interlegis.gov.br/wiki/EstruturaRedesEsperamos que a leitura tenha sido informativa e tenha trazido benefícios a todos, agradecemos o apoio que sempre tivemos da comunidade e reinteramos nossa inteira disposição em auxiliar quando estiver ao nosso alcance.
Principais fontes de informação usadas para a compilação deste texto em:
http://www.conectiva.com/doc/livros/online/10.0/servidor/pt_BR/ch13s03.htmlhttp://pt.wikipedia.org/wiki/Network_File_Systemhttp://www.openit.com.br/freebsd-hb/network-nfs.htmlhttp://www.guiadohardware.net/artigos/315/http://focalinux.cipsga.org.br/guia/avancado/ch-s-samba.htm 5 – Editado para o Ubuntu 18.04 client:O Ubuntu 18.04, quando usado como cliente, precisa de alterações para logar no GDM, elas seguem abaixo, além das fontes dessas informações.
O arquivo
/lib/systemd/system/systemd-logind.service precisa ser alterado, comentando a linha
IPAdressDeny=Any, porém atualizações futuras podem reverter a alteração, assim é necessário criar um arquivo em
/etc/systemd/system/ com nome
systemd-logind.service.d.
mkdir -p /etc/systemd/system/
> /etc/systemd/system/systemd-logind.service.d
No novo arquivo deve ser informado o IP específico, ou intervalo de IP's para autenticação, conforme exemplo:
echo "[Service]" >> /etc/systemd/system/systemd-logind.service.d
echo "IPAddressAllow=10.10.0.0/16" >> /etc/systemd/system/systemd-logind.service.d
Por fim é necessário reiniciar o serviço, ou reiniciar o equipamento.
systemctl restart systemd-logind.service
Fonte:
https://askubuntu.com/questions/1031022/using-nis-client-in-ubuntu-18-04-crashes-both-gnome-and-unity