Admin Linux - Guia rápido
Único entre as distribuições Linux de classe empresarial, o CentOS permanece fiel à natureza do código aberto na qual o Linux foi fundado. O primeiro kernel Linux foi desenvolvido por um estudante universitário da Universidade de Helsinque (Linus Torvalds) e combinado com os utilitários GNU fundados e promovidos por Richard Stallman. O CentOS tem um licenciamento de código aberto comprovado que pode impulsionar o mundo dos negócios de hoje.
O CentOS se tornou rapidamente uma das plataformas de servidor mais prolíficas do mundo. Qualquer administrador Linux, ao procurar emprego, encontrará as palavras: “CentOS Linux Experience Preferred”. De startups a titãs de tecnologia da Fortune 10 , CentOS se posicionou entre os escalões mais altos de sistemas operacionais de servidor em todo o mundo.
O que faz o CentOS se destacar de outras distribuições Linux é uma ótima combinação de -
Licenciamento de código aberto
Base de usuários dedicada de profissionais Linux
Bom suporte de hardware
Estabilidade e confiabilidade sólidas como rocha
Foco na segurança e atualizações
Cumprimento estrito dos padrões de pacote de software necessários em um ambiente corporativo
Antes de iniciar as aulas, presumimos que os leitores tenham um conhecimento básico de Linux e fundamentos de administração, como -
Qual é o usuário root?
O poder do usuário root
Conceito básico de grupos de segurança e usuários
Experiência usando um emulador de terminal Linux
Conceitos fundamentais de rede
Compreensão fundamental de linguagens de programação interpretadas (Perl, Python, Ruby)
Protocolos de rede como HTTP, LDAP, FTP, IMAP, SMTP
Núcleos que compõem um sistema operacional de computador: sistema de arquivos, drivers e o kerne
Antes de aprender as ferramentas de um Administrador CentOS Linux, é importante observar a filosofia por trás da linha de comando de administração do Linux.
O Linux foi projetado com base na filosofia Unix de “ferramentas pequenas e precisas encadeadas para simplificar tarefas maiores”. O Linux, em sua raiz, muitas vezes não possui grandes aplicativos de propósito único para um uso específico. Em vez disso, existem centenas de utilitários básicos que, quando combinados, oferecem grande poder para realizar grandes tarefas com eficiência.
Exemplos da filosofia Linux
Por exemplo, se um administrador deseja uma lista de todos os usuários atuais em um sistema, os seguintes comandos encadeados podem ser usados para obter uma lista de todos os usuários do sistema. Na execução do comando, os usuários que estão no sistema são listados em ordem alfabética.
[root@centosLocal centos]# cut /etc/passwd -d":" -f1 | sort
abrt
adm
avahi
bin
centos
chrony
colord
daemon
dbus
É fácil exportar essa lista para um arquivo de texto usando o seguinte comando.
[root@localhost /]# cut /etc/passwd -d ":" -f1 > system_users.txt
[root@localhost /]# cat ./system_users.txt | sort | wc –l
40
[root@localhost /]#
Também é possível comparar a lista de usuários com uma exportação em uma data posterior.
[root@centosLocal centos]# cut /etc/passwd -d ":" -f1 > system_users002.txt &&
cat system_users002.txt | sort | wc -l
41
[root@centosLocal centos]# diff ./system_users.txt ./system_users002.txt
evilBackdoor [root@centosLocal centos]#
Com essa abordagem de pequenas ferramentas encadeadas para realizar tarefas maiores, é mais simples fazer um script executando esses comandos do que enviar resultados por e-mail automaticamente em intervalos regulares de tempo.
Comandos básicos que todo administrador Linux deve ser proficiente em são -
- vim
- grep
- mais ou menos
- tail
- head
- wc
- sort
- uniq
- tee
- cat
- cut
- sed
- tr
- paste
No mundo Linux, os administradores usam filteringcomandos todos os dias para analisar logs, filtrar a saída do comando e executar ações com scripts de shell interativos. Como mencionado, o poder desses comandos vem em sua capacidade de modificar um ao outro por meio de um processo chamadopiping.
O comando a seguir mostra quantas palavras começam com a letra a do dicionário do usuário principal do CentOS.
[root@centosLocal ~]# egrep '^a.*$' /usr/share/dict/words | wc -l
25192
[root@centosLocal ~]#
Para apresentar as permissões conforme se aplicam a diretórios e arquivos no CentOS Linux, vamos examinar a seguinte saída de comando.
[centos@centosLocal etc]$ ls -ld /etc/yum*
drwxr-xr-x. 6 root root 100 Dec 5 06:59 /etc/yum
-rw-r--r--. 1 root root 970 Nov 15 08:30 /etc/yum.conf
drwxr-xr-x. 2 root root 187 Nov 15 08:30 /etc/yum.repos.d
Note - Os três tipos de objetos principais que você verá são
"-" - um travessão para arquivo simples
"d" - para um diretório
"l" - para um link simbólico
Vamos nos concentrar nos três blocos de saída para cada diretório e arquivo -
- drwxr-xr-x: root: root
- -rw-r - r--: root: root
- drwxr-xr-x: root: root
Agora vamos decompô-lo, para entender melhor essas linhas -
d | Significa que o tipo de objeto é um diretório |
rwx | Indica permissões de diretório aplicadas ao proprietário |
rx | Indica permissões de diretório aplicadas ao grupo |
rx | Indica permissões de diretório aplicadas ao mundo |
raiz | A primeira instância, indica o proprietário do diretório |
raiz | A segunda instância indica o grupo ao qual as permissões de grupo são aplicadas |
É importante compreender a diferença entre proprietário , grupo e mundo . Não entender isso pode ter grandes consequências nos servidores que hospedam serviços na Internet.
Antes de dar um exemplo do mundo real, vamos primeiro entender as permissões conforme se aplicam a diretórios e arquivos .
Por favor, dê uma olhada na tabela a seguir e continue com as instruções.
Octal | Simbólico | Perm. | Diretório |
---|---|---|---|
1 | x | Executar | Entre no diretório e acesse os arquivos |
2 | W | Escreva | Exclua ou modifique os arquivos em um diretório |
4 | r | Ler | Liste os arquivos dentro do diretório |
Note- Quando os arquivos devem estar acessíveis para leitura em um diretório, é comum aplicar permissões de leitura e execução . Caso contrário, os usuários terão dificuldade em trabalhar com os arquivos. Deixar a gravação desativada garantirá que os arquivos não possam ser: renomeados, excluídos, copiados ou ter as permissões modificadas.
Aplicação de permissões a diretórios e arquivos
Ao aplicar permissões, há dois conceitos para entender -
- Permissões Simbólicas
- Permissões octais
Em essência, cada um é o mesmo, mas uma maneira diferente de se referir e atribuir permissões de arquivo. Para um guia rápido, estude e consulte a seguinte tabela -
Ler | Escreva | Executar | |
---|---|---|---|
Octal | 4 | 2 | 1 |
Symbolic | r | W | x |
Ao atribuir permissões usando o octalmétodo, use um número de 3 bytes, como: 760. O número 760 se traduz em: Proprietário: rwx; Grupo: rw; Outro (ou mundo) sem permissões.
Outro cenário: 733 seria traduzido em: Proprietário: rwx; Grupo: wx; Outro: wx.
Há uma desvantagem nas permissões usando o método Octal. Os conjuntos de permissões existentes não podem ser modificados. Só é possível reatribuir todo o conjunto de permissões de um objeto.
Agora você pode se perguntar, o que há de errado em sempre reatribuir permissões? Imagine uma grande estrutura de diretório, por exemplo / var / www / em um servidor web de produção. Queremos retirar recursivamente o bit w ou write em todos os diretórios para Other. Assim, forçando-o a ser adicionado pró-ativamente apenas quando necessário para medidas de segurança. Se reatribuirmos todo o conjunto de permissões, removeremos todas as outras permissões personalizadas atribuídas a cada subdiretório.
Portanto, isso causará um problema tanto para o administrador quanto para o usuário do sistema. Em algum ponto, uma pessoa (ou pessoas) precisaria reatribuir todas as permissões personalizadas que foram eliminadas, reatribuindo todo o conjunto de permissões para cada diretório e objeto.
Neste caso, gostaríamos de usar o método Simbólico para modificar as permissões -
chmod -R o-w /var/www/
O comando acima não iria "sobrescrever as permissões", mas modificar os conjuntos de permissões atuais. Portanto, acostume-se a usar as melhores práticas
- Octal apenas para atribuir permissões
- Simbólico para modificar conjuntos de permissões
É importante que um administrador CentOS seja proficiente com as permissões Octal e Simbólica, pois as permissões são importantes para a integridade dos dados e de todo o sistema operacional. Se as permissões estiverem incorretas, o resultado final serão dados confidenciais e todo o sistema operacional ficará comprometido.
Com isso coberto, vamos dar uma olhada em alguns comandos para modificar permissões e proprietários / membros de objetos -
- chmod
- chown
- chgrp
- umask
chmod: Alterar bits de permissão do modo de arquivo
Comando | Açao |
---|---|
-c | Como detalhado, mas só relatará as alterações feitas |
-v | Detalhado, exibe os diagnósticos para cada solicitação feita |
-R | Aplica recursivamente a operação em arquivos e diretórios |
chmod nos permitirá alterar as permissões de diretórios e arquivos usando conjuntos de permissão octal ou simbólica . Usaremos isso para modificar nossos diretórios de atribuição e uploads.
chown: Alterar proprietário e grupo do arquivo
Comando | Açao |
---|---|
-c | Como detalhado, mas só relatará as alterações feitas |
-v | Detalhado, exibe os diagnósticos para cada solicitação feita |
-R | Aplica recursivamente a operação em arquivos e diretórios |
chown pode modificar a propriedade do usuário e do grupo de objetos. No entanto, a menos que seja necessário modificar ambos ao mesmo tempo, o uso de chgrp geralmente é usado para grupos.
chgrp: Alterar propriedade do grupo de arquivo ou diretório
Comando | Açao |
---|---|
-c | Como detalhado, mas só relatará as mudanças |
-v | Detalhado, emite o diagnóstico para cada solicitação feita |
-R | Recursivamente, aplica as operações em arquivos e diretórios |
chgrp mudará o proprietário do grupo para aquele fornecido.
Prática do mundo real
Vamos mudar todas as atribuições do subdiretório em / var / www / students / para que o grupo proprietário seja o grupo de alunos . Em seguida, atribua a raiz de alunos ao grupo de professores. Mais tarde, faça do Dr. Terry Thomas o proprietário do diretório de alunos , uma vez que ele é o responsável por toda a academia de Ciência da Computação da escola.
Como podemos ver, quando criado, o diretório é deixado bastante cru.
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 root root 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -l /var/www/students/
total 0
drwxr-xr-x. 2 root root 6 Jan 9 22:03 assignments
drwxr-xr-x. 2 root root 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
Como administradores, nunca queremos fornecer nossas credenciais de root para ninguém. Mas, ao mesmo tempo, precisamos permitir que os usuários façam seu trabalho. Portanto, vamos permitir que o Dr. Terry Thomas tenha mais controle da estrutura do arquivo e limite o que os alunos podem fazer.
[root@centosLocal ~]# chown -R drterryt:professors /var/www/students/
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 drterryt professors 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -ls /var/www/students/
total 0
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 assignments
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
Agora, cada diretório e subdiretório tem um proprietário de drterryt e o grupo proprietário são os professores . Como o diretório de tarefas é para os alunos entregarem os trabalhos atribuídos, vamos eliminar a capacidade de listar e modificar arquivos do grupo de alunos .
[root@centosLocal ~]# chgrp students /var/www/students/assignments/ && chmod
736 /var/www/students/assignments/
[root@centosLocal assignments]# ls -ld /var/www/students/assignments/
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[root@centosLocal assignments]#
Os alunos podem copiar tarefas para o diretório de tarefas . Mas eles não podem listar o conteúdo do diretório, copiar os arquivos atuais ou modificar arquivos no diretório de atribuições . Assim, ele apenas permite que os alunos enviem tarefas concluídas. O sistema de arquivos CentOS fornecerá um carimbo de data de quando as atribuições foram feitas.
Como proprietário do diretório de atribuições -
[drterryt@centosLocal assignments]$ whoami drterryt [drterryt@centosLocal assignments]$ ls -ld /var/www/students/assignment
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[drterryt@centosLocal assignments]$ ls -l /var/www/students/assignments/ total 4 -rw-r--r--. 1 adama students 0 Jan 9 23:14 myassign.txt -rw-r--r--. 1 tammyr students 16 Jan 9 23:18 terryt.txt [drterryt@centosLocal assignments]$
Podemos ver que o proprietário do diretório pode listar arquivos, bem como modificar e remover arquivos.
Comando umask: Fornece os modos padrão para as permissões de arquivo e diretório à medida que são criadas
umask é um comando importante que fornece os modos padrão para Permissões de Arquivo e Diretório à medida que são criadas.
As permissões umask usam lógica negada unária.
Permissão | Operação |
---|---|
0 | Ler, escrever, executar |
1 | Leia e escreva |
2 | Leia e execute |
3 | Somente leitura |
4 | Leia e execute |
5 | Só escrever |
6 | Executar apenas |
7 | Nenhuma permissão |
[adama@centosLocal umask_tests]$ ls -l ./ -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt [adama@centosLocal umask_tests]$ whoami
adama
[adama@centosLocal umask_tests]$ umask 0022 [adama@centosLocal umask_tests]$
Agora, vamos mudar o umask para nosso usuário atual e fazer um novo arquivo e diretório.
[adama@centosLocal umask_tests]$ umask 077 [adama@centosLocal umask_tests]$ touch mynewfile.txt
[adama@centosLocal umask_tests]$ mkdir myNewDir [adama@centosLocal umask_tests]$ ls -l
total 0
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt
drwx------. 2 adama students 6 Jan 10 00:35 myNewDir
-rw-------. 1 adama students 0 Jan 10 00:35 mynewfile.txt
Como podemos ver, os arquivos recém-criados são um pouco mais restritivos do que antes.
umask para usuários deve ser alterado em:
- /etc/profile
- ~/bashrc
[root@centosLocal centos]# su adama
[adama@centosLocal centos]$ umask 0022 [adama@centosLocal centos]$
Geralmente, o umask padrão no CentOS ficará bem. Quando temos problemas com um padrão de 0022 , geralmente é quando diferentes departamentos pertencentes a grupos diferentes precisam colaborar em projetos.
É aqui que entra a função de um administrador de sistema, para equilibrar as operações e o design do sistema operacional CentOS.
Ao discutir o gerenciamento de usuários , temos três termos importantes para entender -
- Users
- Groups
- Permissions
Já discutimos as permissões detalhadas aplicadas a arquivos e pastas. Neste capítulo, vamos discutir sobre usuários e grupos.
Usuários CentOS
No CentOS, existem dois tipos de contas -
System accounts - Usado para um daemon ou outro software.
Interactive accounts - Normalmente atribuído a um usuário para acessar recursos do sistema.
A principal diferença entre os dois tipos de usuário é -
System accountssão usados por daemons para acessar arquivos e diretórios. Geralmente, eles não permitem o login interativo via shell ou login de console físico.
Interactive accounts são usados por usuários finais para acessar recursos de computação a partir de um shell ou login de console físico.
Com esse conhecimento básico de usuários, vamos agora criar um novo usuário para Bob Jones no Departamento de Contabilidade. Um novo usuário é adicionado com oadduser comando.
A seguir estão alguns adduser interruptores comuns -
Interruptor | Açao |
---|---|
-c | Adiciona comentário à conta do usuário |
-m | Cria o diretório inicial do usuário no local padrão, se inexistente |
-g | Grupo padrão para atribuir o usuário |
-n | Não cria um grupo privado para o usuário, geralmente um grupo com nome de usuário |
-M | Não cria um diretório inicial |
-s | Shell padrão diferente de / bin / bash |
-você | Especifica o UID (de outra forma atribuído pelo sistema) |
-G | Grupos adicionais para atribuir ao usuário |
Ao criar um novo usuário, use as opções -c, -m, -g, -n da seguinte forma -
[root@localhost Downloads]# useradd -c "Bob Jones Accounting Dept Manager"
-m -g accounting -n bjones
Agora vamos ver se nosso novo usuário foi criado -
[root@localhost Downloads]# id bjones
(bjones) gid = 1001(accounting) groups = 1001(accounting)
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Bob Jones Accounting Dept Manager:/home/bjones:/bin/bash
[root@localhost Downloads]#
Agora precisamos habilitar a nova conta usando o comando passwd -
[root@localhost Downloads]# passwd bjones
Changing password for user bjones.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost Downloads]#
A conta do usuário não está habilitada, permitindo que o usuário efetue login no sistema.
Desativando contas de usuário
Existem vários métodos para desabilitar contas em um sistema. Isso varia desde a edição do arquivo / etc / passwd manualmente. Ou mesmo usando o comando passwd com o-linterruptor. Ambos os métodos têm uma grande desvantagem: se o usuário tiver acesso ssh e usar uma chave RSA para autenticação, ele ainda poderá fazer o login usando este método.
Agora vamos usar o comando chage , alterando a data de validade da senha para uma data anterior. Além disso, convém anotar na conta o motivo pelo qual a desativamos.
[root@localhost Downloads]# chage -E 2005-10-01 bjones
[root@localhost Downloads]# usermod -c "Disabled Account while Bob out of the country
for five months" bjones
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Disabled Account while Bob out of the country for four
months:/home/bjones:/bin/bash
[root@localhost Downloads]#
Gerenciar grupos
Gerenciar grupos no Linux torna conveniente para um administrador combinar os usuários dentro de containers aplicando conjuntos de permissões aplicáveis a todos os membros do grupo. Por exemplo, todos os usuários em Contabilidade podem precisar de acesso aos mesmos arquivos. Assim, fazemos um grupo contábil, agregando usuários contábeis.
Na maioria das vezes, qualquer coisa que requeira permissões especiais deve ser feita em um grupo. Essa abordagem geralmente economiza tempo ao aplicar permissões especiais a apenas um usuário. Por exemplo, Sally é responsável pelos relatórios e apenas Sally precisa de acesso a determinados arquivos para relatórios. No entanto, e se Sally ficar doente um dia e Bob fizer relatórios? Ou a necessidade de relatórios cresce? Quando um grupo é formado, um Administrador só precisa fazer isso uma vez. A adição de usuários é aplicada conforme as necessidades mudam ou se expandem.
A seguir estão alguns comandos comuns usados para gerenciar grupos -
- chgrp
- groupadd
- groups
- usermod
chgrp - Altera a propriedade do grupo para um arquivo ou diretório.
Vamos fazer um diretório para que as pessoas do grupo de contabilidade armazenem arquivos e criem diretórios para arquivos.
[root@localhost Downloads]# mkdir /home/accounting
[root@localhost Downloads]# ls -ld /home/accounting
drwxr-xr-x. 2 root root 6 Jan 13 10:18 /home/accounting
[root@localhost Downloads]#
A seguir, vamos atribuir a propriedade do grupo ao grupo de contabilidade .
[root@localhost Downloads]# chgrp -v accounting /home/accounting/
changed group of ‘/home/accounting/’ from root to accounting
[root@localhost Downloads]# ls -ld /home/accounting/
drwxr-xr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
Agora, todos no grupo de contabilidade têm permissão de leitura e execução para / home / contabilidade . Eles também precisarão de permissões de gravação.
[root@localhost Downloads]# chmod g+w /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwxr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
Uma vez que o grupo de contabilidade pode lidar com documentos confidenciais, precisamos aplicar algumas permissões restritivas para outro ou mundo .
[root@localhost Downloads]# chmod o-rx /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwx---. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
groupadd - Usado para fazer um novo grupo.
Interruptor | Açao |
---|---|
-g | Especifica um GID para o grupo |
-K | Substitui as especificações do GID em /etc/login.defs |
-o | Permite substituir a rejeição de ID de grupo não exclusivo |
-p | Senha do grupo, permitindo que os usuários se ativem |
Vamos fazer um novo grupo chamado secreto. Vamos adicionar uma senha ao grupo, permitindo que os usuários se adicionem com uma senha conhecida.
[root@localhost]# groupadd secret
[root@localhost]# gpasswd secret
Changing the password for group secret
New Password:
Re-enter new password:
[root@localhost]# exit
exit
[centos@localhost ~]$ newgrp secret Password: [centos@localhost ~]$ groups
secret wheel rdc
[centos@localhost ~]$
Na prática, as senhas dos grupos não são usadas com frequência. Os grupos secundários são adequados e compartilhar senhas entre outros usuários não é uma boa prática de segurança.
o groupscomando é usado para mostrar a qual grupo um usuário pertence. Usaremos isso, depois de fazer algumas alterações em nosso usuário atual.
usermod é usado para atualizar os atributos da conta.
A seguir estão as opções de usermod comuns .
Interruptor | Açao |
---|---|
-uma | Anexa, adiciona usuário a grupos suplementares, apenas com a opção -G |
-c | Comentário, atualiza o valor do comentário do usuário |
-d | Diretório inicial, atualiza o diretório inicial do usuário |
-G | Agrupa, adiciona ou remove os grupos de usuários secundários |
-g | Grupo, grupo primário padrão do usuário |
[root@localhost]# groups centos
centos : accounting secret
[root@localhost]#
[root@localhost]# usermod -a -G wheel centos
[root@localhost]# groups centos
centos : accounting wheel secret
[root@localhost]#
As cotas de disco CentOS podem ser habilitadas; alertando o administrador do sistema e negando mais acesso ao armazenamento em disco a um usuário antes que a capacidade do disco seja excedida. Quando um disco está cheio, dependendo do que está nele, um sistema inteiro pode parar bruscamente até ser recuperado.
Habilitar Quota Management no CentOS Linux é basicamente um processo de 4 etapas -
Step 1 - Habilite o gerenciamento de cotas para grupos e usuários em / etc / fstab.
Step 2 - Remonte o sistema de arquivos.
Step 3 - Criar banco de dados de cotas e gerar tabela de uso de disco.
Step 4 - Atribuir políticas de cota.
Habilitar gerenciamento de cotas em / etc / fstab
Primeiro, queremos fazer backup de nosso arquivo / etc / fstab -
[root@centosLocal centos]# cp -r /etc/fstab ./
Agora temos uma cópia do nosso / etc / fstab de trabalho conhecido no diretório de trabalho atual.
#
# /etc/fstab
# Created by anaconda on Sat Dec 17 02:44:51 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID = 4b9a40bc-9480-4 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults,usrquota,grpquota 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
Fizemos as seguintes alterações na seção de opções de / etc / fstab para o volume ou rótulo onde as cotas devem ser aplicadas para usuários e grupos.
- usrquota
- grpquota
Como você pode ver, estamos usando o xfssistema de arquivo. Ao usar o xfs, há etapas manuais extras envolvidas./homeestá no mesmo disco que /. Uma investigação mais aprofundada mostra / está definido para noquota , que é uma opção de montagem no nível do kernel. Devemos reconfigurar nossas opções de inicialização do kernel.
root@localhost rdc]# mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost rdc]#
Reconfigurando opções de inicialização do kernel para sistemas de arquivos XFS
Esta etapa só é necessária sob duas condições -
- Quando o disco / partição em que ativamos as cotas, está usando o sistema de arquivos xfs
- Quando o kernel está passando o parâmetro noquota para / etc / fstab no momento da inicialização
Step 1 - Faça um backup de / etc / default / grub.
cp /etc/default/grub ~/
Step 2- Modifique / etc / default / grub .
Aqui está o arquivo padrão.
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
Queremos modificar a seguinte linha -
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
para
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv
=cl/swap rhgb quiet rootflags=usrquota,grpquota"
Note- É importante copiarmos essas alterações literalmente. Depois de reconfigurar o grub.cfg, nosso sistema irá falhar ao inicializar se algum erro for cometido na configuração. Por favor, tente esta parte do tutorial em um sistema que não seja de produção.
Step 3 - Faça backup do seu grub.cfg de trabalho
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
Faça um novo grub.cfg
[root@localhost rdc]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dbba7fa47f73457b96628ba8f3959bfd
Found initrd image: /boot/initramfs-0-rescuedbba7fa47f73457b96628ba8f3959bfd.img
done
[root@localhost rdc]#
Reiniciar
[root@localhost rdc]#reboot
Se todas as modificações fossem precisas, não deveríamos ter disponibilidade para adicionar cotas ao sistema de arquivos xfs .
[rdc@localhost ~]$ mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[rdc@localhost ~]$
Passamos os parâmetros usrquota e grpquota via grub.
Agora, edite novamente / etc / fstab para incluir / since / home no mesmo disco físico.
/dev/mapper/cl-root/xfs
defaults,usrquota,grpquota 0 0
Agora vamos habilitar os bancos de dados de cotas.
[root@localhost rdc]# quotacheck -acfvugM
Certifique-se de que as cotas estejam ativadas.
[root@localhost rdc]# quotaon -ap
group quota on / (/dev/mapper/cl-root) is on
user quota on / (/dev/mapper/cl-root) is on
group quota on /home (/dev/mapper/cl-home) is on
user quota on /home (/dev/mapper/cl-home) is on
[root@localhost rdc]#
Remonte o sistema de arquivos
Se a partição ou disco estiver separado da partição ativamente inicializada, podemos remontar sem reinicializar. Se a cota foi configurada em um disco / partição inicializado no diretório raiz /, pode ser necessário reiniciar o sistema operacional. Forçando a remontagem e a aplicação de alterações, a necessidade de remontar o sistema de arquivos pode variar.
[rdc@localhost ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 22447404 4081860 18365544 19% /
devtmpfs 903448 0 903448 0% /dev
tmpfs 919308 100 919208 1% /dev/shm
tmpfs 919308 9180 910128 1% /run
tmpfs 919308 0 919308 0% /sys/fs/cgroup
/dev/sda2 1268736 176612 1092124 14% /boot
/dev/mapper/cl-var 4872192 158024 4714168 4% /var
/dev/mapper/cl-home 18475008 37284 18437724 1% /home
tmpfs 183864 8 183856 1% /run/user/1000
[rdc@localhost ~]$
Como podemos ver, os volumes LVM estão em uso. Portanto, é simples apenas reiniciar. Isso remontará / home e carregará as alterações de configuração de / etc / fstab na configuração ativa.
Criar arquivos de banco de dados de cotas
O CentOS agora é capaz de trabalhar com cotas de disco em / home. Para habilitar o suporte de cota total, devemos executar oquotacheck comando.
quotacheck criará dois arquivos -
- aquota.user
- aquota.group
Eles são usados para armazenar informações de cota para os discos / partições habilitados para cota.
A seguir estão as opções comuns de verificação.
Interruptor | Açao |
---|---|
-você | Verifica as cotas do usuário |
-g | Verifica as cotas de grupo |
-c | As cotas devem ser habilitadas para cada sistema de arquivos com cotas habilitadas |
-v | Exibe saída detalhada |
Adicionar limites de cota por usuário
Para isso, usaremos o comando edquota, seguido do nome de usuário -
[root@localhost rdc]# edquota centos
Disk quotas for user centos (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/cl-root 12 0 0 13 0 0
/dev/mapper/cl-home 4084 0 0 140 0 0
Vejamos cada coluna.
Filesystem - São as cotas do sistema de arquivos para o usuário aplicado
blocks - Quantos blocos o usuário está usando atualmente em cada sistema de arquivos
soft- Defina blocos para um limite suave. O limite flexível permite que o usuário carregue cota por um determinado período de tempo
hard- Defina blocos para um limite rígido. O limite rígido é a cota total permitida
inodes - Quantos inodes o usuário está usando atualmente
soft - Limite de inode suave
hard - Limite de inode rígido
Para verificar nossa cota atual como usuário -
[centos@localhost ~]$ quota
Disk quotas for user centos (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/cl-home 6052604 56123456 61234568 475 0 0 [centos@localhost ~]$
A seguir está um erro fornecido a um usuário quando o limite máximo da cota é excedido.
[centos@localhost Downloads]$ cp CentOS-7-x86_64-LiveKDE-1611.iso.part ../Desktop/
cp: cannot create regular file ‘../Desktop/CentOS-7-x86_64-LiveKDE-
1611.iso.part’: Disk quota exceeded
[centos@localhost Downloads]$
Como podemos ver, estamos próximos da cota de disco deste usuário. Vamos definir um aviso de limite suave. Dessa forma, o usuário será avisado com antecedência antes que os limites de cota expirem. Por experiência própria, você receberá reclamações do usuário final quando ele entrar no trabalho e precisar gastar 45 minutos limpando arquivos para realmente começar a trabalhar.
Como um administrador, podemos verificar o uso da cota com o repquota comando.
[root@localhost Downloads]# repquota /home
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------------------------
root -- 0 0 0 3 0 0
centos -+ 6189824 56123456 61234568 541 520 540 6days
[root@localhost Downloads]#
Como podemos ver, o usuário centos excedeu sua cota de hard block e não pode mais usar mais espaço em disco em / home .
- + indica que uma cota rígida foi excedida no sistema de arquivos.
Ao planejar cotas, é necessário fazer um pouco de matemática. O que um administrador precisa saber é: Quantos usuários estão no sistema? Quanto espaço livre para alocar entre usuários / grupos? Quantos bytes constituem um bloco no sistema de arquivos?
Defina cotas em termos de blocos relacionados ao espaço livre em disco. Recomenda-se deixar um buffer "seguro" de espaço livre no sistema de arquivos que permanecerá no pior cenário: todas as cotas são excedidas simultaneamente. Isso ocorre especialmente em uma partição usada pelo sistema para gravar logs.
systemdé a nova maneira de executar serviços no Linux. O systemd tem um sysvinit substituído . O systemd traz tempos de inicialização mais rápidos para o Linux e agora é uma forma padrão de gerenciar serviços Linux. Embora estável, o systemd ainda está evoluindo.
systemd como um sistema init, é usado para gerenciar serviços e daemons que precisam de mudanças de status após o kernel do Linux ter sido inicializado. Pela mudança de status, o início, a parada, o recarregamento e o ajuste do estado do serviço são aplicados.
Primeiro, vamos verificar a versão do systemd atualmente em execução em nosso servidor.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
A partir da versão 7 do CentOS, totalmente atualizada no momento em que este documento foi escrito, a versão 219 do systemd é a versão estável atual.
Também podemos analisar o último tempo de inicialização do servidor com systemd-analyze
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
Quando os tempos de inicialização do sistema são mais lentos, podemos usar o comando systemd-analyze blame .
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
Ao trabalhar com o systemd , é importante entender o conceito de unidades .Unitssão os recursos que o sistema sabe interpretar. As unidades são categorizadas em 12 tipos da seguinte forma -
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
Na maior parte do tempo, trabalharemos com .service como alvos da unidade. Recomenda-se fazer pesquisas adicionais sobre os outros tipos. Como apenas unidades .service serão aplicadas para iniciar e interromper serviços systemd .
Cada unidade é definida em um arquivo localizado em -
/lib/systemd/system - arquivos de unidade base
/etc/systemd/system - arquivos de unidade modificados iniciados em tempo de execução
Gerenciar serviços com systemctl
Para trabalhar com o systemd , precisaremos nos familiarizar com o comando systemctl . A seguir estão as opções de linha de comando mais comuns para systemctl .
Interruptor | Açao |
---|---|
-t | Valores separados por vírgulas de tipos de unidade, como serviço ou soquete |
-uma | Mostra todas as unidades carregadas |
--Estado | Mostra todas as unidades em um estado definido, seja: carga, sub, ativo, inativo, etc. |
-H | Executa a operação remotamente. Especifique o nome do host ou host e usuário separados por @. |
Uso básico do systemctl
systemctl [operation]
example: systemctl --state [servicename.service]
Para uma rápida olhada em todos os serviços em execução em nossa caixa.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
Parando um serviço
Vamos primeiro parar o serviço bluetooth.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
Como podemos ver, o serviço bluetooth agora está inativo.
Para iniciar o serviço bluetooth novamente.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note- Não especificamos bluetooth.service, pois o .service está implícito. É uma boa prática pensar no tipo de unidade anexando o serviço com o qual estamos lidando. Portanto, a partir de agora, usaremos a extensão .service para esclarecer que estamos trabalhando nas operações da unidade de serviço.
As principais ações que podem ser realizadas em um serviço são -
Começar | Inicia o serviço |
Pare | Para um serviço |
recarregar | Recarrega a configuração ativa de um serviço sem interrompê-lo (como kill -HUP em system v init) |
Reiniciar | Inicia e depois interrompe um serviço |
Habilitar | Inicia um serviço no momento da inicialização |
Desabilitar | Impede um serviço de iniciar automaticamente em tempo de execução |
As ações acima são usadas principalmente nos seguintes cenários -
Começar | Para ativar um serviço que foi colocado no estado interrompido. |
Pare | Para encerrar temporariamente um serviço (por exemplo, quando um serviço deve ser interrompido para acessar arquivos bloqueados pelo serviço, como ao atualizar o serviço) |
recarregar | Quando um arquivo de configuração foi editado e queremos aplicar as novas mudanças sem interromper o serviço. |
Reiniciar | No mesmo cenário que recarregar, mas o serviço não oferece suporte para recarregar . |
Habilitar | Quando queremos que um serviço desabilitado seja executado no momento da inicialização. |
Desabilitar | Usado principalmente quando há necessidade de interromper um serviço, mas começa na inicialização. |
Para verificar o status de um serviço -
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
Mostre-nos o status atual do serviço de rede . Se quisermos ver todos os serviços relacionados à rede, podemos usar -
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
Para aqueles familiarizados com o sysinitmétodo de gerenciamento de serviços, é importante fazer a transição para o systemd . systemd é a nova maneira de iniciar e parar serviços daemon no Linux.
systemctlé o utilitário usado para controlar o systemd. O systemctl fornece aos administradores CentOS a capacidade de realizar uma infinidade de operações no systemd, incluindo -
- Configurar unidades systemd
- Obter status de unidades do sistema
- Iniciar e parar serviços
- Ativar / desativar serviços systemd para tempo de execução, etc.
A sintaxe de comando para systemctl é bastante básica, mas pode emaranhada com interruptores e opções. Apresentaremos as funções mais essenciais do systemctl necessárias para administrar o CentOS Linux.
Basic systemctl syntax:
systemctl [OPTIONS] COMMAND [NAME]
A seguir estão os comandos comuns usados com systemctl -
- start
- stop
- restart
- reload
- status
- is-active
- list-units
- enable
- disable
- cat
- show
Já discutimos iniciar , parar , recarregar , reiniciar , habilitar e desabilitar com systemctl. Então, vamos examinar os demais comandos comumente usados.
status
Em sua forma mais simples, o comando status pode ser usado para ver o status do sistema como um todo -
[root@localhost rdc]# systemctl status
● localhost.localdomain
State: running
Jobs: 0 queued
Failed: 0 units
Since: Thu 2017-01-19 19:14:37 EST; 4h 5min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1002.slice
│ └─session-1.scope
│ ├─2869 gdm-session-worker [pam/gdm-password]
│ ├─2881 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2888 gnome-session --session gnome-classic
│ ├─2895 dbus-launch --sh-syntax --exit-with-session
A saída acima foi condensada. No sistema do mundo real, o status ctl produzirá cerca de 100 linhas de status do processo treed.
Digamos que desejamos verificar o status do nosso serviço de firewall -
[root@localhost rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-19 19:14:55 EST; 4h 12min ago
Docs: man:firewalld(1)
Main PID: 825 (firewalld)
CGroup: /system.slice/firewalld.service
└─825 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Como você pode ver, nosso serviço de firewall está ativo há mais de 4 horas.
unidades de lista
O comando list-units permite listar todas as unidades de um determinado tipo. Vamos verificar se há sockets gerenciados pelo systemd -
[root@localhost]# systemctl list-units --type=socket
UNIT LOAD ACTIVE SUB DESCRIPTION
avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket loaded active running CUPS Printing Service Sockets
dbus.socket loaded active running D-Bus System Message Bus Socket
dm-event.socket loaded active listening Device-mapper event daemon FIFOs
iscsid.socket loaded active listening Open-iSCSI iscsid Socket
iscsiuio.socket loaded active listening Open-iSCSI iscsiuio Socket
lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket
lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
rpcbind.socket loaded active listening RPCbind Server Activation Socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
systemd-journald.socket loaded active running Journal Socket
systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
virtlockd.socket loaded active listening Virtual machine lock manager socket
virtlogd.socket loaded active listening Virtual machine log manager socket
Agora vamos verificar os serviços atualmente em execução -
[root@localhost rdc]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
está ativo
O comando is-active é um exemplo de comandos systemctl projetados para retornar as informações de status de uma unidade.
[root@localhost rdc]# systemctl is-active ksm.service
active
gato
cat é um dos comandos raramente usados. Em vez de usar cat no shell e digitar o caminho para um arquivo de unidade, simplesmente use systemctl cat .
[root@localhost]# systemctl cat firewalld
# /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before = NetworkManager.service
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)
[Service]
EnvironmentFile = -/etc/sysconfig/firewalld
ExecStart = /usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS ExecReload = /bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput = null
StandardError = null
Type = dbus
BusName = org.fedoraproject.FirewallD1
[Install]
WantedBy = basic.target
Alias = dbus-org.fedoraproject.FirewallD1.service
[root@localhost]#
Agora que exploramos o systemd e o systemctl com mais detalhes, vamos usá-los para gerenciar os recursos em cgroups ou grupos de controle .
cgroups ou grupos de controle são um recurso do kernel do Linux que permite a um administrador alocar ou limitar os recursos do sistema para serviços e também grupos.
Para listar os grupos de controle ativos em execução, podemos usar o seguinte comando ps -
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
O gerenciamento de recursos, a partir do CentOS 6.X, foi redefinido com a implementação do init do systemd . Ao pensar em Gerenciamento de Recursos para serviços, o principal foco são os cgroups .cgroupsavançaram com o systemd em funcionalidade e simplicidade.
O objetivo dos cgroups no gerenciamento de recursos é - nenhum serviço pode derrubar o sistema como um todo. Ou nenhum processo de serviço único (talvez um script PHP mal escrito) prejudicará a funcionalidade do servidor por consumir muitos recursos.
cgroups permitem controle de recursos de unidades para os seguintes recursos -
CPU - Limite as tarefas intensivas da CPU que não são críticas como outras tarefas menos intensivas
Memory - Limite a quantidade de memória que um serviço pode consumir
Disks - Limitar i / o do disco
** Tempo de CPU: **
As tarefas que precisam de menos prioridade de CPU podem ter fatias de CPU configuradas de maneira personalizada.
Vamos dar uma olhada nos dois serviços a seguir, por exemplo.
Polite CPU Service 1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
Evil CPU Service 2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
Vamos definir o serviço educado usando uma prioridade de CPU menor -
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
Como podemos ver, durante um período de tempo ocioso do sistema normal, ambos os processos invasores ainda usam ciclos de CPU. No entanto, aquele configurado para ter menos fatias de tempo está usando menos tempo de CPU. Com isso em mente, podemos ver como usar um intervalo de tempo menor permitiria às tarefas essenciais um melhor acesso aos recursos do sistema.
Para definir serviços para cada recurso, o método set-property define os seguintes parâmetros -
systemctl set-property name parameter=value
Fatias de CPU | CPUShares |
Limite de Memória | MemoryLimit |
Limite de memória suave | MemorySoftLimit |
Peso IO do bloco | BlockIOWeight |
Limite de dispositivo de bloqueio (especificado em / volume / caminho)) | BlockIODeviceWeight |
Leia IO | BlockIOReadBandwidth |
Gravação de disco IO | BlockIOReadBandwidth |
Na maioria das vezes, os serviços serão limitados pelo uso da CPU , limites de memória e E / S de leitura / gravação .
Depois de alterar cada um, é necessário recarregar o systemd e reiniciar o serviço -
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
Configurar CGroups no CentOS Linux
Para fazer cgroups personalizados no CentOS Linux, precisamos primeiro instalar os serviços e configurá-los.
Step 1 - Instale o libcgroup (se ainda não estiver instalado).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
Como podemos ver, por padrão o CentOS 7 tem o libcgroup instalado com o instalador de tudo . Usar um instalador mínimo exigirá que instalemos os utilitários libcgroup junto com todas as dependências.
Step 2 - Inicie e ative o serviço cgconfig.
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group configuration service.
[root@localhost]#
A seguir estão os comandos comuns usados com o gerenciamento de processos - bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice.
Trabalhar com Processos
Quick Note: Process PID in Linux
No Linux, cada processo em execução recebe um PID ou Número de ID de Processo. Este PID é como o CentOS identifica um processo particular. Como já discutimos, o systemd é o primeiro processo iniciado e recebe um PID de 1 no CentOS.
Pgrep é usado para obter o PID do Linux para um determinado nome de processo.
[root@CentOS]# pgrep systemd
1
[root@CentOS]#
Como visto, o comando pgrep retorna o PID atual do systemd.
Processo básico do CentOS e gerenciamento de trabalhos no CentOS
Ao trabalhar com processos no Linux, é importante saber como os processos básicos de primeiro e segundo plano são executados na linha de comando.
fg - Traz o processo para o primeiro plano
bg - Mova o processo para segundo plano
jobs - Lista dos processos atuais anexados ao shell
ctrl+z - Combinação de teclas Control + z para suspender o processo atual
& - Inicia o processo em segundo plano
Vamos começar a usar o comando sleep do shell .sleepvai simplesmente fazer como é nomeado, dormir por um período de tempo definido: dormir .
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 &
[1] 12454
[root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs
[1]- Running sleep 10 &
[2]+ Running sleep 20 &
[cnetos@CentOS ~]$
Agora, vamos trazer o primeiro trabalho para o primeiro plano -
[root@CentOS ~]$ fg 1
sleep 10
Se você estiver acompanhando, notará que o trabalho de primeiro plano está preso em seu shell. Agora, vamos colocar o processo em suspensão e reativá-lo em segundo plano.
- Pressione control + z
- Digite: bg 1, enviando o primeiro trabalho em segundo plano e iniciando-o.
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1
[1]+ sleep 20 &
[root@CentOS ~]$
nohup
Ao trabalhar a partir de um shell ou terminal, é importante notar que, por padrão, todos os processos e tarefas anexados ao shell serão encerrados quando o shell for fechado ou o usuário efetuar logout. Ao usar o nohup, o processo continuará a ser executado se o usuário fizer logout ou fechar o shell ao qual o processo está conectado.
[root@CentOS]# nohup ping www.google.com &
[1] 27299
nohup: ignoring input and appending output to ‘nohup.out’
[root@CentOS]# pgrep ping
27299
[root@CentOS]# kill -KILL `pgrep ping`
[1]+ Killed nohup ping www.google.com
[root@CentOS rdc]# cat nohup.out
PING www.google.com (216.58.193.68) 56(84) bytes of data.
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms
Comando ps
o pscomando é comumente usado por administradores para investigar instantâneos de um processo específico. O ps é comumente usado com grep para filtrar um processo específico para análise.
[root@CentOS ~]$ ps axw | grep python
762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid
1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
15550 pts/0 S+ 0:00 grep --color=auto python
No comando acima, vemos todos os processos usando o interpretador python . Também incluído com os resultados estava nosso comando grep, procurando a string python .
A seguir estão as opções de linha de comando mais comuns usadas com o ps .
Interruptor | Açao |
---|---|
uma | Exclui restrições de apenas os processos de relatório para o usuário atual |
x | Mostra processos não anexados a um tty ou shell |
W | Formata a exibição de saída ampla da saída |
e | Mostra o ambiente após o comando |
-e | Seleciona todos os processos |
-o | Saída formatada definida pelo usuário |
-você | Mostra todos os processos de um usuário específico |
-C | Mostra todos os processos por nome ou id de processo |
--ordenar | Classifica os processos por definição |
Para ver todos os processos em uso pelo usuário nobody -
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
Para ver todas as informações sobre o processo firewalld -
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
Vamos ver quais processos estão consumindo mais memória -
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
Veja todos os processos por centos e formato do usuário, exibindo a saída personalizada -
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm
PID USER COMMAND
5802 centos gnome-keyring-d
5812 cnetos gnome-session
5819 cnetos dbus-launch
5820 cnetos dbus-daemon
5888 cnetos gvfsd
5893 cnetos gvfsd-fuse
5980 cnetos ssh-agent
5996 cnetos at-spi-bus-laun
Comando pstree
pstreeé semelhante ao ps, mas não é usado com frequência. Ele exibe os processos em uma árvore mais organizada.
[centos@CentOS ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─cgrulesengd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
A produção total do pstree pode exceder 100 linhas. Normalmente, o ps fornecerá informações mais úteis.
comando superior
topé um dos comandos mais usados ao solucionar problemas de desempenho no Linux. É útil para estatísticas em tempo real e monitoramento de processos no Linux. A seguir está a saída padrão de top quando ativada a partir da linha de comando.
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache
KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg
8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal-
6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc
6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
Teclas de atalho comuns usadas durante a execução do top ( as teclas de atalho são acessadas pressionando a tecla enquanto o top está sendo executado no shell).
Comando | Açao |
---|---|
b | Ativa / desativa o destaque em negrito no menu superior |
z | Ciclos do esquema de cores |
eu | Ciclos do rumo médio da carga |
m | Ciclos o cabeçalho médio da memória |
t | Título de informação da tarefa |
h | Menu de ajuda |
Shift + F | Personaliza os campos de classificação e exibição |
A seguir estão as opções de linha de comando comuns para o topo .
Comando | Açao |
---|---|
-o | Classifica por coluna (pode preceder com - ou + para classificar em ordem crescente ou decrescente) |
-você | Mostra apenas processos de um usuário especificado |
-d | Atualiza o tempo de atraso do topo |
-O | Retorna uma lista de colunas cujo topo pode aplicar classificação |
Tela de opções de ordem superior, apresentados usando Shift + F . Esta tela permite a personalização da exibição superior e das opções de classificação.
Fields Management for window 1:Def, whose current sort field is %MEM
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id TGID = Thread Group Id
* USER = Effective User Name ENVIRON = Environment vars
* PR = Priority vMj = Major Faults delta
* NI = Nice Value vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nsIPC = IPC namespace Inode
* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode
* S = Process Status nsNET = NET namespace Inode
* %CPU = CPU Usage nsPID = PID namespace Inode
* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode
* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
topo , mostrando os processos para o rdc do usuário e classificados por uso de memória -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND
6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell
6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen
6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm
6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga
6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus
6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
Mostrando campos principais válidos (condensado) -
[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
comando matar
o killcomando é usado para matar um processo do shell de comando por meio de seu PID. Ao matar um processo, precisamos especificar um sinal para enviar. O sinal permite ao kernel saber como queremos encerrar o processo. Os sinais mais comumente usados são -
SIGTERMestá implícito, pois o kernel permite que um processo saiba que deve parar assim que for seguro fazê-lo. O SIGTERM dá ao processo a oportunidade de sair normalmente e realizar operações de saída seguras.
SIGHUPa maioria dos daemons irá reiniciar quando enviado SIGHUP . Isso é freqüentemente usado nos processos quando mudanças foram feitas em um arquivo de configuração.
SIGKILLjá que SIGTERM é o equivalente a solicitar o encerramento de um processo. O kernel precisa de uma opção para encerrar um processo que não atenderá às solicitações. Quando um processo é interrompido , a opção SIGKILL é usada para encerrar o processo explicitamente.
Para obter uma lista de todos os sinais que podem ser enviados com kill, a opção -l pode ser usada -
[root@CentOS]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@CentOS rdc]#
Usando SIGHUP para reiniciar o sistema.
[root@CentOS]# pgrep systemd
1
464
500
643
15071
[root@CentOS]# kill -HUP 1
[root@CentOS]# pgrep systemd
1
464
500
643
15196
15197
15198
[root@CentOS]#
pkillvai permitir que o administrador para enviar uma matança sinal pelo nome do processo.
[root@CentOS]# pgrep ping
19450
[root@CentOS]# pkill -9 ping
[root@CentOS]# pgrep ping
[root@CentOS]#
killallirá matar todos os processos. Tenha cuidado ao usar killall como root, pois irá matar todos os processos de todos os usuários.
[root@CentOS]# killall chrome
comando livre
freeé um comando bastante simples frequentemente usado para verificar rapidamente a memória de um sistema. Ele exibe a quantidade total de memória física e de troca usada.
[root@CentOS]# free
total used free shared buff/cache available
Mem: 1879668 526284 699796 10304 653588 1141412
Swap: 3145724 0 3145724
[root@CentOS]#
bom comando
nicepermitirá que um administrador defina a prioridade de agendamento de um processo em termos de uso da CPU. A gentileza é basicamente como o kernel irá agendar fatias de tempo da CPU para um processo ou trabalho. Por padrão, presume-se que o processo tenha acesso igual aos recursos da CPU.
Primeiro, vamos usar o top para verificar a gentileza dos processos em execução no momento.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged
690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl]
9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract
9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a
9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f
9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon
1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
Queremos nos concentrar na coluna NICE retratada pela NI . O intervalo de niceness pode ser qualquer lugar entre -20 a positivo 19. -20 representa a prioridade mais alta fornecida.
nohup nice --20 ping www.google.com &
Renice
O renice nos permite alterar a prioridade atual de um processo que já está em execução.
renice 17 -p 30727
O comando acima irá diminuir a prioridade do nosso comando de processo de ping .
firewalld é o controlador front-end padrão para iptables no CentOS. O front-end firewalld tem duas vantagens principais sobre o iptables bruto -
Usa cadeias e regras de abstração de zonas fáceis de configurar e implementar.
Os conjuntos de regras são dinâmicos, o que significa que as conexões com estado não são interrompidas quando as configurações são alteradas e / ou modificadas.
Lembre-se, firewalld é o invólucro para iptables - não um substituto. Embora os comandos iptables personalizados possam ser usados com o firewalld , é recomendável usar o firewalld para não quebrar a funcionalidade do firewall.
Primeiro, vamos ter certeza de que firewalld está iniciado e habilitado.
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Podemos ver, firewalld está ativo (para iniciar na inicialização) e atualmente em execução. Se inativo ou não iniciado, podemos usar -
systemctl start firewalld && systemctl enable firewalld
Agora que nosso serviço firewalld está configurado, vamos garantir que ele esteja operacional.
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
Podemos ver que o serviço firewalld está totalmente funcional.
Firewalld trabalha com o conceito de zonas . Uma zona é aplicada às interfaces de rede por meio do Network Manager. Discutiremos isso na configuração da rede . Mas, por enquanto, por padrão, alterar a zona padrão mudará todos os adaptadores de rede deixados no estado padrão de "Zona padrão".
Vamos dar uma olhada rápida em cada zona que vem pronta para uso com o firewalld .
Sr. Não. | Zona e Descrição |
---|---|
1 | drop Baixo nível de confiança. Todas as conexões de entrada e pacotes são descartados e apenas as conexões de saída são possíveis por meio de statefullness |
2 | block As conexões de entrada são respondidas com uma mensagem icmp informando ao iniciador que a solicitação é proibida |
3 | public Todas as redes são restritas. No entanto, as conexões de entrada selecionadas podem ser explicitamente permitidas |
4 | external Configura firewalld para NAT. A rede interna permanece privada, mas acessível |
5 | dmz Apenas certas conexões de entrada são permitidas. Usado para sistemas em isolamento DMZ |
6 | work Por padrão, confie em mais computadores na rede, assumindo que o sistema está em um ambiente de trabalho seguro |
7 | hone Por padrão, mais serviços não são filtrados. Supondo que um sistema esteja em uma rede doméstica onde serviços como NFS, SAMBA e SSDP serão usados |
8 | trusted Todas as máquinas da rede são confiáveis. A maioria das conexões de entrada são permitidas sem restrições.This is not meant for interfaces exposed to the Internet |
As zonas mais comuns de uso são: pública, queda, trabalho e casa.
Alguns cenários onde cada zona comum seria usada são -
public- É a zona mais comum usada por um administrador. Ele permitirá que você aplique as configurações personalizadas e cumpra as especificações RFC para operações em uma LAN.
drop- Um bom exemplo de quando usar o drop é em uma conferência de segurança, em uma rede WiFi pública ou em uma interface conectada diretamente à Internet. O drop assume que todas as solicitações não solicitadas são maliciosas, incluindo probes ICMP. Portanto, qualquer solicitação fora do estado não receberá resposta. A desvantagem da queda é que ele pode interromper a funcionalidade de aplicativos em certas situações que exigem conformidade RFC estrita.
work- Você está em uma LAN corporativa semissegura. Onde todo o tráfego pode ser considerado moderadamente seguro. Isso significa que não é WiFi e possivelmente temos IDS, IPS e segurança física ou 802.1x em vigor. Também devemos estar familiarizados com as pessoas que usam a LAN.
home- Você está em uma LAN doméstica. Você é pessoalmente responsável por cada sistema e pelo usuário na LAN. Você conhece todas as máquinas da LAN e sabe que nenhuma foi comprometida. Freqüentemente, novos serviços são apresentados para compartilhamento de mídia entre indivíduos confiáveis e você não precisa perder tempo por questões de segurança.
As zonas e as interfaces de rede funcionam de um a vários níveis. Uma interface de rede só pode ter uma única zona aplicada a ela por vez. Enquanto, uma zona pode ser aplicada a várias interfaces simultaneamente.
Vamos ver quais zonas estão disponíveis e quais são as zonas atualmente aplicadas.
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Pronto para adicionar algumas regras personalizadas no firewalld?
Primeiro, vamos ver como é a nossa caixa, para um scanner de porta de fora.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
Vamos permitir as solicitações de entrada na porta 80.
Primeiro, verifique qual zona é aplicada como padrão.
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Em seguida, defina a regra permitindo a porta 80 para a zona padrão atual.
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
Agora, vamos verificar nossa caixa após permitir as conexões da porta 80.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
Agora, permite tráfego não solicitado para 80.
Vamos colocar a zona padrão para descartar e ver o que acontece com a varredura de porta.
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
Agora vamos examinar o host com a interface de rede em uma zona mais segura.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
Agora, tudo é filtrado de fora.
Conforme demonstrado abaixo, o host nem mesmo responderá às solicitações de ping ICMP quando em queda .
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Vamos definir a zona padrão como pública novamente.
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Agora vamos verificar nosso conjunto de regras de filtragem atual em público .
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
Conforme configurado, nossa regra de filtro da porta 80 está apenas dentro do contexto da configuração em execução. Isso significa que assim que o sistema for reinicializado ou o serviço firewalld for reiniciado, nossa regra será descartada.
Estaremos configurando um daemon httpd em breve, então vamos fazer nossas mudanças persistentes -
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
Agora, nossa regra de porta 80 na zona pública é persistente em reinicializações e reinicializações de serviço.
A seguir estão os comandos firewalld comuns aplicados com firewall-cmd .
Comando | Açao |
---|---|
firewall-cmd --get-zones | Lista todas as zonas que podem ser aplicadas a uma interface |
firewall-cmd —status | Retorna o status atual do serviço firewalld |
firewall-cmd --get-default-zone | Obtém a zona padrão atual |
firewall-cmd --set-default-zone = <zone> | Define a zona padrão no contexto atual |
firewall-cmd --get-active-zone | Obtém as zonas atuais no contexto, conforme aplicado a uma interface |
firewall-cmd --zone = <zone> --list-all | Lista a configuração da zona fornecida |
firewall-cmd --zone = <zone> --addport = <port / transport protocol> | Aplica uma regra de porta ao filtro de zona |
--permanente | Torna as alterações na zona persistentes. Sinalizador é usado em linha com comandos de modificação |
Estes são os conceitos básicos de administração e configuração do firewalld .
Configurar serviços de firewall baseados em host no CentOS pode ser uma tarefa complexa em cenários de rede mais sofisticados. O uso e configuração avançados de firewalld e iptables no CentOS podem levar a um tutorial inteiro. No entanto, apresentamos o básico que deve ser suficiente para completar a maioria das tarefas diárias.
PHP é uma das linguagens da web mais prolíficas em uso hoje. Instalar um LAMP Stack no CentOS é algo que todo administrador de sistema precisará realizar, provavelmente mais cedo ou mais tarde.
Uma pilha LAMP tradicional consiste em (L) inux (A) pache (M) ySQL (P) HP.
Existem três componentes principais para uma pilha LAMP no CentOS -
- Servidor web
- Plataforma / linguagem de desenvolvimento da Web
- Servidor de banco de dados
Note- O termo LAMP Stack também pode incluir as seguintes tecnologias: PostgreSQL, MariaDB, Perl, Python, Ruby, NGINX Webserver.
Para este tutorial, ficaremos com a pilha LAMP tradicional do CentOS GNU Linux: servidor da web Apache, servidor de banco de dados MySQL e PHP.
Na verdade, usaremos o MariaDB. Os arquivos de configuração do MySQL, bancos de dados e tabelas são transparentes para MariaDB. MariaDB agora está incluído no repositório CentOS padrão em vez do MySQL. Isso se deve às limitações de licenciamento e conformidade de código aberto, uma vez que a Oracle assumiu o desenvolvimento do MySQL.
A primeira coisa que precisamos fazer é instalar o Apache.
[root@CentOS]# yum install httpd
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
extras/7/x86_64/primary_d
| 121 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.sigmanet.com
* extras: linux.mirrors.es.net
* updates: mirror.eboundhost.com
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package:
httpd-2.4.6-45.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.645.el7.centos.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Installed:
httpd.x86_64 0:2.4.6-45.el7.centos
Dependency Installed:
httpd-tools.x86_64 0:2.4.6-45.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
[root@CentOS]#
Vamos configurar o serviço httpd .
[root@CentOS]# systemctl start httpd && systemctl enable httpd
Agora, vamos ter certeza de que o servidor web está acessível através do firewalld.
bash-3.2# nmap -sS -p 1-1024 -T 5 -sV 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-28 02:00 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00054s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS))
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds bash-3.2#
Como você pode ver pelo probe de serviço nmap, o servidor web Apache está ouvindo e respondendo às solicitações no host CentOS.
Instale o servidor de banco de dados MySQL
[root@CentOS rdc]# yum install mariadb-server.x86_64 && yum install mariadb-
devel.x86_64 && mariadb.x86_64 && mariadb-libs.x86_64
Estamos instalando os seguintes pacotes de repositório para MariaDB -
mariadb-server.x86_64
O pacote principal daemon do MariaDB Server.
mariadb-devel.x86_64
Os arquivos precisam ser compilados a partir da fonte com compatibilidade com MySQL / MariaDB.
mariadb.x86_64
Utilitários de cliente MariaDB para administrar o Servidor MariaDB a partir da linha de comando.
mariadb-libs.x86_64
Bibliotecas comuns para MariaDB que podem ser necessárias para outros aplicativos compilados com suporte a MySQL / MariaDB.
Agora, vamos iniciar e habilitar o serviço MariaDB.
[root@CentOS]# systemctl start mariadb
[root@CentOS]# systemctl enable mariadb
Note- Ao contrário do Apache, não permitiremos conexões com MariaDB por meio de nosso firewall baseado em host (firewalld). Ao usar um servidor de banco de dados, é considerada a melhor prática de segurança permitir apenas conexões de soquete locais, a menos que o acesso de soquete remoto seja especificamente necessário.
Vamos nos certificar de que o servidor MariaDB está aceitando conexões.
[root@CentOS#] netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
[root@CentOS rdc]#
Como podemos ver, MariaDB está escutando na porta 3306 tcp. Deixaremos nosso firewall baseado em host (firewalld) bloqueando as conexões de entrada para a porta 3306.
Instalar e configurar o PHP
[root@CentOS#] yum install php.x86_64 && php-common.x86_64 && php-mysql.x86_64
&& php-mysqlnd.x86_64 && php-pdo.x86_64 && php-soap.x86_64 && php-xml.x86_64
Eu recomendo instalar os seguintes pacotes php para compatibilidade comum -
- php-common.x86_64
- php-mysql.x86_64
- php-mysqlnd.x86_64
- php-pdo.x86_64
- php-soap.x86_64
- php-xml.x86_64
[root@CentOS]# yum install -y php-common.x86_64 php-mysql.x86_64 php-
mysqlnd.x86_64 php-pdo.x86_64 php-soap.x86_64 php-xml.x86_64
Este é nosso arquivo php simples localizado na webroot Apache de / var / www / html /
[root@CentOS]# cat /var/www/html/index.php
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
<?php
echo "We are now running PHP on GNU Centos Linux!<br />"
?>
</body>
</html>
[root@CentOS]#
Vamos mudar o grupo proprietário de nossa página para o usuário do sistema sob o qual nosso daemon http está sendo executado.
[root@CentOS]# chgrp httpd /var/www/html/index.php && chmod g+rx /var/www/html/index.php
---
Quando solicitado manualmente via ncat.
bash-3.2# ncat 10.211.55.1 80
GET / index.php
HTTP/1.1 200 OK
Date: Sat, 28 Jan 2017 12:06:02 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 137
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
We are now running PHP on GNU Centos Linux!<br />
</body>
</html>
bash-3.2#
PHP e LAMP são tecnologias de programação web muito populares. A instalação e configuração do LAMP certamente farão parte da sua lista de necessidades como administrador do CentOS. Pacotes CentOS fáceis de usar exigem muito trabalho de compilar Apache, MySQL e PHP a partir do código-fonte.
Python é uma linguagem interpretada amplamente usada que trouxe profissionalismo ao mundo da codificação de aplicativos com script no Linux (e outros sistemas operacionais). Onde o Perl já foi o padrão da indústria, o Python ultrapassou o Perl em muitos aspectos.
Alguns pontos fortes do Python versus Perl são -
Progressão rápida em refinamento
Bibliotecas que são padrão para a linguagem
A legibilidade do código é pensada na definição da linguagem
Muitos frameworks profissionais para tudo, desde suporte GUI a desenvolvimento web
Python pode fazer qualquer coisa que Perl pode fazer, e em muitos casos de uma maneira melhor. Embora Perl ainda tenha seu lugar na caixa de ferramentas de um administrador Linux, aprender Python é uma ótima escolha como conjunto de habilidades.
As maiores desvantagens do Python às vezes estão relacionadas aos seus pontos fortes. Na história, Python foi originalmente projetado para ensinar programação. Às vezes, seus fundamentos principais de "fácil leitura" e "fazer as coisas da maneira certa" podem causar complexidades desnecessárias ao escrever um código simples. Além disso, suas bibliotecas padrão causaram problemas na transição das versões 2.X para 3.X.
Scripts Python são usados no núcleo do CentOS para funções vitais para a funcionalidade do sistema operacional. Por causa disso, é importante isolar nosso ambiente Python de desenvolvimento do ambiente Python central do CentOS.
Para começar, existem atualmente duas versões do Python: Python 2.X e Python 3.X.
Ambos os estágios ainda estão em produção ativa, embora a versão 2.X esteja rapidamente se aproximando da depreciação (e isso já acontece há alguns anos). A razão para as duas versões ativas do Python foi basicamente consertar as deficiências da versão 2.X. Isso exigia que algumas funcionalidades básicas da versão 3.X fossem refeitas de maneiras que não podiam suportar alguns scripts da versão 2.X.
Basicamente, a melhor maneira de superar essa transição é: Desenvolva para 3.X e mantenha-se atualizado com a versão 2.X mais recente para scripts legados. Atualmente, o CentOS 7.X depende de uma revisão semi-atual da versão 2.X.
No momento em que este livro foi escrito, as versões mais atuais do Python são: 3.4.6 e 2.7.13.
Não deixe que isso confunda ou tire conclusões do Python. Configurar um ambiente Python é muito simples. Com bibliotecas e estruturas Python, essa tarefa é realmente muito fácil de realizar.
Antes de configurar nossos ambientes Python, precisamos de um ambiente são. Para começar, vamos ter certeza de que a instalação do CentOS está totalmente atualizada e instalar alguns utilitários de construção.
Step 1 - Atualize o CentOS.
[root@CentOS]# yum -y update
Step 2 - Instale utilitários de compilação.
[root@CentOS]# yum -y groupinstall "development tools"
Step 3 - Instale alguns pacotes necessários.
[root@CentOS]# yum install -y zlib-dev openssl-devel sqlite-devel bip2-devel
Agora precisamos instalar o Python 2.X e 3.X atual da fonte.
- Baixar arquivos compactados
- Extrair arquivos
- Compilar o código fonte
Vamos começar criando um diretório de construção para cada instalação do Python em / usr / src /
[root@CentOS]# mkdir -p /usr/src/pythonSource
Agora vamos baixar os tarballs de origem para cada -
[root@CentOS]# wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
[root@CentOS]# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
Agora precisamos extrair cada um do arquivo.
Step 1 - Instale xz-libs e extraia os tarballs.
[root@CentOS]# yum install xz-libs
[root@CentOS python3]# xz -d ./*.xz
[root@CentOS python3]# ls
Python-2.7.13.tar Python-3.6.0.tar
[root@CentOS python3]#
Step 2 - Descompacte cada instalador de seu tarball.
[root@CentOS]# tar -xvf ./Python-2.7.13.tar
[root@CentOS]# tar -xvf ./Python-3.6.0.tar
Step 3 - Entre em cada diretório e execute o script de configuração.
[root@CentOS]# ./configure --prefix=/usr/local
root@CentOS]# make altinstall
Note - Certifique-se de usar altinstalle não instalar. Isso manterá o CentOS e as versões de desenvolvimento do Python separados. Caso contrário, você pode interromper a funcionalidade do CentOS.
Você verá agora que o processo de compilação começa. Pegue uma xícara de café e faça uma pausa de 15 minutos até a conclusão. Como instalamos todas as dependências necessárias para Python, o processo de compilação deve ser concluído sem erros.
Vamos nos certificar de que temos a versão 2.X mais recente do Python instalada.
[root@CentOS Python-2.7.13]# /usr/local/bin/python2.7 -V
Python 2.7.13
[root@CentOS Python-2.7.13]#
Note - Você desejará prefixar a linha shebang apontando para nosso ambiente de desenvolvimento para Python 2.X.
[root@CentOS Python-2.7.13]# cat ver.py
#!/usr/local/bin/python2.7
import sys
print(sys.version)
[root@CentOS Python-2.7.13]# ./ver.py
2.7.13 (default, Jan 29 2017, 02:24:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
Assim, temos instalações separadas do Python para as versões 2.X e 3.X. A partir daqui, podemos usar cada um e utilitários comopip e virtualenv para facilitar ainda mais a carga de gerenciamento de ambientes Python e instalação de pacotes.
Ruby é uma ótima linguagem para desenvolvimento web e administração Linux. Ruby oferece muitos benefícios encontrados em todas as linguagens discutidas anteriormente: PHP, Python e Perl.
Para instalar o Ruby, é melhor inicializar por meio do rbenv, que permite aos administradores instalar e gerenciar facilmente os ambientes Ruby.
O outro método para instalar Ruby são os pacotes CentOS padrão para Ruby. É aconselhável usar o método rbenv com todos os seus benefícios. Os pacotes CentOS serão mais fáceis para os não experientes em Ruby.
Primeiro, vamos obter algumas dependências necessárias para o instalador rbenv.
- git-core
- zlib
- zlib-devel
- gcc-c++
- patch
- readline
- readline-devel
- libyaml-devel
- libffi-devel
- openssl-devel
- make
- bzzip2
- autoconf
- automake
- libtool
- bison
- curl
- sqlite-devel
Muitos desses pacotes já podem estar instalados, dependendo das opções e funções escolhidas ao instalar o CentOS. É bom instalar tudo o que não temos certeza, pois isso pode levar a menos dores de cabeça ao instalar pacotes que requerem dependências.
[root@CentOS]# yum -y install git-core zlib zlib-devel gcc-c++ patch readline
readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf
automake libtool bison curl sqlite-devel
Método 1: rbenv para ambientes de desenvolvimento dinâmico de Ruby
Agora, como o usuário que usará Ruby -
[rdc@CentOS ~]$ git clone https://github.com/rbenv/rbenv.git
[rdc@CentOS ~]$ https://github.com/rbenv/ruby-build.git
ruby-build irá fornecer recursos de instalação para rbenv -
Note- Precisamos mudar para root ou um usuário de administração antes de executar install.sh
[rdc@CentOS ruby-build]$ cd ~/ruby-build
[rdc@CentOS ruby-build]# ./install.sh
Vamos definir nosso shell para rbenv e garantir que instalamos as opções corretas.
[rdc@CentOS ~]$ source ~/rbenv/rbenv.d/exec/gem-rehash.bash [rdc@CentOS ruby-build]$ ~/rbenv/bin/rbenv
rbenv 1.1.0-2-g4f8925a
Usage: rbenv <command> [<args>]
Alguns comandos rbenv úteis são -
Comandos | Açao |
---|---|
local | Define ou mostra a versão Ruby específica do aplicativo local |
global | Define ou mostra a versão global do Ruby |
Concha | Define ou mostra a versão Ruby específica do shell |
instalar | Instala uma versão Ruby usando ruby-build |
Desinstalar | Desinstala uma versão específica de Ruby |
refazer | Refaz os shims rbenv (execute-o depois de instalar os executáveis) |
versão | Mostra a versão atual do Ruby e sua origem |
versões | Lista todas as versões Ruby disponíveis para rbenv |
qual | Mostra o caminho completo para um executável |
donde | Lista todas as versões de Ruby que contêm o determinado executável |
Vamos agora instalar o Ruby -
[rdc@CentOS bin]$ ~/rbenv/bin/rbenv install -v 2.2.1
Após a conclusão da compilação -
[rdc@CentOS ~]$ ./ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
[rdc@CentOS ~]$
Agora temos um ambiente Ruby funcional com uma versão atualizada e funcional do branch Ruby 2.X.
Método 2: instalar Ruby a partir de pacotes CentOS
Este é o método mais simples. No entanto, pode ser limitado pela versão e gemas empacotadas do CentOS. Para um trabalho de desenvolvimento sério, é altamente recomendável usar o método rbenv para instalar o Ruby.
Instale o Ruby, os pacotes de desenvolvimento necessários e algumas joias comuns.
[root@CentOS rdc]# yum install -y ruby.x86_64 ruby-devel.x86_64 ruby-
libs.x86_64 ruby-gem-json.x86_64 rubygem-rake.noarch
Infelizmente, ficamos com uma versão um tanto desatualizada do Ruby.
[root@CentOS rdc]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@CentOS rdc]#
Perljá existe há muito tempo. Ele foi originalmente projetado como uma linguagem de relatório usada para analisar arquivos de texto. Com o aumento da popularidade, Perl adicionou um suporte a módulo ou CPAN, sockets, threading e outros recursos necessários em uma linguagem de script poderosa.
A maior vantagem do Perl sobre PHP, Python ou Ruby é: ele faz as coisas com o mínimo de barulho. Essa filosofia do Perl nem sempre significa que as coisas são feitas da maneira certa. No entanto, para tarefas de administração no Linux, Perl é considerado a escolha certa para uma linguagem de script.
Algumas vantagens do Perl sobre Python ou Ruby são -
Processamento de texto poderoso
Perl torna a escrita de scripts rápida e suja (geralmente um script Perl terá várias dezenas de linhas mais curtos do que um equivalente em Python ou Ruby)
Perl pode fazer qualquer coisa (quase)
Algumas desvantagens do Perl são -
A sintaxe pode ser confusa
O estilo de codificação em Perl pode ser único e atrapalhar a colaboração
Perl não é realmente orientado a objetos
Normalmente, não há muito pensamento colocado em padronização e melhores práticas quando o Perl é usado.
Ao decidir se usar Perl, Python ou PHP; as seguintes perguntas devem ser feitas -
- Este aplicativo algum dia precisará de controle de versão?
- Outras pessoas precisarão modificar o código?
- Outras pessoas precisarão usar este aplicativo?
- Este aplicativo será usado em outra máquina ou arquitetura de CPU?
Se as respostas para todas as perguntas acima forem "não", Perl é uma boa escolha e pode acelerar as coisas em termos de resultados finais.
Com isso mencionado, vamos configurar nosso servidor CentOS para usar a versão mais recente do Perl.
Antes de instalar o Perl, precisamos entender o suporte para Perl. Oficialmente, o Perl só é suportado desde as duas últimas versões estáveis. Portanto, queremos ter certeza de manter nosso ambiente de desenvolvimento isolado da versão CentOS.
A razão para o isolamento é: se alguém lançar uma ferramenta em Perl para a comunidade CentOS, é mais do que provável que ela seja modificada para funcionar em Perl conforme fornecida com o CentOS. No entanto, também queremos ter a versão mais recente instalada para fins de desenvolvimento. Como o Python, o CentOS distribui o Perl focado na confiabilidade e não na vanguarda.
Vamos verificar nossa versão atual do Perl no CentOS 7.
[root@CentOS]# perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
No momento, estamos executando o Perl 5.16.3. A versão mais atual no momento em que este documento foi escrito é: perl-5.24.0
Definitivamente, queremos atualizar nossa versão, sendo capazes de usar módulos Perl atualizados em nosso código. Felizmente, existe uma ótima ferramenta para manter ambientes Perl e manter nossa versão CentOS de Perl isolada. É chamadoperlbrew.
Vamos instalar o Perl Brew.
[root@CentOS]# curl -L https://install.perlbrew.pl | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 170 100 170 0 0 396 0 --:--:-- --:--:-- --:--:-- 397
100 1247 100 1247 0 0 1929 0 --:--:-- --:--:-- --:--:-- 1929
Agora que temos o Perl Brew instalado, vamos criar um ambiente para a versão mais recente do Perl.
Primeiro, precisaremos da versão do Perl instalada atualmente para inicializar a instalação do perlbrew. Portanto, vamos obter alguns módulos Perl necessários do repositório CentOS.
Note - Quando disponível, sempre queremos usar módulos CentOS Perl em vez de CPAN com nossa instalação CentOS Perl.
Step 1 - Instale o módulo CentOS Perl Make :: Maker.
[root@CentOS]# yum -y install perl-ExtUtils-MakeMaker.noarch
Step 2 - Instale a versão mais recente do perl.
[root@CentOS build]# source ~/perl5/perlbrew/etc/bashrc
[root@CentOS build]# perlbrew install -n -j4 --threads perl-5.24.1
As opções que escolhemos para nossa instalação Perl são -
n - Sem testes
j4 - Execute 4 threads em paralelo para as rotinas de instalação (estamos usando uma CPU quadcore)
threads - Ativar suporte de threading para Perl
Depois que nossa instalação for executada com sucesso, vamos mudar para nosso mais novo ambiente Perl.
[root@CentOS]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
A sub-shell is launched with perl-5.24.1 as the activated perl. Run 'exit' to finish it.
[root@CentOS]# perl -v
This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linuxthread-multi
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General
Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system
using "man perl" or "perldoc perl". If you have access to the Internet, point your
browser at http://www.perl.org/, the Perl Home Page.
[root@CentOS]#
Versão perl simples de impressão de script perl rodando dentro do contexto de nosso ambiente perlbrew -
[root@CentOS]# cat ./ver.pl
#!/usr/bin/perl
print $^V . "\n";
[root@CentOS]# perl ./ver.pl
v5.24.1
[root@CentOS]#
Assim que o perl estiver instalado, podemos carregar os módulos cpan com o cpanm do perl brew -
[root@CentOS]# perl-brew install-cpanm
Agora vamos usar o instalador cpanm para fazer o módulo LWP com nossa versão Perl atual de 5.24.1 em perl brew.
Step 1 - Mude para o contexto da nossa versão Perl atual.
[root@CentOS ~]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
Um sub-shell é iniciado com perl-5.24.1 como o perl ativado. Execute 'exit' para finalizá-lo.
[root@CentOS ~]#
Step 2 - Instale o Módulo Perl do Agente do Usuário LWP.
[root@CentOS ~]# ~/perl5/perlbrew/bin/cpanm -i LWP::UserAgent
Step 3 - Agora vamos testar nosso ambiente Perl com o novo módulo CPAN.
[root@CentOS ~]# cat ./get_header.pl
#!/usr/bin/perl
use LWP;
my $browser = LWP::UserAgent->new(); my $response = $browser->get("http://www.slcc.edu/"); unless(!$response->is_success) {
print $response->header("Server");
}
[root@CentOS ~]# perl ./get_header.pl
Microsoft-IIS/8.5 [root@CentOS ~]#
Aí está! Perl Brew torna o isolamento de ambientes perl muito fácil e pode ser considerado uma prática recomendada conforme as coisas acontecem com o Perl.
LDAP conhecido como Light Weight Directory Access Protocolé um protocolo usado para acessar contêineres de serviço X.500 dentro de uma empresa conhecida a partir de um diretório. Aqueles que estão familiarizados com o Windows Server Administration podem pensar no LDAP como sendo de natureza muito semelhante ao Active Directory. É até um conceito amplamente utilizado de entrelaçar estações de trabalho Windows em uma empresa OpenLDAP CentOS. Por outro lado, uma estação de trabalho CentOS Linux pode compartilhar recursos e participar com a funcionalidade básica em um domínio Windows.
A implantação do LDAP no CentOS como Directory Server Agent, Directory System Agent ou DSA (esses acrônimos são todos iguais) é semelhante a instalações antigas do Novell Netware que usam a estrutura da árvore de diretórios com NDS.
Breve História do LDAP
O LDAP foi basicamente criado como uma maneira eficiente de acessar diretórios X.500 com recursos corporativos. Tanto o X.500 quanto o LDAP compartilham as mesmas características e são tão semelhantes que os clientes LDAP podem acessar diretórios X.500 com alguns auxiliares. Embora o LDAP também tenha seu próprio servidor de diretório chamadoslapd. A principal diferença entre LDAP e DAP é que a versão leve foi projetada para operar sobre TCP.
Enquanto o DAP usa o modelo OSI completo. Com o advento da Internet, TCP / IP e proeminência Ethernet nas redes de hoje, é raro encontrar uma implantação de Directory Services usando diretórios corporativos DAP e X.500 nativos fora de modelos de computação legados específicos.
Os principais componentes usados com openldap para CentOS Linux são -
openldap | Bibliotecas de suporte LDAP |
---|---|
servidor openldap | Servidor ldap |
openldap-clients | Utilidades do cliente LDAP |
openldap-devel | Bibliotecas de desenvolvimento para OpenLDAP |
compay-openldap | Bibliotecas compartilhadas OpenLDAP |
slapd | Daemon do servidor de diretório do OpenLDAP |
slurpd | Usado para replicação LDAP em um domínio corporativo |
Note - Ao nomear sua empresa, é uma prática recomendada usar o .localTLD. Usar um .net ou .com pode causar dificuldades ao segregar uma infraestrutura de domínio online e interna. Imagine o trabalho extra para uma empresa internamente usando acme.com para operações externas e internas. Portanto, pode ser aconselhável ter recursos da Internet chamados acme.com ou acme.net . Em seguida, os recursos da empresa de rede local são descritos como acme.local . Isso envolverá a configuração de registros DNS, mas pagará em simplicidade, eloqüência e segurança.
Instale o Open LDAP no CentOS
Instale openldap, openldap-servers, openldap-clients e migrationstools do YUM .
[root@localhost]# yum -y install openldap openldap-servers openldap-clients
migration tools
Loaded plugins: fastestmirror, langpacks
updates
| 3.4 kB 00:00:00
updates/7/x86_64/primary_db
| 2.2 MB 00:00:05
Determining fastest mirrors
(1/2): extras/7/x86_64/primary_db
| 121 kB 00:00:01
(2/2): base/7/x86_64/primary_db
| 5.6 MB 00:00:16
Package openldap-2.4.40-13.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package openldap-clients.x86_64 0:2.4.40-13.el7 will be installed
---> Package openldap-servers.x86_64 0:2.4.40-13.el7 will be installed
--> Finished Dependency Resolution
base/7/x86_64/group_gz
| 155 kB 00:00:00
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
openldap-clients x86_64
2.4.40-13.el7 base 188 k
openldap-servers x86_64
2.4.40-13.el7 base 2.1 M
Transaction Summary
===============================================================================
===============================================================================
Install 2 Packages
Total download size: 2.3 M
Installed size: 5.3 M
Downloading packages:
Installed:
openldap-clients.x86_64 0:2.4.40-13.el7
openldap-servers.x86_64 0:2.4.40-13.el7
Complete!
[root@localhost]#
Agora, vamos começar e habilitar o serviço slapd -
[root@centos]# systemctl start slapd
[root@centos]# systemctl enable slapd
Neste ponto, vamos garantir que temos nossa estrutura openldap em / etc / openldap .
root@localhost]# ls /etc/openldap/
certs check_password.conf ldap.conf schema slapd.d
[root@localhost]#
Em seguida, certifique-se de que nosso serviço slapd esteja funcionando.
root@centos]# netstat -antup | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1641/slapd
tcp6 0 0 :::389 :::* LISTEN 1641/slapd
[root@centos]#
A seguir, vamos configurar nossa instalação do Open LDAP .
Certifique-se de que nosso usuário ldap do sistema foi criado.
[root@localhost]# id ldap
uid=55(ldap) gid=55(ldap) groups=55(ldap)
[root@localhost]#
Gere nossas credenciais LDAP.
[root@localhost]# slappasswd
New password:
Re-enter new password:
{SSHA}20RSyjVv6S6r43DFPeJgASDLlLoSU8g.a10
[root@localhost]#
Precisamos salvar a saída do slappasswd.
Configurar o LDAP aberto
Step 1 - Configure o LDAP para o domínio e adicione o usuário administrativo.
Primeiro, queremos configurar nosso ambiente openLDAP. A seguir está um modelo para usar com o comando ldapmodify .
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: <output from slap
Faça alterações em: /etc/openldap/slapd.d/cn=config/olcDatabase = {1} monitor.ldif com o comando ldapmodify.
[root@localhost]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/rdc/Documents/db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
[root@localhost cn=config]#
Vamos verificar a configuração LDAP modificada.
root@linux1 ~]# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
[root@centos]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 a163f14c
dn: olcDatabase = {2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 1bd9aa2a-8516-1036-934b-f7eac1189139
creatorsName: cn=config
createTimestamp: 20170212022422Z
olcSuffix: dc=vmnet,dc=local
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
olcRootPW:: e1NTSEF1bUVyb1VzZTRjc2dkYVdGaDY0T0k =
entryCSN: 20170215204423.726622Z#000000#000#000000
modifiersName: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20170215204423Z
[root@centos]#
Como você pode ver, nossas modificações empresariais LDAP foram bem-sucedidas.
Em seguida, queremos criar um certificado SSL autoassinado para OpenLDAP. Isso protegerá a comunicação entre o servidor corporativo e os clientes.
Step 2 - Crie um certificado autoassinado para OpenLDAP.
Usaremos o openssl para criar um certificado SSL autoassinado. Vá para o próximo capítulo,Create LDAP SSL Certificate with opensslpara obter instruções sobre como proteger as comunicações com OpenLDAP. Então, quando os certificados SSL forem configurados, teremos concluído nossa configuração corporativa OpenLDAP.
Step 3 - Configure o OpenLDAP para usar comunicações seguras com certificado.
Crie um arquivo certs.ldif no vim com as seguintes informações -
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/yourGeneratedCertFile.pem
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/youGeneratedKeyFile.pem
Em seguida, novamente, use o comando ldapmodify para mesclar as alterações na configuração do OpenLDAP.
[root@centos rdc]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
[root@centos]#
Finalmente, vamos testar nossa configuração OpenLADP.
[root@centos]# slaptest -u
config file testing succeeded
[root@centos]#
Step 4 - Configurar banco de dados slapd.
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG &&
chown ldap:ldap /var/lib/ldap/*
Atualiza o esquema OpenLDAP.
Adicione os esquemas LDAP cosseno e nis.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
Finalmente, crie o esquema corporativo e adicione-o à configuração OpenLDAP atual.
A seguir, um domínio denominado vmnet. local com um administrador LDAP chamado ldapadm .
dn: dc=vmnet,dc=local
dc: vmnet
objectClass: top
objectClass: domain
dn: cn=ldapadm ,dc=vmnet,dc=local
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou = People,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: People
dn: ou = Group,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: Group
Finalmente, importe isso para o esquema OpenLDAP atual.
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f ./base.ldif
Enter LDAP Password:
adding new entry "dc=vmnet,dc=local"
adding new entry "cn=ldapadm ,dc=vmnet,dc=local"
adding new entry "ou=People,dc=vmnet,dc=local"
adding new entry "ou=Group,dc=vmnet,dc=local"
[root@centos]#
Step 5 - Configure um OpenLDAP Enterprise Users.
Abra o vim ou seu editor de texto favorito e copie o seguinte formato. Isso é configurado para um usuário chamado "entacct" no domínio LDAP "vmnet.local".
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
Agora importe os arquivos acima, conforme salvos, no esquema OpenLdap.
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f entuser.ldif
Enter LDAP Password:
adding new entry "uid=entacct,ou=People,dc=vmnet,dc=local"
[root@centos]#
Antes que os usuários possam acessar o LDAP Enterprise, precisamos atribuir uma senha da seguinte forma -
ldappasswd -s password123 -W -D "cn=ldapadm,dc=entacct,dc=local" -x "uid=entacct
,ou=People,dc=vmnet,dc=local"
-s especifica a senha para o usuário
-x é o nome de usuário ao qual a senha atualizada é aplicada
-D é o * nome distinto "para autenticação no esquema LDAP.
Finalmente, antes de entrar na conta Enterprise, vamos verificar nossa entrada OpenLDAP .
[root@centos rdc]# ldapsearch -x cn=entacct -b dc=vmnet,dc=local
# extended LDIF
#
# LDAPv3
# base <dc=vmnet,dc=local> with scope subtree
# filter: cn=entacct
# requesting: ALL
#
# entacct, People, vmnet.local
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
Converter itens como / etc / passwd e / etc / groups para autenticação OpenLDAP requer o uso de ferramentas de migração. Eles estão incluídos no pacote migrationtools . Em seguida, instalado em / usr / share / migrationtools .
[root@centos openldap-servers]# ls -l /usr/share/migrationtools/
total 128
-rwxr-xr-x. 1 root root 2652 Jun 9 2014 migrate_aliases.pl
-rwxr-xr-x. 1 root root 2950 Jun 9 2014 migrate_all_netinfo_offline.sh
-rwxr-xr-x. 1 root root 2946 Jun 9 2014 migrate_all_netinfo_online.sh
-rwxr-xr-x. 1 root root 3011 Jun 9 2014 migrate_all_nis_offline.sh
-rwxr-xr-x. 1 root root 3006 Jun 9 2014 migrate_all_nis_online.sh
-rwxr-xr-x. 1 root root 3164 Jun 9 2014 migrate_all_nisplus_offline.sh
-rwxr-xr-x. 1 root root 3146 Jun 9 2014 migrate_all_nisplus_online.sh
-rwxr-xr-x. 1 root root 5267 Jun 9 2014 migrate_all_offline.sh
-rwxr-xr-x. 1 root root 7468 Jun 9 2014 migrate_all_online.sh
-rwxr-xr-x. 1 root root 3278 Jun 9 2014 migrate_automount.pl
-rwxr-xr-x. 1 root root 2608 Jun 9 2014 migrate_base.pl
Step 6 - Finalmente, precisamos permitir o acesso ao serviço slapd para que ele possa atender às solicitações.
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload
Configurar acesso de cliente LDAP
A configuração do acesso do cliente LDAP requer os seguintes pacotes no cliente: openldap, open-ldap clients e nss_ldap.
Configurar a autenticação LDAP para sistemas cliente é um pouco mais fácil.
Step 1 - Instale pacotes dependentes -
# yum install -y openldap-clients nss-pam-ldapd
Step 2- Configure a autenticação LDAP com authconfig .
authconfig --enableldap --enableldapauth --ldapserver=10.25.0.1 --
ldapbasedn="dc=vmnet,dc=local" --enablemkhomedir --update
Step 3 - Reinicie o serviço nslcd.
systemctl restart nslcd
Fundo TLS e SSL
TLS é o novo padrão para segurança de camada de soquete, procedendo de SSL. O TLS oferece melhores padrões de criptografia com outros recursos de wrapper de protocolo e segurança que avançam o SSL. Freqüentemente, os termos TLS e SSL são usados alternadamente. No entanto, como um administrador profissional do CentOS, é importante observar as diferenças e a história que separa cada um.
SSL vai até a versão 3.0. SSL foi desenvolvido e promovido como um padrão da indústria sob a Netscape. Depois que o Netscape foi comprado pela AOL (um ISP popular nos anos 90 também conhecido como America Online), a AOL nunca realmente promoveu a mudança necessária para melhorias de segurança no SSL.
Na versão 3.1, a tecnologia SSL mudou para os padrões de sistemas abertos e foi alterada para TLS . Como os direitos autorais sobre SSL ainda eram propriedade da AOL, um novo termo foi cunhado:TLS - Transport Layer Security. Portanto, é importante reconhecer que o TLS é de fato diferente do SSL . Especialmente porque as tecnologias SSL mais antigas têm problemas de segurança conhecidos e algumas são consideradas obsoletas hoje.
Note- Este tutorial usará o termo TLS ao falar de tecnologias 3.1 e superiores. Em seguida, SSL ao comentar específico para tecnologias SSL 3.0 e inferiores.
Controle de versão SSL vs TLS
A tabela a seguir mostra como o controle de versão de TLS e SSL se relacionaria um com o outro. Eu ouvi algumas pessoas falarem em termos de SSL versão 3.2. No entanto, eles provavelmente aprenderam a terminologia lendo um blog. Como um administrador profissional, sempre queremos usar a terminologia padrão. Portanto, ao falar SSL deve ser uma referência às tecnologias anteriores. Coisas simples podem fazer um candidato a emprego CentOS parecer um CS Major experiente.
TLS | SSL |
---|---|
- | 3,0 |
1.0 | 3,1 |
1,1 | 3,2 |
1,2 | 3,3 |
O TLS desempenha duas funções principais importantes para os usuários da Internet hoje: uma, verifica quem é uma parte, conhecida comoauthentication. Dois, ofereceend-to-end encryption na camada de transporte para protocolos de nível superior que não possuem esse recurso nativo (ftp, http, protocolos de e-mail e mais).
O primeiro verifica quem é a parte e é importante para a segurança como criptografia ponta a ponta. Se um consumidor tiver uma conexão criptografada com um site que não está autorizado a receber pagamentos, os dados financeiros ainda estarão em risco. Isso é o que todo site de phishing deixará de ter:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
Existem apenas dois métodos para contornar a falta de um certificado assinado corretamente: enganar o usuário para permitir a confiança de um navegador da web para um certificado autoassinado ou esperar que o usuário não tenha experiência em tecnologia e não saiba a importância de um certificado confiável Autoridade (ou um CA).
Neste tutorial, usaremos o que é conhecido como certificado autoassinado . Isso significa que, sem dar explicitamente a esse certificado o status de confiável em todos os navegadores da Web que visitam o site, um erro será exibido desencorajando os usuários de visitar o site. Em seguida, fará com que o usuário salte algumas ações antes de acessar um site com um certificado autoassinado. Lembre-se, por uma questão de segurança, isso é uma coisa boa.
Instalar e configurar o openssl
openssl é o padrão para implementações de código aberto de TLS. O openssl é usado em sistemas como Linux, distribuições BSD, OS X e até suporta Windows.
O openssl é importante, pois fornece segurança da camada de transporte e abstrai a programação detalhada de autenticação e criptografia ponta a ponta para um desenvolvedor. É por isso que o openssl é usado com quase todos os aplicativos de código aberto que usam TLS. Ele também é instalado por padrão em todas as versões modernas do Linux.
Por padrão, o openssl deve ser instalado no CentOS a partir da versão 5 em diante. Só para garantir, vamos tentar instalar o openssl via YUM. Basta executar install, pois o YUM é inteligente o suficiente para nos informar se um pacote já está instalado. Se estivermos executando uma versão mais antiga do CentOS por motivos de compatibilidade, fazer uma instalação yum -y garantirá que o openssl seja atualizado contra a vulnerabilidade de sangramento semirrecente.
Ao executar o instalador, verificou-se que, na verdade, havia uma atualização para o openssl .
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
Criar certificado autoassinado para OpenLDAP
Este é um método para criar uma autoassinada para nossa instalação anterior do OpenLDAP .
Para criar um Certificado OpenLDAP autoassinado.
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
Agora, nossos certificados OpenLDAP devem ser colocados em / etc / openldap / certs /
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Como você pode ver, temos o certificado e a chave instalados nos diretórios / etc / openldap / certs / . Finalmente, precisamos alterar as permissões de cada um, uma vez que atualmente pertencem ao usuário root.
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Criar certificado autoassinado para Apache Web Server
Neste tutorial, assumiremos que o Apache já está instalado. Instalamos o Apache em outro tutorial (configuração do Firewall CentOS) e iremos para a instalação avançada do Apache para um tutorial futuro. Portanto, se você ainda não instalou o Apache, siga em frente.
Uma vez que o Apache HTTPd pode ser instalado usando as seguintes etapas -
Step 1 - Instale o mod_ssl para o servidor Apache httpd.
Primeiro, precisamos configurar o Apache com mod_ssl. Usar o gerenciador de pacotes YUM é muito simples -
[root@centos]# yum -y install mod_ssl
Em seguida, recarregue seu daemon Apache para garantir que o Apache use a nova configuração.
[root@centos]# systemctl reload httpd
Neste ponto, o Apache está configurado para suportar conexões TLS no host local.
Step 2 - Crie o certificado SSL autoassinado.
Primeiro, vamos configurar nosso diretório de chave TLS privada.
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note- Certifique-se de que apenas a raiz tenha acesso de leitura / gravação a este diretório. Com o acesso mundial de leitura / gravação, sua chave privada pode ser usada para descriptografar o tráfego detectado.
Gerando o certificado e os arquivos de chave.
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note - Você pode usar o endereço IP público do servidor se não tiver um nome de domínio registrado.
Vamos dar uma olhada em nosso certificado -
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
Aqui está uma explicação para cada opção que usamos com o comando openssl -
Comando | Açao |
---|---|
req -X509 | Use o padrão de PKI de gerenciamento de CSR X.509 para gerenciamento de chaves. |
-nodos | Não proteja nosso certificado com uma senha longa. O Apache deve ser capaz de usar o certificado sem interrupção de uma frase-senha. |
dias 2555 | Indica a validade do certificado em 7 anos ou 2555 dias. O período de tempo pode ser ajustado conforme necessário. |
-newkey rsa: 2048 | Especificado para gerar a chave e o certificado usando RSA com 2048 bits de comprimento. |
Em seguida, queremos criar um grupo Diffie-Heliman para negociar PFS com clientes.
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Isso levará de 5 a 15 minutos.
Perfect Forward Secrecy- Usado para proteger os dados da sessão, caso a chave privada seja comprometida. Isso irá gerar uma chave usada entre o cliente e o servidor que é única para cada sessão.
Agora, adicione a configuração Perfect Forward Secrecy ao nosso certificado.
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
Configure o Apache para usar arquivos de chave e certificado
Estaremos fazendo alterações em /etc/httpd/conf.d/ssl.conf -
Faremos as seguintes alterações em ssl.conf . No entanto, antes de fazermos isso, devemos fazer backup do arquivo original. Ao fazer alterações em um servidor de produção em um editor de texto avançado como vi ou emcas , é uma prática recomendada sempre fazer backup dos arquivos de configuração antes de fazer edições.
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
Agora, vamos continuar nossas edições após copiar uma cópia de trabalho conhecida do ssl.conf para a raiz de nossa pasta pessoal.
- Locate
- Edite DocumentRoot e ServerName da seguinte forma.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRooteste é o caminho para o diretório padrão do apache. Nesta pasta deve haver uma página padrão que exibirá uma solicitação HTTP solicitando a página padrão do seu servidor web ou site.
ServerNameé o nome do servidor, que pode ser um endereço IP ou o nome do host do servidor. Para TLS, é uma prática recomendada criar um certificado com um nome de host. Em nosso tutorial OpenLdap, criamos um nome de host de centos no domínio corporativo local: vmnet.local
Agora queremos comentar as seguintes linhas.
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
Em seguida, informe ao Apache onde encontrar nosso certificado e par de chaves privadas / públicas.
Especifique o caminho para o nosso arquivo de certificado autoassinado
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
Finalmente, precisamos permitir conexões de entrada para https na porta 443.
Neste capítulo, aprenderemos um pouco sobre o histórico de como o Apache HTTP Server surgiu e então instalaremos a versão estável mais recente no CentOS Linux 7.
Breve histórico do Apache WebServer
Apache é um servidor web que existe há muito tempo. Na verdade, quase tanto quanto a existência do próprio http!
O Apache começou como um projeto pequeno no National Center for Supercomputing Applications, também conhecido como NCSA. Em meados da década de 90, o "httpd", como era chamado, era de longe a plataforma de servidor da web mais popular na Internet, tendo cerca de 90% ou mais da participação de mercado.
Nessa época, era um projeto simples. A equipe de TI qualificada, conhecida como webmaster, era responsável por: manter plataformas de servidor web e software de servidor web, bem como desenvolvimento de sites front-end e back-end. No centro do httpd estava sua capacidade de usar módulos personalizados conhecidos como plug-ins ou extensões. Um webmaster também era qualificado o suficiente para escrever patches para o software do servidor central.
Em algum momento no final dos anos 90, o desenvolvedor sênior e gerente de projeto do httpd deixou o NCSA para fazer outras coisas. Isso deixou o daemon da web mais popular em um estado de estagnação.
Visto que o uso do httpd estava tão difundido, um grupo de webmasters experientes do httpd convocou uma reunião sobre o futuro do httpd. Decidiu-se coordenar e aplicar as melhores extensões e patches em uma versão estável atual. Então, o atual avô dos servidores http nasceu e batizou o Apache HTTP Server.
Little Known Historical Fact- Apache não recebeu o nome de uma tribo de guerreiros nativos americanos. Na verdade, foi cunhado e nomeado com uma peculiaridade: sendo feito a partir de muitas correções (ou patches) de muitos cientistas da computação talentosos: apatchy ou Apache.
Instale a versão estável atual no CentOS Linux 7
Step 1 - Instale o httpd via yum.
yum -y install httpd
Neste ponto, o servidor Apache HTTP será instalado via yum.
Step 2 - Edite o arquivo httpd.conf específico para suas necessidades httpd.
Com uma instalação padrão do Apache, o arquivo de configuração do Apache é denominado httpd.conf e está localizado em / etc / httpd / . Então, vamos abri-lo no vim .
As primeiras linhas do httpd.conf foram abertas no vim -
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
Faremos as seguintes alterações para permitir que nossa instalação do CentOS atenda às solicitações http da porta 80 http.
Ouvindo host e porta
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
A partir daqui, mudamos o Apache para escutar em uma determinada porta ou endereço IP. Por exemplo, se quisermos executar serviços httpd em uma porta alternativa como 8080. Ou se tivermos nosso servidor web configurado com várias interfaces com endereços IP separados.
Ouço
Impede que o Apache se conecte a todos os daemon de escuta em todos os endereços IP. Isso é útil para parar de especificar apenas o tráfego IPv6 ou IPv4. Ou mesmo vinculando-se a todas as interfaces de rede em um host multihomed.
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
Listen 10.0.0.25:80
#Listen 80
DocumentRoot
A "raiz do documento" é o diretório padrão onde o Apache procurará um arquivo de índice para atender às solicitações ao visitar seu servidor: http://www.yoursite.com/ irá recuperar e servir o arquivo de índice da raiz do seu documento.
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
Step 3 - Inicie e ative o serviço httpd.
[root@centos rdc]# systemctl start httpd && systemctl reload httpd
[root@centos rdc]#
Step 4 - Configure o firewall para permitir o acesso às solicitações da porta 80.
[root@centos]# firewall-cmd --add-service=http --permanent
Conforme mencionado brevemente ao configurar o CentOS para uso com Maria DB, não existe um pacote MySQL nativo no repositório CentOS 7 yum . Para dar conta disso, precisaremos adicionar um repositório hospedado em MySQL.
MariaDB vs MySQL no CentOS Linux
Uma coisa a se notar é que o MySQL exigirá um conjunto diferente de dependências básicas do MariaDB. O uso do MySQL também quebrará o conceito e a filosofia do CentOS: pacotes de produção projetados para máxima confiabilidade.
Portanto, ao decidir se usar Maria ou MySQL deve-se pesar duas opções: Meu esquema de banco de dados atual funcionará com Maria? Qual a vantagem de instalar o MySQL em vez do Maria?
Os componentes do Maria são 100% transparentes para a estrutura do MySQL, com alguma eficiência adicional com melhor licenciamento. A menos que apareça um motivo convincente, é aconselhável configurar o CentOS para usar o MariaDB.
Os maiores motivos para favorecer Maria no CentOS são -
A maioria das pessoas usará MariaDB. Quando tiver problemas, você obterá mais assistência com Maria.
O CentOS foi projetado para funcionar com Maria. Portanto, Maria oferecerá melhor estabilidade.
Maria é oficialmente compatível com CentOS.
Baixe e adicione o repositório MySQL
Queremos baixar e instalar o repositório MySQL de -
http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
Step 1 - Baixe o Repositório.
O repositório vem convenientemente empacotado em um pacote rpm para fácil instalação. Ele pode ser baixado com wget -
[root@centos]# wget http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
--2017-02-26 03:18:36-- http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.86.98.130
Step 2 - Instale o MySQL do YUM.
Agora podemos usar o gerenciador de pacotes yum para instalar o MySQL -
[root@centos]# yum -y install mysql-server
Step 3 - Inicie e ative o serviço MySQL Daemon.
[root@centos]# systemctl start mysql
[root@centos]# systemctl enable mysql
Step 4 - Certifique-se de que nosso serviço MySQL esteja instalado e funcionando.
[root@centos]# netstat -antup | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 6572/mysqld
[root@centos]#
Nota - Não permitiremos a passagem de nenhuma regra de firewall. É comum ter o MySQL configurado para usarUnix Domain Sockets. Isso garante que apenas o servidor web da pilha LAMP, localmente, possa acessar o banco de dados MySQL, tirando uma dimensão completa do vetor de ataque no software do banco de dados.
Para enviar um e-mail de nosso servidor CentOS 7, precisaremos da configuração para configurar um Agente de Transferência de Correio (MTA) moderno. O Mail Transfer Agent é o daemon responsável por enviar mensagens de saída para usuários do sistema ou domínios da Internet corporativos via SMTP.
É importante notar que este tutorial ensina apenas o processo de configuração do daemon para uso local. Não entramos em detalhes sobre a configuração avançada para configurar um MTA para operações de negócios. Esta é uma combinação de muitas habilidades, incluindo, mas não se limitando a: DNS, obtenção de um endereço IP estático roteável que não está na lista negra e definição de configurações avançadas de segurança e serviço. Resumindo, este tutorial visa familiarizá-lo com a configuração básica. Não use este tutorial para configuração do MTA de um host voltado para a Internet.
Com seu foco combinado em segurança e facilidade de administração, escolhemos Postfixcomo o MTA para este tutorial. O MTA padrão instalado nas versões anteriores do CentOS é o Sendmail .Sendmailé um ótimo MTA. No entanto, na humilde opinião do autor, o Postfix atinge um ponto ideal ao abordar as seguintes notas para um MTA. Com a versão mais atual do CentOS, o Postfix substituiu o Sendmail como o MTA padrão.
Postfix é um MTA amplamente utilizado e bem documentado. É mantido e desenvolvido ativamente. Ele requer configuração mínima em mente (isso é apenas e-mail) e é eficiente com os recursos do sistema (novamente, isso é apenas e-mail).
Step 1 - Instale o Postfix a partir do Gerenciador de pacotes YUM.
[root@centos]# yum -y install postfix
Step 2 - Configure o arquivo de configuração do Postfix.
O arquivo de configuração do Postfix está localizado em: /etc/postfix/main.cf
Em uma configuração Postfix simples, o seguinte deve ser configurado para um host específico: nome do host, domínio, origem, inet_interfaces e destino.
Configure the hostname- O nome do host é um nome de domínio totalmente qualificado do host Postfix. No capítulo OpenLDAP, chamamos a caixa CentOS: centos no domínio vmnet.local . Vamos ficar com isso neste capítulo.
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
myhostname = centos.vmnet.local
Configure the domain- Conforme declarado acima, o domínio que usaremos neste tutorial é vmnet.local
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = vmnet.local
Configure the origin - Para configurar um único servidor e domínio, precisamos apenas descomentar as seguintes seções e deixar as variáveis Postfix padrão.
# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# [email protected].
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
myorigin = $myhostname myorigin = $mydomain
Configure the network interfaces- Deixaremos o Postfix escutando em nossa única interface de rede e todos os protocolos e endereços IP associados a essa interface. Isso é feito simplesmente deixando as configurações padrão habilitadas para Postfix.
# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
# Enable IPv4, and IPv6 if supported
inet_protocols = all
Step 3 - Configure o suporte SASL para Postfix.
Sem suporte à autenticação SASL, o Postfix só permitirá o envio de e-mail de usuários locais. Ou apresentará um erro de relaying denied quando os usuários enviarem e-mail para fora do domínio local.
Note - SASL ou Simple Application Security Layer Frameworké uma estrutura projetada para autenticação que oferece suporte a diferentes técnicas entre diferentes protocolos da camada de aplicativo. Em vez de deixar os mecanismos de autenticação para o protocolo da camada de aplicativo, os desenvolvedores SASL (e consumidores) aproveitam os protocolos de autenticação atuais para protocolos de nível superior que podem não ter a conveniência ou uma autenticação mais segura (quando se trata de acesso a serviços protegidos) incorporada.
Instale o pacote "cyrus-sasl *
[root@centos]# yum -y install cyrus-sasl
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.forethought.net
* extras: repos.dfw.quadranet.com
* updates: mirrors.tummy.com
Package cyrus-sasl-2.1.26-20.el7_2.x86_64 already installed and latest version
Nothing to do
Configure /etc/postfix/main.cf para SASL Auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
Minhas opções SASL em main.conf
##Configure SASL Options Entries:
smtpd_sasl_auth_enable = yes
smptd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtp_sasl_type = dovecot
smtp_sasl_path = private/auth/etc
Step 4 - Configure o FirewallD para permitir a entrada de serviços SMTP.
[root@centos]# firewall-cmd --permanent --add-service=smtp
success
[root@centos]# firewall-cmd --reload
success
[root@centos]#
Agora vamos verificar se nosso host CentOS está permitindo e respondendo às solicitações na porta 25 (SMTP).
Nmap scan report for 172.16.223.132
Host is up (0.00035s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
20/tcp closed ftp-data
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
389/tcp open ldap
443/tcp open https
MAC Address: 00:0C:29:BE:DF:5F (VMware)
Como você pode ver, o SMTP está escutando e o daemon está respondendo às solicitações de nossa LAN interna.
Instale Dovecot IMAP e servidor POP3
O Dovecot é um servidor IMAP e POP3 seguro projetado para lidar com as necessidades de entrada de emails de uma organização menor ou maior. Devido ao seu uso prolífico com CentOS, estaremos usando Dovecot como um exemplo de instalação e configuração de um servidor de email de entrada para CentOS e MTA SASL Provider.
Conforme observado anteriormente, não configuraremos registros MX para DNS ou criaremos regras seguras que permitam que nossos serviços gerenciem e-mails para um domínio. Portanto, apenas configurar esses serviços em um host voltado para a Internet pode deixar espaço para brechas de segurança sem registros SPF.
Step 1 - Instale Dovecot.
[root@centos]# yum -y install dovecot
Step 2 - Configure dovecot.
O arquivo de configuração principal do dovecot está localizado em: /etc/dovecot.conf . Primeiro, faremos backup do arquivo de configuração principal. É uma boa prática sempre fazer backup dos arquivos de configuração antes de fazer edições. Desta forma, as quebras de linha de id (por exemplo) são destruídas por um editor de texto e anos de mudanças são perdidos. Reverter é tão fácil quanto copiar o backup atual para a produção.
Ativar protocolos e serviço daemon para dovecot
# Protocols we want to be serving.
protocols = imap imaps pop3 pop3s
Agora, precisamos habilitar o daemon dovecot para escutar na inicialização -
[root@localhost]# systemctl start dovecot
[root@localhost]# systemctl enable dovecot
Vamos nos certificar de que o Dovecot esteja escutando localmente nas portas especificadas para: imap, pop3, imap protected e pop3 secure.
[root@localhost]# netstat -antup | grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 4368/dovecot
tcp6 0 0 :::110 :::* LISTEN 4368/dovecot
tcp6 0 0 :::143 :::* LISTEN 4368/dovecot
tcp6 0 0 :::993 :::* LISTEN 4368/dovecot
tcp6 0 0 :::995 :::* LISTEN 4368/dovecot
[root@localhost]#
Como visto, o dovecot está escutando nas portas especificadas para IPv4 e IPv4.
POP3 | 110 |
POP3s | 995 |
IMAP | 143 |
IMAPs | 993 |
Agora, precisamos fazer algumas regras de firewall.
[root@localhost]# firewall-cmd --permanent --add-port=110/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=143/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=995/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=993/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
Nosso servidor de e-mail de entrada está aceitando solicitações de POP3 , POP3s , IMAP e IMAPs para hosts na LAN.
Port Scanning host: 192.168.1.143
Open TCP Port: 21 ftp
Open TCP Port: 22 ssh
Open TCP Port: 25 smtp
Open TCP Port: 80 http
Open TCP Port: 110 pop3
Open TCP Port: 143 imap
Open TCP Port: 443 https
Open TCP Port: 993 imaps
Open TCP Port: 995 pop3s
Antes de nos aprofundarmos na instalação do FTP no CentOS, precisamos aprender um pouco sobre seu uso e segurança. FTPé um protocolo realmente eficiente e bem refinado para a transferência de arquivos entre os sistemas de computador. O FTP é usado e refinado há algumas décadas. Para transferir arquivos de forma eficiente em uma rede com latência ou para velocidade absoluta, o FTP é uma ótima escolha. Mais do que SAMBA ou SMB.
No entanto, o FTP possui alguns problemas de segurança. Na verdade, alguns problemas graves de segurança. O FTP usa um método de autenticação de texto simples muito fraco. É por esse motivo que as sessões autenticadas devem contar com sFTP ou FTPS, onde TLS é usado para criptografia ponta a ponta das sessões de login e transferência.
Com as advertências acima, o FTP simples e antigo ainda tem seu uso no ambiente de negócios hoje. O principal uso é, repositórios de arquivos FTP anônimos. Esta é uma situação em que nenhuma autenticação é garantida para fazer o download ou upload de arquivos. Alguns exemplos de uso de FTP anônimo são -
Grandes empresas de software ainda usam repositórios ftp anônimos, permitindo que os usuários da Internet baixem shareware e patches.
Permitir que usuários da Internet carreguem e baixem documentos públicos.
Alguns aplicativos enviarão automaticamente logs criptografados e arquivados ou arquivos de configuração para um repositório via FTP.
Portanto, como administrador do CentOS, ser capaz de instalar e configurar o FTP ainda é uma habilidade projetada.
Estaremos usando um daemon FTP chamado vsFTPou Daemon FTP Muito Seguro. O vsFTP tem sido usado em desenvolvimento há algum tempo. Ele tem a reputação de ser seguro, fácil de instalar e configurar e é confiável.
Step 1 - Instale o vsFTPd com o Gerenciador de Pacotes YUM.
[root@centos]# yum -y install vsftpd.x86_64
Step 2 - Configure o vsFTP para iniciar na inicialização com systemctl.
[root@centos]# systemctl start vsftpd
[root@centos]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-
user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Step 3 - Configure o FirewallD para permitir o controle de FTP e sessões de transferência.
[root@centos]# firewall-cmd --add-service=ftp --permanent
success
[root@centos]#
Certifique-se de que nosso daemon de FTP esteja funcionando.
[root@centos]# netstat -antup | grep vsftp
tcp6 0 0 :::21 :::* LISTEN 13906/vsftpd
[root@centos]#
Step 4 - Configure vsFTPD para acesso anônimo.
Crie um diretório raiz de FTP
[root@centos]# mkdir /ftp
Altere o proprietário e o grupo da raiz do FTP para ftp
[root@centos]# chown ftp:ftp /ftp
Set minimal permissions for FTP root:
[root@centos]# chmod -R 666 /ftp/
[root@centos]# ls -ld /ftp/
drw-rw-rw-. 2 ftp ftp 6 Feb 27 02:01 /ftp/
[root@centos]#
Nesse caso, fornecemos aos usuários acesso de leitura / gravação a toda a árvore raiz do FTP.
Configure /etc/vsftpd/vsftpd.conf "
[root@centos]# vim /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
Queremos alterar as seguintes diretivas no arquivo vsftp.conf .
Habilite o upload anônimo descomentando anon_mkdir_write_enable = YES
chown arquivos carregados para propriedade do usuário ftp do sistema
chown_uploads = SIM
chown_username = ftp
Altere o usuário do sistema usado pelo vsftp para o usuário ftp: nopriv_user = ftp
Defina o banner personalizado para o usuário ler antes de fazer login.
ftpd_banner = Bem-vindo ao nosso repositório de FTP anônimo. Todas as conexões são monitoradas e registradas.
Vamos definir conexões IPv4 apenas -
ouvir = SIM
listen_ipv6 = NÃO
Agora, precisamos reiniciar ou HUP o serviço vsftp para aplicar nossas alterações.
[root@centos]# systemctl restart vsftpd
Vamos nos conectar ao nosso host FTP e verificar se nosso daemon FTP está respondendo.
[root@centos rdc]# ftp 10.0.4.34
Connected to localhost (10.0.4.34).
220 Welcome to our Anonymous FTP Repo. All connections are monitored and logged.
Name (localhost:root): anonymous
331 Please specify the password.
Password:
'230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Ao falar sobre gerenciamento remoto no CentOS como administrador, vamos explorar dois métodos -
- Gerenciamento de console
- Gerenciamento de GUI
Gerenciamento de console remoto
Gerenciamento de console remoto significa executar tarefas de administração a partir da linha de comando por meio de um serviço como o ssh. Para usar o CentOS Linux de forma eficaz, como administrador, você precisará ser proficiente com a linha de comando. O Linux em sua essência foi projetado para ser usado no console. Mesmo hoje, alguns administradores de sistema preferem o poder do comando e economizam dinheiro no hardware executando caixas Linux básicas, sem terminal físico e sem GUI instalado.
Gerenciamento Remoto de GUI
O gerenciamento remoto de GUI é normalmente realizado de duas maneiras: uma sessão X remota ou um protocolo de camada de aplicativo GUI como VNC. Cada um tem seus pontos fortes e suas desvantagens. No entanto, na maior parte, o VNC é a melhor escolha para administração. Ele permite o controle gráfico de outros sistemas operacionais, como Windows ou OS X, que não suportam nativamente o protocolo X Windows.
O uso de X Sessions remotas é nativo tanto para X-Window's Window-Managers quanto para DesktopManagers rodando no X. No entanto, toda a arquitetura X Session é usada principalmente com Linux. Nem todo administrador de sistema terá um laptop Linux disponível para estabelecer uma sessão X remota. Portanto, é mais comum usar uma versão adaptada do servidor VNC.
As maiores desvantagens do VNC são: VNC não oferece suporte nativo a um ambiente multiusuário, como X-Sessions remotos. Conseqüentemente, para o acesso da GUI aos usuários finais, XSessions remotos seria a melhor escolha. No entanto, estamos principalmente preocupados em administrar um servidor CentOS remotamente.
Discutiremos a configuração do VNC para vários administradores versus algumas centenas de usuários finais com X-Sessions remotas.
Estabelecendo a base para segurança com SSH para acesso remoto ao console
ssh ou Secure Shellagora é o padrão para administrar remotamente qualquer servidor Linux. O SSH, ao contrário do telnet, usa TLS para autenticidade e criptografia ponta a ponta das comunicações. Quando configurado corretamente, um administrador pode ter certeza de que sua senha e o servidor são confiáveis remotamente.
Antes de configurar o SSH, vamos falar um pouco sobre a segurança básica e o acesso menos comum. Quando o SSH está sendo executado em sua porta padrão de 22; mais cedo ou mais tarde, você terá ataques de dicionário de força bruta contra nomes de usuário e senhas comuns. Isso só vem com o território. Não importa quantos hosts você adicione aos arquivos de negação, eles simplesmente virão de diferentes endereços IP diariamente.
Com algumas regras comuns, você pode simplesmente tomar algumas medidas proativas e deixar os bandidos perderem seu tempo. A seguir estão algumas regras de segurança a serem seguidas usando SSH para administração remota em um servidor de produção -
Nunca use um nome de usuário ou senha comum. Os nomes de usuário no sistema não devem ser padrão do sistema ou associados ao endereço de e-mail da empresa, como:[email protected]
O acesso root ou o acesso de administração não devem ser permitidos via SSH. Use um nome de usuário exclusivo e su para fazer o root ou uma conta de administração, uma vez autenticado por SSH.
A política de senha é obrigatória: Senhas de usuário SSH complexas como: "This & IS & a & GUD & P @ ssW0rd & 24 & me". Altere as senhas a cada poucos meses para eliminar a suscetibilidade a ataques incrementais de força bruta.
Desative contas abandonadas ou que não sejam utilizadas por longos períodos. Se um gerente de contratação tiver um correio de voz informando que ele não dará entrevistas por um mês; isso pode levar a pessoas com experiência em tecnologia com muito tempo disponível, por exemplo.
Observe seus registros diariamente. Como administrador do sistema, dedique pelo menos 30-40 minutos todas as manhãs revisando o sistema e os registros de segurança. Se solicitado, diga a todos que você não tem tempo para não ser proativo. Essa prática ajudará a isolar os sinais de alerta antes que um problema se apresente aos usuários finais e aos lucros da empresa.
Note On Linux Security- Qualquer pessoa interessada na administração do Linux deve buscar ativamente as notícias e tecnologias atuais de segurança cibernética. Enquanto ouvimos principalmente sobre outros sistemas operacionais sendo comprometidos, uma caixa Linux insegura é um tesouro muito procurado pelos cibercriminosos. Com o poder do Linux em uma conexão de Internet de alta velocidade, um cibercriminoso habilidoso pode usar o Linux para alavancar ataques em outros sistemas operacionais.
Instalar e configurar SSH para acesso remoto
Step 1 - Instale o servidor SSH e todos os pacotes dependentes.
[root@localhost]# yum -y install openssh-server
'Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.centos.net
* extras: repos.dfw.centos.com
* updates: centos.centos.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:6.6.1p1-33.el7_3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Step 2 - Faça um uso regular seguro para adicionar acesso ao shell.
[root@localhost ~]# useradd choozer
[root@localhost ~]# usermod -c "Remote Access" -d /home/choozer -g users -G
wheel -a choozer
Note- Adicionamos o novo usuário ao grupo wheel permitindo a capacidade de su no root assim que o acesso SSH for autenticado. Também usamos um nome de usuário que não pode ser encontrado nas listas de palavras comuns. Dessa forma, nossa conta não será bloqueada quando o SSH for atacado.
O arquivo que contém as definições de configuração do servidor sshd é / etc / ssh / sshd_config .
As partes que queremos editar inicialmente são -
LoginGraceTime 60m
PermitRootLogin no
Step 3- Recarregue o daemon SSH sshd .
[root@localhost]# systemctl reload sshd
É bom definir o período de tolerância de logoff para 60 minutos. Algumas tarefas de administração complexas podem exceder o padrão de 2 minutos. Na verdade, não há nada mais frustrante do que ter o tempo limite da sessão SSH ao configurar ou pesquisar alterações.
Step 4 - Vamos tentar fazer o login usando as credenciais de root.
bash-3.2# ssh centos.vmnet.local
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Step 5- Não podemos mais entrar remotamente via ssh com credenciais de root . Então, vamos acessar nossa conta de usuário sem privilégios e usar su na conta root .
bash-3.2# ssh [email protected]
[email protected]'s password:
[choozer@localhost ~]$ su root
Password:
[root@localhost choozer]#
Step 6- Por fim, vamos garantir que o serviço SSHD carregue na inicialização e que o firewalld permita conexões SSH externas.
[root@localhost]# systemctl enable sshd
[root@localhost]# firewall-cmd --permanent --add-service=ssh
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
O SSH agora está configurado e pronto para administração remota. Dependendo da fronteira de sua empresa, o dispositivo de fronteira de filtragem de pacotes pode precisar ser configurado para permitir a administração remota SSH fora da LAN corporativa.
Configurar VNC para administração remota CentOS
Existem algumas maneiras de habilitar a administração remota do CentOS via VNC no CentOS 6 - 7. A maneira mais fácil, mas mais limitante, é simplesmente usar um pacote chamado vino .Vinoé um aplicativo Virtual Network Desktop Connection para Linux desenvolvido em torno da plataforma Gnome Desktop. Portanto, presume-se que a instalação foi concluída com o Gnome Desktop. Se o Gnome Desktop não foi instalado, faça-o antes de continuar. O Vino será instalado com uma instalação GUI do Gnome por padrão.
Para configurar o compartilhamento de tela com Vino no Gnome, queremos ir para as Preferências do Sistema CentOS para compartilhamento de tela.
Applications->System Tools->Settings->Sharing
Observações para configurar o VNC Desktop Sharing -
Disable New Connections must ask for access- Esta opção exigirá acesso físico para aprovar todas as conexões. Esta opção impedirá a administração remota, a menos que alguém esteja na área de trabalho física.
Enable Require a password- Isso é separado da senha do usuário. Ele controlará o acesso à área de trabalho virtual e ainda exigirá a senha do usuário para acessar uma área de trabalho bloqueada (isso é bom para a segurança).
Forward UP&P Ports: If available leave disabled- O encaminhamento de portas UP&P enviará solicitações Universal Plug and Play para um dispositivo da camada 3 para permitir conexões VNC ao host automaticamente. Nós não queremos isso.
Certifique-se de que o vino esteja escutando na porta VNC 5900.
[root@localhost]# netstat -antup | grep vino
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4873/vino-server
tcp6 0 0 :::5900 :::* LISTEN 4873/vino-server
[root@localhost]#
Vamos agora configurar nosso Firewall para permitir conexões VNC de entrada.
[root@localhost]# firewall-cmd --permanent --add-port=5900/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost rdc]#
Finalmente, como você pode ver, somos capazes de conectar nosso CentOS Box e administrá-lo com um cliente VNC no Windows ou OS X.
É tão importante obedecer às mesmas regras para VNC que estabelecemos para SSH. Assim como o SSH, o VNC é continuamente verificado em intervalos de IP e testado para senhas fracas. Também vale a pena observar que deixar o login CentOS padrão habilitado com um tempo limite do console ajuda na segurança remota do VNC. Como um invasor precisará do VNC e da senha do usuário, certifique-se de que a senha de compartilhamento de tela seja diferente e tão difícil de adivinhar quanto a senha do usuário.
Depois de inserir a senha de compartilhamento de tela do VNC, também devemos inserir a senha de usuário para acessar uma área de trabalho bloqueada.
Security Note- Por padrão, o VNC não é um protocolo criptografado. Portanto, a conexão VNC deve ser encapsulada por meio de SSH para criptografia.
Configurar túnel SSH por meio de VNC
A configuração de um túnel SSH fornecerá uma camada de criptografia SSH para o túnel da conexão VNC. Outro ótimo recurso é o uso de compactação SSH para adicionar outra camada de compactação às atualizações de tela da GUI do VNC. Mais seguro e rápido é sempre uma boa coisa ao lidar com a administração de servidores CentOS!
Portanto, a partir do seu cliente que iniciará a conexão VNC, vamos configurar um túnel SSH remoto. Nesta demonstração, estamos usando o OS X. Primeiro, precisamos fazer o sudo -s para fazer o root .
bash-3.2# sudo -s
password:
Digite a senha do usuário e agora devemos ter o shell de root com um prompt # -
bash-3.2#
Agora, vamos criar nosso túnel SSH .
ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
Vamos quebrar esse comando -
ssh - Executa o utilitário ssh local
-f - o ssh deve ser executado em segundo plano após a execução completa da tarefa
[email protected] - Usuário ssh remoto no servidor CentOS que hospeda serviços VNC
-L 2200:192.168.1.143:5900 - Crie nosso túnel [Porta local]: [host remoto]: [porta remota do serviço VNC]
-N diz ao ssh que não queremos executar um comando no sistema remoto
bash-3.2# ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
[email protected]'s password:
Após inserir com sucesso a senha do usuário ssh remoto, nosso túnel ssh é criado. Agora para a parte legal! Para conectar, apontamos nosso cliente VNC para o host local na porta do nosso túnel, neste caso a porta 2200. A seguir está a configuração no cliente VNC do laptop Mac -
E, finalmente, nossa conexão remota VNC Desktop!
O legal do tunelamento SSH é que ele pode ser usado para quase todos os protocolos. Os túneis SSH são comumente usados para contornar a filtragem de portas de entrada e saída por um ISP, bem como enganar IDS / IPS da camada de aplicativo enquanto evita o monitoramento de outra camada de sessão.
Seu ISP pode filtrar a porta 5900 para contas não comerciais, mas permitir SSH na porta 22 (ou um poderia executar SSH em qualquer porta se a porta 22 for filtrada).
IPS e IDS de nível de aplicativo analisam a carga útil. Por exemplo, um estouro de buffer comum ou injeção de SQL. A criptografia SSH ponta a ponta criptografará os dados da camada de aplicativo.
O encapsulamento SSH é uma ótima ferramenta na caixa de ferramentas de um administrador Linux para fazer as coisas. No entanto, como um administrador, queremos explorar o bloqueio da disponibilidade de usuários com menos privilégios com acesso ao túnel SSH.
Administration Security Note- Restringir o encapsulamento SSH é algo que requer reflexão por parte de um administrador. Avaliar porque os usuários precisam do encapsulamento SSH em primeiro lugar; quais usuários precisam de tunelamento; junto com a probabilidade de risco prático e o impacto do pior caso.
Este é um tópico avançado que vai além do domínio de uma cartilha de nível intermediário. A pesquisa neste tópico é recomendada para aqueles que desejam alcançar os escalões superiores da administração do CentOS Linux.
Use o túnel SSH para X-Windows remoto
O design do X-Windows no Linux é muito bom em comparação com o do Windows. Se quisermos controlar uma máquina Linux remota a partir de outra máquina Linux, podemos aproveitar os mecanismos integrados ao X.
O X-Windows (geralmente chamado apenas de "X"), fornece o mecanismo para exibir janelas de aplicativos originadas de uma caixa do Linux para a parte de exibição do X em outra caixa do Linux. Assim, através do SSH, podemos solicitar que um aplicativo X-Windows seja encaminhado para o display de outra máquina Linux em todo o mundo!
Para executar um aplicativo X remotamente por meio de um túnel ssh, precisamos apenas executar um único comando -
[root@localhost]# ssh -X [email protected]
The syntax is - ssh -X [usuário] @ [host], e o host deve estar executando ssh com um usuário válido.
A seguir está uma captura de tela do GIMP em execução em uma estação de trabalho Ubuntu através de um túnel ssh XWindows remoto.
É muito simples executar aplicativos remotamente de outro servidor ou estação de trabalho Linux. Também é possível iniciar uma X-Session inteira e ter todo o ambiente de área de trabalho remotamente por meio de alguns métodos.
XDMCP
Pacotes de software sem cabeça, como NX
Configurando telas e áreas de trabalho alternativas no X e gerenciadores de área de trabalho como Gnome ou KDE
Este método é mais comumente usado para servidores headless sem tela física e realmente excede o escopo de um primer de nível intermediário. No entanto, é bom saber das opções disponíveis.
Existem várias ferramentas de terceiros que podem adicionar recursos aprimorados para monitoramento de tráfego CentOS. Neste tutorial, vamos nos concentrar naqueles que são empacotados nos principais repositórios de distribuição CentOS e no repositório Fedora EPEL.
Sempre haverá situações em que um Administrador (por um motivo ou outro) fica com apenas ferramentas nos repositórios CentOS principais. A maioria dos utilitários discutidos são projetados para serem usados por um administrador com o shell de acesso físico. Ao monitorar o tráfego com um web-gui acessível, usar utilitários de terceiros, como ntop-ng ou Nagios, é a melhor escolha (em vez de recriar esses recursos do zero).
Para mais pesquisas sobre as duas soluções configuráveis de interface web, a seguir estão alguns links para iniciar a pesquisa.
Monitoramento de tráfego para cenários de LAN / WAN
Nagios
O Nagios já existe há muito tempo, portanto, ele foi testado e aprovado. Em um ponto, era tudo gratuito e de código aberto, mas desde então avançou para uma solução Enterprise com modelos de licenciamento pagos para suportar a necessidade de sofisticação Enterprise. Portanto, antes de planejar qualquer implementação do Nagios, certifique-se de que as versões licenciadas de código aberto atenderão às suas necessidades ou planeje gastos com um orçamento empresarial em mente.
A maioria dos softwares de monitoramento de tráfego Nagios de código aberto pode ser encontrada em: https://www.nagios.org
Para uma história resumida de Nagious, aqui está a página oficial da História do Nagios: https://www.nagios.org/about/history/
ntopng
Outra grande ferramenta que permite monitorar largura de banda e tráfego por meio de uma interface web é chamada de ntopng . ntopng é semelhante ao utilitário Unix ntop e pode coletar dados para uma LAN ou WAN inteira. Fornecer um web-gui para administração, configuração e gráficos facilita o uso de todos os departamentos de TI.
Como o Nagious, o ntopng tem versões empresariais pagas e de código aberto disponíveis. Para obter mais informações sobre ntopng , visite o site:http://www.ntop.org/
Instale o Repositório Fedora EPEL ─ Pacotes extras para Enterprise Linux
Para acessar algumas das ferramentas necessárias para monitoramento de tráfego, precisaremos configurar nosso sistema CentOS para usar o Repositório EPEL.
O Repositório EPEL não é oficialmente mantido ou suportado pelo CentOS. No entanto, é mantido por um grupo de voluntários do Fedora Core para endereçar os pacotes comumente usados por profissionais do Enterprise Linux não incluídos no CentOS, Fedora Core ou Red Hat Linux Enterprise.
Caution -
Lembre-se de que o Repositório EPEL não é oficial para CentOS e pode quebrar a compatibilidade e funcionalidade em servidores de produção com dependências comuns. Com isso em mente, é aconselhável sempre testar em um servidor que não seja de produção executando os mesmos serviços da produção antes de implantar em uma caixa crítica do sistema.
Na verdade, a maior vantagem de usar o Repositório EHEL em relação a qualquer outro repositório de terceiros com CentOS é que podemos ter certeza de que os binários não estão corrompidos. É considerada uma prática recomendada não usar repositórios de uma fonte não confiável.
Com tudo isso dito, o Repositório EPEL oficial é tão comum com o CentOS que pode ser facilmente instalado via YUM.
[root@CentOS rdc]# yum -y install epel-release
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repo1.dal.innoscale.net
* extras: repo1.dal.innoscale.net
* updates: mirror.hmc.edu
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
--{ condensed output }--
Depois de instalar o Repositório EPEL, vamos querer atualizá-lo.
[root@CentOS rdc]# yum repolist
Loaded plugins: fastestmirror, langpacks
epel/x86_64/metalink
| 11 kB 00:00:00
epel
| 4.3 kB 00:00:00
(1/3): epel/x86_64/group_gz
| 170 kB 00:00:00
(2/3): epel/x86_64/updateinfo
| 753 kB 00:00:01
(3/3): epel/x86_64/primary_db
--{ condensed output }--
Neste ponto, nosso repositório EPEL deve estar configurado e pronto para uso. Vamos começar instalando o nload para monitoramento da largura de banda da interface.
As ferramentas nas quais nos concentraremos neste tutorial são -
- nload
- ntop
- ifstst
- iftop
- vnstat
- porcos de rede
- Wireshark
- Despejo TCP
- Traceroute
Tudo isso é padrão para monitorar o tráfego em Linux Enterprises. O uso de cada um varia do simples ao avançado, portanto, discutiremos brevemente ferramentas como Wireshark e TCP Dump.
Instalar e usar nload
Com nossos Repositórios EPEL instalados e configurados no CentOS, agora devemos ser capazes de instalar e usar o nload . Este utilitário foi projetado para traçar a largura de banda por interface em tempo real.
Como a maioria das outras instalações básicas, o nload é instalado por meio do gerenciador de pacotes YUM.
[root@CentOS rdc]# yum -y install nload
Resolving Dependencies
--> Running transaction check
---> Package nload.x86_64 0:0.7.4-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
nload x86_64
0.7.4-4.el7 epel 70 k
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 70 k
Installed size: 176 k
Downloading packages:
--{ condensed output }--
Agora temos o nload instalado, e usá-lo é bastante simples.
[root@CentOS rdc]# nload enp0s5
nload monitorará a interface especificada. Neste caso, enp0s5 uma interface Ethernet, em tempo real do terminal para cargas de tráfego de rede e uso total de largura de banda.
Como visto, o nload fará o gráfico dos dados de entrada e saída da interface especificada, junto com o fornecimento de uma representação física do fluxo de dados com marcas de hash "#".
A captura de tela representada é de uma página da web simples sendo carregada com algum tráfego daemon de fundo.
As opções de linha de comando comuns para nload são -
Comando | Açao |
---|---|
-uma | Período de tempo |
-t | Intervalo de atualização de tempo em milissegundos, o padrão é 500 |
-você | Define a exibição da medição de tráfego h |
-VOCÊ | Define as unidades de medição de tráfego total de entrada / saída com as mesmas opções que -u |
A sintaxe padrão para nload é -
nload [options] <interface>
Se nenhuma interface for especificada, nload pegará automaticamente a primeira interface Ethernet. Vamos tentar medir o total de entrada / saída de dados em megabytes e as velocidades atuais de transferência de dados em megabits.
[root@CentOS rdc]# nload -U M -u m
Os dados que entram / saem da interface atual são medidos em megabits por segundo e cada linha "Ttl", representando o total de dados de entrada / saída, é exibida em megabytes.
nload é útil para um administrador ver quantos dados passaram por uma interface e quantos dados estão entrando / saindo de uma interface especificada.
Para ver outras interfaces sem fechar o nload, simplesmente use as setas esquerda / direita. Isso percorrerá todas as interfaces disponíveis no sistema.
É possível monitorar várias interfaces simultaneamente usando o switch -m -
[root@CentOS rdc]# nload -u K -U M -m lo -m enp0s5
carregar monitorando duas interfaces simultaneamente (lo e enp0s5) -
systemd mudou a forma como o log do sistema é gerenciado para CentOS Linux. Em vez de cada daemon no sistema colocar logs em locais individuais, em vez de usar ferramentas como tail ou grep como a principal forma de classificar e filtrar as entradas de log,journald trouxe um único ponto de administração para analisar os logs do sistema.
Os principais componentes por trás do registro do systemd são: journal, jounralctl e journald.conf
O journald é o principal daemon de registro e é configurado editando o journald.conf, enquanto o journalctl é usado para analisar os eventos registrados pelo journald .
Os eventos registrados pelo journald incluem: eventos do kernel, processos do usuário e serviços daemon.
Defina o fuso horário correto do sistema
Antes de usar o journalctl , precisamos ter certeza de que a hora do nosso sistema está definida para a hora correta. Para fazer isso, queremos usar timedatectl .
Vamos verificar a hora atual do sistema.
[root@centos rdc]# timedatectl status
Local time: Mon 2017-03-20 00:14:49 MDT
Universal time: Mon 2017-03-20 06:14:49 UTC
RTC time: Mon 2017-03-20 06:14:49
Time zone: America/Denver (MDT, -0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-12 01:59:59 MST
Sun 2017-03-12 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-11-05 01:59:59 MDT
Sun 2017-11-05 01:00:00 MST
[root@centos rdc]#
Atualmente, o sistema está correto para o fuso horário local. Se o seu sistema não estiver, vamos definir o fuso horário correto. Depois de alterar as configurações, o CentOS calculará automaticamente a diferença de fuso horário a partir do fuso horário atual, ajustando o relógio do sistema imediatamente.
Vamos listar todos os fusos horários com timedatectl -
[root@centos rdc]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Essa é a saída contida dos fusos horários da lista timedatectl . Para encontrar um fuso horário local específico, o comando grep pode ser usado -
[root@centos rdc]# timedatectl list-timezones | grep -i "america/New_York"
America/New_York
[root@centos rdc]#
O rótulo usado pelo CentOS é geralmente País / Região com um sublinhado em vez de espaço (New_York versus "New York").
Agora vamos definir nosso fuso horário -
[root@centos rdc]# timedatectl set-timezone "America/New_York"
[root@centos rdc]# date
Mon Mar 20 02:28:44 EDT 2017
[root@centos rdc]#
O relógio do sistema deve ajustar a hora automaticamente.
Use journalctl para analisar registros
Opções de linha de comando comuns ao usar o journalctl -
Interruptor | Açao |
---|---|
-k | Lista apenas mensagens do kernel |
-você | Listas por unidade específica (httpd, sshd, etc ...) |
-b | Inicializa o deslocamento do rótulo |
-o | Registra o formato de saída |
-p | Filtros por tipo de registro (nome ou número) |
-F | Fieldname ou fieldnamevalue |
--utc | Tempo em compensação UTC |
--Desde a | Filtrar por período de tempo |
Examine os registros de inicialização
Primeiro, examinaremos e configuraremos os logs de inicialização no CentOS Linux. A primeira coisa que você notará é que o CentOS, por padrão, não armazena o log de inicialização que é persistente nas reinicializações.
Para verificar os logs de inicialização por instância de reinicialização, podemos emitir o seguinte comando -
[root@centos rdc]# journalctl --list-boots
-4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT
[root@centos rdc]#
Depois de reiniciar o sistema, podemos ver outra entrada.
[root@centos rdc]# journalctl --list-boots
-5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
-1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT
0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT
[root@centos rdc]#
Agora, vamos examinar a última instância de log de inicialização -
root@centos rdc]# journalctl -b -5
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT. --
Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M
(max allowed 108.4M
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64
([email protected].
Mar 19 22:01:57 localhost.localdomain kernel: Command line:
BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro
Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations
Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
Acima está a saída condensada de nossa última inicialização. Também podemos consultar um log de inicialização de horas, dias, semanas, meses e até anos. No entanto, por padrão, o CentOS não armazena logs de inicialização persistentes. Para permitir o armazenamento persistente de logs de inicialização, precisamos fazer algumas alterações de configuração -
- Faça pontos de armazenamento central para logs de inicialização
- Dê as permissões adequadas para uma nova pasta de log
- Configure o journald.conf para registro persistente
Configure o local de inicialização para registros de inicialização persistentes
O local inicial em que o journald desejará armazenar logs de inicialização persistentes é / var / log / journal . Como isso não existe por padrão, vamos criá-lo -
[root@centos rdc]# mkdir /var/log/journal
Agora, vamos dar ao diretório as permissões adequadas de acesso ao daemon do journald -
systemd-tmpfiles --create --prefix /var/log/journal
Finalmente, vamos dizer ao journald que ele deve armazenar logs de inicialização persistentes. No vim ou no seu editor de texto favorito, abra /etc/systemd/jounrald.conf " .
# See journald.conf(5) for details.
[Journal]=Storage=peristent
A linha com a qual estamos preocupados é Armazenamento = . Remova primeiro o comentário # e depois mude paraStorage = persistentconforme descrito acima. Salve e reinicie seu sistema CentOS e tome cuidado para que haja várias entradas ao executar o journalctl list-boots .
Note- Uma identificação de máquina em constante mudança como a de um provedor VPS pode fazer com que o journald falhe ao armazenar logs de inicialização persistentes. Existem muitas soluções alternativas para esse cenário. É melhor examinar as correções atuais postadas nos fóruns de administração do CentOS do que seguir os conselhos confiáveis daqueles que encontraram soluções alternativas plausíveis de VPS.
Para examinar um log de inicialização específico, simplesmente precisamos obter cada deslocamento usando journald --list-inicializa o deslocamento com a opção -b . Portanto, para verificar o segundo log de inicialização que usaríamos -
journalctl -b -2
O padrão para -b sem deslocamento do log de inicialização especificado sempre será o log de inicialização atual após a última reinicialização.
Analisar registros por tipo de registro
Os eventos do journald são numerados e categorizados em 7 tipos separados -
0 - emerg :: System is unusable
1 - alert :: Action must be taken immediatly
2 - crit :: Action is advised to be taken immediatly
3 - err :: Error effecting functionality of application
4 - warning :: Usually means a common issue that can affect security or usilbity
5 - info :: logged informtation for common operations
6 - debug :: usually disabled by default to troubleshoot functionality
Portanto, se quisermos ver todos os avisos, o seguinte comando pode ser emitido via journalctl -
[root@centos rdc]# journalctl -p 4
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT. --
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024
(v02 PTLTD )
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C
(v01 INTEL 440BX 06040000 VMW 01
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4
(v04 INTEL 440BX 06040000 PTL 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A
(v01 PTLTD Custom 06040000 MSFT 03
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028
(v01 PTLTD $SBFTBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8
(v02 VMWARE MEMPLUG 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038
(v01 VMWARE VMW HPET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028
(v01 VMWARE VMW WAET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges:
Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Normal empty
Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node
Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order,
mobility grouping on. Total pages: 60
Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32
Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to
'normal', was 'performance'
A descrição acima mostra todos os avisos dos últimos 4 dias no sistema.
A nova maneira de visualizar e examinar os registros com o systemd requer pouca prática e pesquisa para se familiarizar. No entanto, com diferentes formatos de saída e um aviso específico para tornar universais todos os logs de daemon empacotados, vale a pena abraçar. O journald oferece grande flexibilidade e eficiência em relação aos métodos tradicionais de análise de log.
Antes de explorar os métodos específicos do CentOS para implantar um plano de backup padrão, vamos primeiro discutir as considerações típicas para uma política de backup de nível padrão. A primeira coisa a que queremos nos acostumar é a3-2-1 backup rule.
3-2-1 Estratégia de backup
Em todo o setor, você frequentemente ouvirá o termo modelo de backup 3-2-1. Esta é uma abordagem muito boa para se viver ao implementar um plano de backup. 3-2-1 é definido como segue:3cópias de dados; por exemplo, podemos ter a cópia de trabalho; uma cópia colocada no servidor CentOS projetada para redundância usando rsync; e backups USB externos rotativos são feitos de dados no servidor de backup.2diferentes mídias de backup. Na verdade, teríamos três mídias de backup diferentes neste caso: a cópia de trabalho em um SSD de um laptop ou estação de trabalho, os dados do servidor CentOS em uma matriz RADI6 e os backups externos colocados em drives USB.1cópia de dados fora do local; estamos girando as unidades USB externamente todas as noites. Outra abordagem moderna pode ser um provedor de backup em nuvem.
Recuperação do sistema
Um plano de restauração bare metal é simplesmente um plano estabelecido por um administrador CentOS para colocar sistemas vitais online com todos os dados intactos. Presumindo 100% de falha do sistema e perda de todo o hardware do sistema anterior, um administrador deve ter um plano para atingir o tempo de atividade com dados do usuário intactos, custando tempo de inatividade mínimo. O kernel monolítico usado no Linux realmente torna as restaurações bare metal usando imagens do sistema muito mais fáceis do que no Windows. Onde o Windows usa uma arquitetura de micro-kernel.
Uma restauração completa de dados e recuperação bare metal são geralmente realizadas por meio de uma combinação de métodos, incluindo trabalho, imagens de disco de produção configuradas dos principais servidores operacionais, backups redundantes de dados do usuário obedecendo à regra 3-2-1. Mesmo alguns arquivos confidenciais que podem ser armazenados em um cofre à prova de fogo com acesso limitado ao pessoal confiável da empresa.
Uma restauração bare metal multifásica e plano de recuperação de dados usando ferramentas CentOS nativas pode consistir em:
dd para fazer e restaurar imagens de disco de produção de servidores configurados
rsync para fazer backups incrementais de todos os dados do usuário
tar & gzip para armazenar backups criptografados de arquivos com senhas e notas de administradores. Normalmente, ele pode ser colocado em uma unidade USB, criptografado e bloqueado em um cofre que um gerente sênior pode acessar. Além disso, isso garante que outra pessoa saberá as credenciais de segurança vitais se o administrador atual ganhar na loteria e desaparecer em uma ilha ensolarada em algum lugar.
Se um sistema travar devido a uma falha de hardware ou desastre, a seguir serão apresentadas as diferentes fases das operações de restauração -
Construir um servidor funcional com uma imagem bare metal configurada
Restaurar dados para o servidor de trabalho a partir de backups
Ter acesso físico às credenciais necessárias para realizar as duas primeiras operações
Use rsync para backups em nível de arquivo
rsync é um ótimo utilitário para sincronizar diretórios de arquivos localmente ou para outro servidor. O rsync é usado há anos pelos Administradores de sistema, portanto, é muito refinado para o propósito de fazer backup de dados. Na opinião do autor, um dos melhores recursos de sincronização é a capacidade de ser programado a partir da linha de comando.
Neste tutorial, discutiremos o rsync de várias maneiras -
- Explore e fale sobre algumas opções comuns
- Crie backups locais
- Crie backups remotos por SSH
- Restaurar backups locais
rsynctem o nome por sua finalidade: Sincronização remota e é poderoso e flexível em uso.
A seguir está um backup remoto rsync básico sobre ssh -
MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
6,148 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
33,144 100% 31.61MB/s 0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
892,406 100% 25.03MB/s 0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
77 100% 2.21kB/s 0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
43,188,224 1% 4.26MB/s 0:08:29
sent 2,318,683,608 bytes received 446 bytes 7,302,941.90 bytes/sec
total size is 2,327,091,863 speedup is 1.00
MiNi:~ rdc$
A sincronização a seguir enviou quase 2,3 GB de dados pela nossa LAN. A beleza do rsync é que ele funciona de forma incremental no nível do bloco, arquivo por arquivo. Isso significa que, se alterarmos apenas dois caracteres em um arquivo de texto de 1 MB, apenas um ou dois blocos serão transferidos pela LAN na próxima sincronização!
Além disso, a função incremental pode ser desabilitada em favor de mais largura de banda da rede usada para menos utilização da CPU. Isso pode ser aconselhável ao copiar constantemente vários arquivos de banco de dados de 10 MB a cada 10 minutos em uma LAN de backup dedicada de 1 Gb. O raciocínio é: estes estarão sempre mudando e transmitindo incrementalmente a cada 10 minutos e podem sobrecarregar a CPU remota. Visto que a carga total de transferência não excederá 5 minutos, podemos apenas desejar sincronizar os arquivos do banco de dados por completo.
A seguir estão as opções mais comuns com rsync -
rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path
Interruptor | Açao |
---|---|
-uma | Modo de arquivo e assume -r, -p, -t, -g, -l |
-d | Sincronizar apenas árvore de diretório, sem arquivos |
-r | Recursivo no diretório |
-eu | Copiar links simbólicos como links simbólicos |
-p | Preservar permissões |
-g | Preservar grupo |
-v | Saída detalhada |
-z | Comprimir no link de rede |
-X | Preservar atributos estendidos |
-UMA | Preservar ACLs |
-t | Preservar carimbos de data / hora |
-W | Transferir o arquivo inteiro, não blocos incrementais |
-você | Não sobrescrever arquivos no destino |
--progresso | Mostrar o progresso da transferência |
--excluir | Exclua arquivos mais antigos no destino |
--max-size = XXX | Tamanho máximo do arquivo para sincronizar |
Quando usar rsync
Minha preferência pessoal para rsync é ao fazer backup de arquivos de um host de origem para um host de destino. Por exemplo, todos os diretórios pessoais para recuperação de dados ou mesmo fora do local e na nuvem para recuperação de desastres.
Backup local com rsync
Já vimos como transferir arquivos de um host para outro. O mesmo método pode ser usado para sincronizar diretórios e arquivos localmente.
Vamos fazer um backup incremental manual de / etc / no diretório do usuário raiz.
Primeiro, precisamos criar um diretório off ~ / root para o backup sincronizado -
[root@localhost rdc]# mkdir /root/etc_baks
Em seguida, certifique-se de que haja espaço livre em disco suficiente.
[root@localhost rdc]# du -h --summarize /etc/
49M /etc/
[root@localhost rdc]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 43G 15G 28G 35% /
Somos bons para sincronizar todo o nosso diretório / etc / -
rsync -aAvr /etc/ /root/etc_baks/
Nosso diretório / etc / sincronizado -
[root@localhost etc_baks]# ls -l ./
total 1436
drwxr-xr-x. 3 root root 101 Feb 1 19:40 abrt
-rw-r--r--. 1 root root 16 Feb 1 19:51 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Feb 27 19:06 aliases.db
drwxr-xr-x. 2 root root 51 Feb 1 19:41 alsa
drwxr-xr-x. 2 root root 4096 Feb 27 17:11 alternatives
-rw-------. 1 root root 541 Mar 31 2016 anacrontab
-rw-r--r--. 1 root root 55 Nov 4 12:29 asound.conf
-rw-r--r--. 1 root root 1 Nov 5 14:16 at.deny
drwxr-xr-x. 2 root root 32 Feb 1 19:40 at-spi2
--{ condensed output }--
Agora vamos fazer um rsync incremental -
[root@localhost etc_baks]# rsync -aAvr --progress /etc/ /root/etc_baks/
sending incremental file list
test_incremental.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1145/1282)
sent 204620 bytes received 2321 bytes 413882.00 bytes/sec
total size is 80245040 speedup is 387.77
[root@localhost etc_baks]#
Apenas nosso arquivo test_incremental.txt foi copiado.
Backups diferenciais remotos com rsync
Vamos fazer nosso backup completo inicial de rsync em um servidor com um plano de backup implantado. Na verdade, este exemplo está fazendo backup de uma pasta em uma estação de trabalho Mac OS X para um servidor CentOS. Outro grande aspecto do rsync é que ele pode ser usado em qualquer plataforma para a qual o rsync foi transferido.
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes received 336 bytes 9,720,257.27 bytes/sec
total size is 2,326,636,892 speedup is 1.00
MiNi:~ rdc$
Agora, fizemos o backup de uma pasta de uma estação de trabalho em um servidor que executa um volume RAID6 com mídia de recuperação de desastres girada armazenada externamente. Usar o rsync nos deu backup 3-2-1 padrão com apenas um servidor tendo uma dispendiosa matriz de disco redundante e backups diferenciais rotacionados.
Agora vamos fazer outro backup da mesma pasta usando rsync após adicionar um único arquivo novo chamado test_file.txt .
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
test_file.txt
sent 814 bytes received 61 bytes 134.62 bytes/sec
total size is 2,326,636,910 speedup is 2,659,013.61
MiNi:~ rdc$
Como você pode ver, apenas o novo arquivo foi entregue ao servidor via rsync . A comparação diferencial foi feita arquivo por arquivo.
Algumas coisas a serem observadas são: Isso apenas copia o novo arquivo: test_file.txt, pois é o único arquivo com alterações. rsync usa ssh. Nunca precisamos usar nossa conta root em nenhuma das máquinas.
Simples, poderoso e eficaz, o rsync é ótimo para fazer backup de pastas inteiras e estruturas de diretório. No entanto, o rsync por si só não automatiza o processo. É aqui que precisamos aprofundar nossa caixa de ferramentas e encontrar a melhor, pequena e simples ferramenta para o trabalho.
Para automatizar backups rsync com cronjobs , é essencial que os usuários SSH sejam configurados usando chaves SSH para autenticação. Isso combinado com cronjobs permite que o rsync seja feito automaticamente em intervalos de tempo.
Use DD para imagens de recuperação bare metal bloco a bloco
DD é um utilitário do Linux que existe desde o surgimento do kernel do Linux, encontrando os utilitários GNU.
dd em termos mais simples copia uma imagem de uma área de disco selecionada. Em seguida, oferece a capacidade de copiar blocos selecionados de um disco físico. Portanto, a menos que você tenha backups, uma vez que o dd grava em um disco, todos os blocos são substituídos. A perda de dados anteriores excede os recursos de recuperação, mesmo para recuperação de dados de nível profissional com preços elevados.
Todo o processo para fazer uma imagem de sistema inicializável com dd é o seguinte -
- Inicialize a partir do servidor CentOS com uma distribuição Linux inicializável
- Encontre a designação do disco inicializável a ser criado
- Decida o local onde a imagem de recuperação será armazenada
- Encontre o tamanho do bloco usado no seu disco
- Inicie a operação da imagem dd
Neste tutorial, por questão de tempo e simplicidade, criaremos uma imagem ISO do registro mestre de inicialização de uma máquina virtual CentOS. Em seguida, armazenaremos essa imagem fora do local. Caso nosso MBR seja corrompido e precise ser restaurado, o mesmo processo pode ser aplicado a um disco ou partição inicializável inteiro. No entanto, o tempo e o espaço em disco necessários realmente vão um pouco além para este tutorial.
Recomenda-se que os administradores do CentOS se tornem proficientes na restauração de um disco / partição totalmente inicializável em um ambiente de teste e execute uma restauração bare metal. Isso tirará muita pressão quando, eventualmente, for necessário concluir a prática em uma situação da vida real com gerentes e algumas dezenas de usuários finais contando o tempo de inatividade. Nesse caso, 10 minutos tentando descobrir as coisas pode parecer uma eternidade e fazer alguém suar.
Note- Ao usar o dd, certifique-se de NÃO confundir os volumes de origem e destino. Você pode destruir dados e servidores inicializáveis copiando o local do backup para uma unidade de inicialização. Ou, possivelmente, pior, destruir os dados para sempre copiando os dados em um nível muito baixo com DD.
A seguir estão as opções e parâmetros de linha de comando comuns para dd -
Interruptor | Açao |
---|---|
if = | No arquivo ou fonte a ser copiado |
de = | Arquivo de saída ou cópia do arquivo |
bs | Defina o tamanho do bloco de entrada e saída |
obs | Definir tamanho do bloco do arquivo de saída |
SII | Definir tamanho do bloco de arquivo de entrada |
contagem | Defina o número de blocos para copiar |
conv | Opções extras para adicionar para imagens |
Noerror | Não pare de processar um erro |
sincronizar | Blocos de entrada de blocos não ajustados em caso de erro ou desalinhamento |
Note on block size- O tamanho do bloco padrão para dd é 512 bytes. Esse era o tamanho de bloco padrão das unidades de disco rígido de densidade mais baixa. Os HDDs de alta densidade atuais aumentaram para tamanhos de bloco de 4.096 bytes (4kB) para permitir discos de 1 TB e maiores. Portanto, queremos verificar o tamanho do bloco de disco antes de usar o dd com discos rígidos mais novos e de maior capacidade.
Para este tutorial, em vez de trabalhar em um servidor de produção com dd , estaremos usando uma instalação CentOS rodando em VMWare. Também configuraremos o VMWare para inicializar uma imagem ISO do Linux inicializável em vez de trabalhar com um stick USB inicializável.
Primeiro, precisaremos baixar a imagem CentOS intitulada: CentOS Gnome ISO . Isso tem quase 3 GB e é aconselhável sempre manter uma cópia para criar pen drives USB inicializáveis e inicializar em instalações de servidor virtual para resolução de problemas e imagens bare metal.
Outras distros Linux inicializáveis funcionarão tão bem. O Linux Mint pode ser usado para ISOs inicializáveis, pois tem excelente suporte de hardware e ferramentas de disco de GUI polidas para manutenção.
A imagem inicializável do CentOS GNOME Live pode ser baixada de: http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso
Vamos configurar a instalação do VMWare Workstation para inicializar a partir de nossa imagem inicializável do Linux. As etapas são para VMWare no OS X. No entanto, são semelhantes no VMWare Workstation no Linux, Windows e até na Caixa Virtual.
Note- Usar uma solução de desktop virtual como Virtual Box ou VMWare Workstation é uma ótima maneira de configurar cenários de laboratório para aprender as tarefas de administração do CentOS. Ele oferece a capacidade de instalar várias instalações CentOS, praticamente sem configuração de hardware, permitindo que a pessoa se concentre na administração e até mesmo salve o estado do servidor antes de fazer alterações.
Primeiro, vamos configurar um cd-rom virtual e anexar nossa imagem ISO para inicializar em vez da instalação do servidor virtual CentOS -
Agora, defina o disco de inicialização -
Agora, quando inicializada, nossa máquina virtual inicializará a partir da imagem ISO inicializável do CentOS e permitirá o acesso aos arquivos no servidor CentOS Virtual que foi configurado anteriormente.
Vamos verificar nossos discos para ver de onde queremos copiar o MBR (a saída condensada é a seguinte).
MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Localizamos nossos discos físicos: sda e sdb . Cada um tem um tamanho de bloco de 512 bytes. Portanto, agora executaremos o comando dd para copiar os primeiros 512 bytes para nosso MBR no SDA1.
A melhor maneira de fazer isso é -
[root@mint rdc]# dd if=/dev/sda bs=512 count=1 | gzip -c >
/mnt/sdb/images/mbr.iso.gz
1+0 records in
1+0 records out
512 bytes copied, 0.000171388 s, 3.0 MB/s
[root@mint rdc]# ls /mnt/sdb/
mbr-iso.gz
[root@mint rdc]#
Assim, temos a imagem completa do nosso registro mestre de inicialização. Se tivermos espaço suficiente para criar a imagem da unidade de inicialização, poderíamos facilmente fazer uma imagem de inicialização completa do sistema -
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz
O conv = sync é usado quando os bytes devem ser alinhados para um meio físico. Neste caso, o dd pode obter um erro se os alinhamentos exatos de 4 K não forem lidos (digamos ... um arquivo que tem apenas 3 K, mas precisa ter no mínimo um único bloco de 4 K no disco. Ou simplesmente há um erro de leitura e o arquivo não pode ser lido por dd.). Assim, dd com conv = sync, noerror preencherá o 3K com dados triviais, mas úteis para o meio físico em alinhamentos de bloco de 4K. Apesar de não apresentar um erro que pode encerrar uma grande operação.
Ao trabalhar com dados de discos, sempre queremos incluir: conv = sync, parâmetro noerror .
Isso ocorre simplesmente porque os discos não são fluxos como os dados TCP. Eles são formados por blocos alinhados a um determinado tamanho. Por exemplo, se temos blocos de 512 bytes, um arquivo de apenas 300 bytes ainda precisa de 512 bytes completos de espaço em disco (possivelmente 2 blocos para informações de inode, como permissões e outras informações do sistema de arquivos).
Use gzip e tar para armazenamento seguro
gzip e tar são dois utilitários que um administrador CentOS deve se acostumar a usar. Eles são usados para muito mais do que simplesmente descompactar arquivos.
Usando Gnu Tar no CentOS Linux
Tar é um utilitário de arquivamento semelhante ao winrar no Windows. Seu nome Tape Archive abreviado como tar resume muito bem o utilitário. O tar pegará os arquivos e os colocará em um arquivo para conveniência lógica. Portanto, em vez das dezenas de arquivos armazenados em / etc. poderíamos apenas "compactá-los" em um arquivo para conveniência de backup e armazenamento.
tar tem sido o padrão para armazenar arquivos arquivados no Unix e Linux por muitos anos. Portanto, usar tar junto com gzip ou bzip é considerado a melhor prática para arquivos em cada sistema.
A seguir está uma lista de chaves de linha de comando comuns e opções usadas com tar -
Interruptor | Açao |
---|---|
-c | Cria um novo arquivo .tar |
-C | Extrai para um diretório diferente |
-j | Usa compressão bzip2 |
-z | Usa compressão gzip |
-v | Progresso detalhado do arquivamento do show |
-t | Lista o conteúdo do arquivo |
-f | Nome do arquivo do arquivo |
-x | Extrai arquivo tar |
A seguir está a sintaxe básica para criar um arquivo tar .
tar -cvf [tar archive name]
Note on Compression mechanisms with tar- É aconselhável seguir um dos dois esquemas de compactação comuns ao usar o tar: gzip e bzip2. Os arquivos gzip consomem menos recursos da CPU, mas geralmente são maiores. Embora o bzip2 demore mais para compactar, ele utiliza mais recursos da CPU; mas resultará em um tamanho de arquivo final menor.
Ao usar a compactação de arquivo, sempre queremos usar extensões de arquivo padrão, permitindo que todos, inclusive nós mesmos, saibam (em vez de adivinhar por tentativa e erro) qual esquema de compactação é necessário para extrair os arquivos.
bzip2 | .tbz |
bzip2 | .tar.tbz |
bzip2 | .tb2 |
gzip | .tar.gz |
gzip | .tgz |
Quando for necessário extrair arquivos em uma caixa do Windows ou para usar no Windows, é aconselhável usar .tar.tbz ou .tar.gz, pois a maioria das extensões de três caracteres simples irá confundir Windows e apenas administradores do Windows (no entanto, isto é às vezes o resultado desejado)
Vamos criar um arquivo tar compactado a partir de nossos backups remotos copiados da estação de trabalho Mac -
[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[rdc@mint Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz
Note- Em vez de adicionar todos os arquivos diretamente ao arquivo, arquivamos toda a pasta RemoteStuff . Este é o método mais fácil. Simplesmente porque, quando extraído, todo o diretório RemoteStuff é extraído com todos os arquivos dentro do diretório de trabalho atual como ./currentWorkingDirectory/RemoteStuff/
Agora vamos extrair o arquivo dentro do diretório / root / home.
[root@centos ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[root@mint ~]# ping www.google.com
Como visto acima, todos os arquivos foram simplesmente extraídos para o diretório contido em nosso diretório de trabalho atual.
[root@centos ~]# ls -l
total 2262872
-rw-------. 1 root root 1752 Feb 1 19:52 anaconda-ks.cfg
drwxr-xr-x. 137 root root 8192 Mar 9 04:42 etc_baks
-rw-r--r--. 1 root root 1800 Feb 2 03:14 initial-setup-ks.cfg
drwxr-xr-x. 6 rdc rdc 4096 Mar 10 22:20 RemoteStuff
-rw-r--r--. 1 root root 2317140451 Mar 12 07:12 RemoteStuff.tgz
-rw-r--r--. 1 root root 9446 Feb 25 05:09 ssl.conf [root@centos ~]#
Use gzip para compactar backups de arquivos
Conforme observado anteriormente, podemos usar bzip2 ou gzip do tar com o -j ou -zopções de linha de comando. Também podemos usar o gzip para compactar arquivos individuais. No entanto, o uso de bzip ou gzip sozinho não oferece tantos recursos quanto quando combinado com tar .
Ao usar o gzip , a ação padrão é remover os arquivos originais, substituindo cada um por uma versão compactada adicionando a extensão .gz.
Algumas opções de linha de comando comuns para gzip são -
Interruptor | Açao |
---|---|
-c | Mantém os arquivos após colocá-los no arquivo |
-eu | Obtenha estatísticas para o arquivo compactado |
-r | Compacta recursivamente os arquivos nos diretórios |
-1 a 9 | Especifica o nível de compressão em uma escala de 1 a 9 |
O gzip funciona mais ou menos em uma base arquivo por arquivo e não em um arquivo como alguns utilitários Windows O / S zip. A principal razão para isso é que o tar já fornece recursos avançados de arquivamento. O gzip é projetado para fornecer apenas um mecanismo de compactação.
Portanto, ao pensar em gzip , pense em um único arquivo. Ao pensar em vários arquivos, pense em arquivos tar . Vamos agora explorar isso com nosso arquivo tar anterior .
Note - Profissionais experientes em Linux freqüentemente se referem a um arquivo tarado como um tarball.
Vamos fazer outro arquivo tar com nosso backup rsync .
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[root@centos Documents]# ls
RemoteStuff.tar RemoteStuff/
Para fins de demonstração, vamos usar o gzip no tarball recém-criado e dizer ao gzip para manter o arquivo antigo. Por padrão, sem a opção -c , gzip substituirá todo o arquivo tar por um arquivo .gz .
[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.
Vamos tentar testar a opção -l com gzip .
[root@centos Documents]# gzip -l RemoteStuff.tar.gz
compressed uncompressed ratio uncompressed_name
2317140467 2326661120 0.4% RemoteStuff.tar
[root@centos Documents]#
Para demonstrar como o gzip difere dos utilitários do Windows Zip, vamos executar o gzip em uma pasta de arquivos de texto.
[root@centos Documents]# ls text_files/
file1.txt file2.txt file3.txt file4.txt file5.txt
[root@centos Documents]#
Agora vamos usar a opção -r para compactar recursivamente todos os arquivos de texto no diretório.
[root@centos Documents]# gzip -9 -r text_files/
[root@centos Documents]# ls ./text_files/
file1.txt.gz file2.txt.gz file3.txt.gz file4.txt.gz file5.txt.gz
[root@centos Documents]#
Vejo? Não o que alguns podem ter previsto. Todos os arquivos de texto originais foram removidos e cada um foi compactado individualmente. Por causa desse comportamento, é melhor pensar apenas no gzip quando precisar trabalhar com arquivos individuais.
Trabalhando com tarballs , vamos extrair nosso tarball rsynced para um novo diretório.
[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
Como visto acima, extraímos e descompactamos nosso tarball no diretório / tmp.
[root@centos Documents]# ls /tmp
hsperfdata_root
RemoteStuff
Criptografar arquivos TarBall
Criptografar arquivos tarball para armazenar documentos seguros que podem precisar ser acessados por outros funcionários da organização, em caso de recuperação de desastre, pode ser um conceito complicado. Existem basicamente três maneiras de fazer isso: usar GnuPG ou usar openssl ou usar um utilitário de terceiros.
O GnuPG é projetado principalmente para criptografia assimétrica e tem uma associação de identidade em mente, em vez de uma senha longa. É verdade que pode ser usado com criptografia simétrica, mas esta não é a principal força do GnuPG. Portanto, eu desconsideraria o GnuPG por armazenar arquivos com segurança física quando mais pessoas do que a pessoa original podem precisar de acesso (como talvez um gerente corporativo que deseja se proteger contra um Administrador que possui todas as chaves do reino como vantagem).
O Openssl como o GnuPG pode fazer o que queremos e vem com o CentOS. Mas, novamente, não foi projetado especificamente para fazer o que queremos e a criptografia foi questionada na comunidade de segurança.
Nossa escolha é um utilitário chamado 7zip. 7zip é um utilitário de compactação como o gzip, mas com muitos outros recursos. Como Gnu Gzip, 7zip e seus padrões estão na comunidade de código aberto. Precisamos apenas instalar o 7zip de nosso Repositório EHEL (o próximo capítulo cobrirá a instalação dos Repositórios Corporativos Estendidos em detalhes).
Instale 7zip no Centos
7zip é uma instalação simples, uma vez que nossos repositórios EHEL foram carregados e configurados no CentOS.
[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
epel/x86_64/metalink
| 13 kB 00:00:00
epel
| 4.3 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB 00:00:04
(2/2):
epel/x86_64/primary_db
| 4.6 MB 00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Simples assim, o 7zip está instalado e pronto para ser usado com criptografia AES de 256 bits para nossos arquivos tarball.
Agora vamos usar 7z para criptografar nosso arquivo compactado com uma senha. A sintaxe para fazer isso é muito simples -
7z a -p <output filename><input filename>
Onde, a: adicionar ao arquivo, e -p: criptografar e solicitar senha
[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)
Creating archive: RemoteStuff.tgz.7z
Items to compress: 1
Enter password (will not be echoed):
Verify password (will not be echoed) :
Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz RemoteStuff.tgz.7z slapD
text_files
[root@centos Documents]#
Agora, temos nosso arquivo .7z que criptografa o tarball compactado com AES de 256 bits.
Note- 7zip usa criptografia AES de 256 bits com um hash SHA-256 da senha e do contador, repetido até 512 mil vezes para derivação de chave. Isso deve ser seguro o suficiente se uma chave complexa for usada.
O processo de criptografar e recomprimir o arquivo ainda mais pode levar algum tempo com arquivos maiores.
7zip é uma oferta avançada com mais recursos do que gzip ou bzip2. No entanto, não é o padrão no CentOS ou no mundo Linux. Portanto, os outros utilitários devem ser usados com a maior freqüência possível.
O sistema CentOS 7 pode ser atualizado de três maneiras -
- Manually
- Automatically
- Atualize manualmente para os principais problemas de segurança e configure atualizações automáticas
Em um ambiente de produção, é recomendável atualizar manualmente para servidores de produção. Ou pelo menos estabeleça um plano de atualização para que o administrador possa garantir serviços vitais para as operações de negócios.
É plausível que uma atualização de segurança simples possa causar problemas recursivos com aplicativos comuns que requerem atualização e reconfiguração por um administrador. Portanto, esteja cansado de programar atualizações automáticas na produção antes de testar primeiro nos servidores de desenvolvimento e desktops.
Atualizar manualmente o CentOS 7
Para atualizar o CentOS 7, queremos nos familiarizar com o comando yum .yumé usado para lidar com repositórios de pacotes no CentOS 7. yum é a ferramenta comumente usada para -
- Atualize o sistema CentOS 7 Linux
- Procure por pacotes
- Instale pacotes
- Detecte e instale dependências necessárias para pacotes
Para usar o yum para atualizações, seu servidor CentOS precisará estar conectado à Internet. A maioria das configurações instala um sistema básico, então usa yum para consultar o repositório principal do CentOS para funcionalidades adicionais em pacotes e aplicar atualizações de sistema.
Já usamos o yum para instalar alguns pacotes. Ao usar o yum, você sempre precisará fazer isso como usuário root. Ou um usuário com acesso root. Então, vamos procurar e instalar um editor de texto fácil de usar chamado nano .
[root@centos rdc]# yum search nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.rackspace.com
* epel: mirror.chpc.utah.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
======================================================================
N/S matched: nano
======================================================================
nano.x86_64 : A small text editor
nodejs-nano.noarch : Minimalistic couchdb driver for Node.js
perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond precision
Name and summary matches only, use "search all" for everything.
[root@centos rdc]#
Agora, vamos instalar o editor de texto nano .
[root@centos rdc]# yum install nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch
Version Repository Size
================================================================================
Installing:
nano x86_64
2.3.1-10.el7 base 440 k
Transaction Summary
Install 1 Package
Total download size: 440 k
Installed size: 1.6 M
Is this ok [y/d/N]: y
Downloading packages:
nano-2.3.1-10.el7.x86_64.rpm
| 440 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : nano-2.3.1-10.el7.x86_64
1/1
Verifying : nano-2.3.1-10.el7.x86_64
1/1
Installed:
nano.x86_64 0:2.3.1-10.el7
Complete!
[root@centos rdc]#
Instalamos o editor de texto nano. Este método, IMO, é muito mais fácil do que pesquisar utilitários em sites e executar manualmente os instaladores. Além disso, os repositórios usam assinaturas digitais para validar os pacotes, garantindo que eles sejam provenientes de uma fonte confiável com o yum. Cabe ao administrador validar a autenticidade ao confiar em novos repositórios. É por isso que é considerado uma prática recomendada estar cansado de repositórios de terceiros.
Yum também pode ser usado para remover um pacote.
[root@centos rdc]# yum remove nano
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
Agora vamos verificar se há atualizações.
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Updated Packages
NetworkManager.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-17.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
audit-libs.x86_64 2.6.5-3.el7_3.1 updates
audit-libs-python.x86_64
Conforme representado, temos algumas dezenas de atualizações pendentes para instalação. Na verdade, há cerca de 100 atualizações no total, pois ainda não configuramos as atualizações automáticas. Portanto, vamos instalar todas as atualizações pendentes.
[root@centos rdc]# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* epel: pubmirror1.math.uh.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be updated
---> Package NetworkManager.x86_64 1:1.4.0-17.el7_3 will be an update
selinux-policy noarch 3.13.1102.el7_3.15 updates 414 k
selinux-policy-targeted noarch 3.13.1102.el7_3.15 updates 6.4 M
systemd x86_64 21930.el7_3.7 updates 5.2 M
systemd-libs x86_64 21930.el7_3.7 updates 369 k
systemd-python x86_64 21930.el7_3.7 updates 109 k
systemd-sysv x86_64 21930.el7_3.7 updates 63 k
tcsh x86_64 6.18.01-13.el7_3.1 updates 338 k
tzdata noarch 2017a1.el7 updates 443 k
tzdata-java noarch 2017a1.el7 updates 182 k
wpa_supplicant x86_64 1:2.021.el7_3 updates 788 k
Transaction Summary
===============================================================================
Install 2 Packages
Upgrade 68 Packages
Total size: 196 M
Total download size: 83 M
Is this ok [y/d/N]:
Após pressionar a tecla "y", a atualização do CentOS 7 começará. O processo geral pelo qual o yum passa durante a atualização é -
- Verifica os pacotes atuais
- Procura no repositório por pacotes atualizados
- Calcula as dependências necessárias para pacotes atualizados
- Atualizações de downloads
- Instala atualizações
Agora, vamos ter certeza de que nosso sistema está atualizado -
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* updates: mirror.compevo.com
[root@centos rdc]#
Como você pode ver, não há atualizações listadas.
Configurar atualizações automáticas para YUM
Em um ambiente corporativo, conforme mencionado anteriormente, as atualizações automáticas podem ou não ser o método preferido de instalação. Vamos repassar as etapas para configurar atualizações automáticas com o yum.
Primeiro, instalamos um pacote chamado yum-cron .
[root@centos rdc]# yum -y install yum-cron
Install 1 Package
Total download size: 61 k
Installed size: 51 k
Downloading packages:
yum-cron-3.4.3-150.el7.centos.noarch.rpm
| 61 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Verifying : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Installed:
yum-cron.noarch 0:3.4.3-150.el7.centos
Complete!
[root@centos rdc]#
Por padrão, o yum-cron apenas baixa as atualizações e não as instala. A opção de instalar atualizações automaticamente está no Administrador. A maior ressalva é: algumas atualizações exigirão a reinicialização do sistema. Além disso, algumas atualizações podem exigir uma alteração na configuração antes que os serviços voltem a funcionar.
Atualizar dependências pode possivelmente criar um problema recursivo na seguinte situação -
Uma atualização é recomendada pelo yum para uma certa biblioteca
A biblioteca só oferece suporte ao servidor Apache 2.4, mas temos o servidor 2.3
Nosso site de comércio depende de uma determinada versão do PHP
A nova versão do Apache instalada para a biblioteca requer atualização do PHP
Nossos aplicativos de produção da web ainda não foram testados com a versão PHP mais recente
Yum pode ir em frente e atualizar automaticamente o Apache e o PHP sem aviso prévio, a menos que configurado para não fazê-lo.
Se todos os 5 cenários funcionarem, isso pode resultar em qualquer coisa, desde uma grande dor de cabeça pela manhã até um possível comprometimento da segurança expondo os dados do usuário. Embora o exemplo acima seja uma espécie de tempestade perfeita, nunca queremos que tal cenário se desenrole.
Cabe ao administrador acessar possíveis cenários de perda potencial de receita com o tempo necessário para restaurar os serviços devido ao possível tempo de inatividade de reinicializações e reconfigurações de atualização. Essa prática pode não ser conservadora o suficiente para, digamos, um site de comércio eletrônico de milhões de dólares por dia com milhões de clientes.
Agora vamos configurar o yum-cron para instalar automaticamente as atualizações do sistema.
[root@centos rdc]# vim /etc/yum/yum-cron.conf
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes
Queremos alterar apply_updates = no para apply_updates = yes . Agora vamos configurar o intervalo de atualização do yum-cron .
Novamente, usar atualizações automáticas e instalar atualizações sob demanda pode ser uma faca de dois gumes e precisa ser considerado por um administrador para cada situação única.
Introdução ao Bash Shell
Como versões do GNU Linux, os shells vêm em muitas variedades e variam em compatibilidade. O shell padrão no CentOS é conhecido como Bash ou Bourne Again Shell. O shell Bash é uma versão modificada moderna do Bourne Shell desenvolvida por Stephen Bourne. Bash foi o substituto direto para o Thompson Shell original no sistema operacional Unix desenvolvido na Bell Labs por Ken Thompson e Dennis Ritchie (Stephen Bourne também foi empregado pela Bell Labs)
Todo mundo tem um escudo favorito e cada um tem seus pontos fortes e dificuldades. Mas, na maior parte, o Bash será o shell padrão em todas as distribuições Linux e mais comumente disponível. Com a experiência, todos vão querer explorar e usar uma concha que seja melhor para eles. No entanto, ao mesmo tempo, todos vão querer dominar o shell Bash.
Outros shells do Linux incluem: Tcsh, Csh, Ksh, Zsh e Fish.
Desenvolver habilidades para usar qualquer shell do Linux em um nível de especialista é extremamente importante para um administrador CentOS. Como mencionamos anteriormente, ao contrário do Windows, o Linux em sua essência é um sistema operacional de linha de comando. Um shell é simplesmente uma interface de usuário que permite a um administrador (ou usuário) emitir comandos para o sistema operacional. Se um administrador de sistema Linux fosse um piloto de linha aérea, usar o shell seria semelhante a tirar o avião do piloto automático e pegar os controles manuais para um vôo mais manobrável.
Um shell do Linux, como o Bash, é conhecido em termos de ciência da computação como um Command Line Interpreter. O Microsoft Windows também tem dois interpretadores de linha de comando chamados DOS (não deve ser confundido com o sistema operacional DOS original) e PowerShell.
A maioria dos shells modernos, como o Bash, fornecem constructspermitindo que scripts de shell mais complexos automatizem tarefas comuns e complexas.
Construções incluem -
- Controle de fluxo de script (ifthen e else)
- Operações de comparação lógica (maior que, menor que, igualdade)
- Loops
- Variables
- Parâmetros que definem a operação (semelhante a interruptores com comandos)
Usando Shell Script versus Linguagem de Scripting
Freqüentemente, ao pensar em realizar uma tarefa, os administradores se perguntam: Devo usar um script de shell ou uma linguagem de script como Perl, Ruby ou Python?
Não há uma regra definida aqui. Existem apenas diferenças típicas entre shells e linguagens de script.
Concha
O Shell permite o uso de comandos Linux como sed , grep , tee , cat e todos os outros utilitários baseados em linha de comando no sistema operacional Linux. Na verdade, praticamente qualquer utilitário de linha de comando do Linux pode ter um script em seu shell.
Um ótimo exemplo de uso de shell seria um script rápido para verificar uma lista de hosts para resolução de DNS.
Nosso script Bash simples para verificar nomes DNS -
#!/bin/bash
for name in $(cat $1); do host $name.$2 | grep "has address"
done
exit
pequena lista de palavras para testar a resolução DNS -
dns
www
test
dev
mail
rdp
remote
Saída em relação ao domínio google.com -
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com
-doing dns
dns.google.com has address 172.217.6.46
-doing www
www.google.com has address 172.217.6.36
-doing test
-doing dev
-doing mail
googlemail.l.google.com has address 172.217.6.37
-doing rdp
-doing remote
[rdc@centos ~]$
Aproveitando comandos simples do Linux em nosso shell, fomos capazes de fazer um script simples de 5 linhas para auditar nomes DNS de uma lista de palavras. Isso levaria um tempo considerável em Perl, Python ou Ruby, mesmo usando uma biblioteca DNS bem implementada.
Linguagem de script
Uma linguagem de script dará mais controle fora do shell. O script Bash acima usou um invólucro em torno do comando do host Linux . E se quiséssemos fazer mais e tornar nosso próprio aplicativo como um host para interagir fora do shell? É aqui que usaríamos uma linguagem de script.
Além disso, com uma linguagem de script altamente mantida, sabemos que nossas ações funcionarão em sistemas diferentes na maior parte. Python 3.5, por exemplo, funcionará em qualquer outro sistema executando Python 3.5 com as mesmas bibliotecas instaladas. Não é assim, se quisermos executar nosso script BASH em Linux e HP-UX.
Às vezes, as linhas entre uma linguagem de script e um shell poderoso podem ser borradas. É possível automatizar as tarefas de administração do CentOS Linux com Python, Perl ou Ruby. Fazer isso é realmente muito comum. Além disso, os desenvolvedores de script de shell afluentes criaram um daemon de servidor da Web simples, mas funcional em Bash.
Com experiência em linguagens de script e tarefas de automação em shells, um administrador CentOS será capaz de determinar rapidamente por onde começar quando precisar resolver um problema. É bastante comum iniciar um projeto com um script de shell. Em seguida, avance para uma linguagem de script (ou compilada) conforme o projeto se torna mais complexo.
Além disso, não há problema em usar uma linguagem de script e um script de shell para diferentes partes de um projeto. Um exemplo poderia ser um script Perl para raspar um site. Em seguida, use um script de shell para analisar e formatar com sed , awk e egrep . Finalmente, use um script PHP para inserir dados formatados no banco de dados MySQL usando uma interface web.
Com alguma teoria por trás dos shells, vamos começar com os blocos de construção básicos para automatizar tarefas de um shell Bash no CentOS.
Entrada Saída e Redirecionamento
Processando stdout para outro comando -
[rdc@centos ~]$ cat ~/output.txt | wc -l
6039
[rdc@centos ~]$
Acima, passamos cat'sstoud para wc para processamento com o caractere pipe . wc então processou a saída de cat , imprimindo a contagem de linha de output.txt no terminal. Pense no caractere de barra vertical como um "canal" passando a saída de um comando, para ser processado pelo próximo comando.
A seguir estão os conceitos-chave a serem lembrados ao lidar com o redirecionamento de comando -
Número | Descritor de arquivo | Personagem |
---|---|---|
0 | entrada padrão | < |
1 | saída padrão | > |
2 | erro padrão | |
anexar stdout | >> | |
atribuir redirecionamento | E | |
canalizar stdout para stdin | | |
Introduzimos isso no capítulo um sem realmente falar muito sobre redirecionamento ou atribuição de redirecionamento. Ao abrir um terminal no Linux, seu shell é visto como o destino padrão para -
- entrada padrão <0
- saída padrão> 1
- erro padrão 2
Vamos ver como isso funciona -
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2 COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0 [rdc@centos ~]$
/ dev / pts / 0 é nosso pseudo terminal. O CentOS Linux olha para isso e pensa em nosso aplicativo de terminal aberto como um terminal real com o teclado e a tela conectados por meio de uma interface serial. No entanto, como um hipervisor abstrai hardware para um sistema operacional, / dev / pts abstrai nosso terminal para aplicativos.
A partir do comando lsof acima , podemos ver sob oFDcoluna que todos os três descritores de arquivo são definidos para nosso terminal virtual (0,1,2). Agora podemos enviar comandos, ver a saída do comando, bem como quaisquer erros associados ao comando.
A seguir estão exemplos para STDIN e STDOUT -
STDOUT
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." >
output.txt && cat output.txt
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
Também é possível enviar stdout e stderr para arquivos separados -
bash-3.2# find / -name passwd 1> good.txt 2> err.txt
bash-3.2# cat good.txt
/etc/pam.d/passwd
/etc/passwd
bash-3.2# cat err.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
bash-3.2#
Ao pesquisar todo o sistema de arquivos, dois erros foram encontrados. Cada um foi enviado para um arquivo separado para leitura posterior, enquanto os resultados retornados foram colocados em um arquivo de texto separado.
Enviar stderr para um arquivo de texto pode ser útil ao fazer coisas que geram muitos dados para o terminal, como compilar aplicativos. Isso permitirá a leitura de erros que podem ser perdidos no histórico de rolagem do terminal.
Uma observação ao passar STDOUT para um arquivo de texto são as diferenças entre >> e >. O duplo ">>" irá anexar a um arquivo, enquanto a forma singular irá sobrepujar o arquivo e gravar novos conteúdos (então todos os dados anteriores serão perdidos).
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
No comando acima, o arquivo de texto stdin.txt foi redirecionado para o comando cat que ecoou seu conteúdo para STDOUT .
A barra vertical "|"
A barra vertical pegará a saída do primeiro comando, passando-a como uma entrada para o próximo comando, permitindo que o comando secundário execute operações na saída.
Agora, vamos "canalizar" o stdout de cat para outro comando -
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
Acima, o wc executa cálculos na saída de cat que foi passada pelo tubo. O comando pipe é particularmente útil ao filtrar a saída de grep ou egrep -
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l
9000
[root@centosLocal centos]#
No comando acima, passamos cada número de 4 dígitos para wc de um arquivo de texto contendo todos os números de 65535 passados por um filtro egrep .
Redirecionando a saída com &
A saída pode ser redirecionada usando o &personagem. Se quisermos direcionar a saída STDOUT e STDERR para o mesmo arquivo, isso pode ser feito da seguinte maneira -
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1
[root@centosLocal centos]# cat out.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/etc/passwd
[root@centosLocal centos]#
Redirecionando usando o &caractere funciona assim: primeiro, a saída é redirecionada para out.txt . Em segundo lugar, STDERR ou o descritor de arquivo 2 é reatribuído ao mesmo local que STDOUT, neste caso out.txt .
O redirecionamento é extremamente útil e é útil ao resolver problemas que surgem ao manipular grandes arquivos de texto, compilar código-fonte, redirecionar a saída em scripts de shell e emitir comandos Linux complexos.
Embora poderoso, o redirecionamento pode ser complicado para administradores CentOS mais novos. Praticar, pesquisar e fazer perguntas ocasionais a um fórum do Linux (como Stack Overflow Linux) ajudará a solucionar soluções avançadas.
Construções Bash Shell
Agora que temos uma boa ideia de como o shell Bash funciona, vamos aprender algumas construções básicas, comumente usadas, para escrever scripts. Nesta seção, exploraremos -
- Variables
- Loops
- Conditionals
- Controle de loop
- Ler e escrever em arquivos
- Operações matemáticas básicas
Dicas de solução de problemas do BASH
O BASH pode ser um pouco complicado em comparação com uma linguagem de script dedicada. Algumas das maiores dificuldades nos scripts BASH são o escape incorreto ou não de operações de script que estão sendo passadas para o shell. Se você examinou um script algumas vezes e ele não está funcionando como esperado, não se preocupe. Isso é comum mesmo com aqueles que usam o BASH para criar scripts complexos diariamente.
Uma pesquisa rápida no Google ou a inscrição em um fórum de especialistas em Linux para fazer uma pergunta levará a uma resolução rápida. É muito provável que alguém tenha encontrado o problema exato e ele já tenha sido resolvido.
O script BASH é um ótimo método de criação rápida de scripts poderosos para tudo, desde a automação de tarefas de administração até a criação de ferramentas úteis. Tornar-se um desenvolvedor de script BASH com nível de especialista exige tempo e prática. Portanto, use scripts BASH sempre que possível, é uma ótima ferramenta para ter em sua caixa de ferramentas de administração do CentOS.
O gerenciamento de pacotes no CentOS pode ser executado de duas maneiras: a partir do terminal e da interface gráfica do usuário.
Na maioria das vezes, a maior parte do tempo do administrador CentOS estará usando o terminal. Atualizar e instalar pacotes para CentOS não é diferente. Com isso em mente, primeiro exploraremos o gerenciamento de pacotes no terminal e, em seguida, falaremos sobre o uso da ferramenta gráfica de gerenciamento de pacotes fornecida pelo CentOS.
Gerenciador de Pacotes YUM
YUM é a ferramenta fornecida para gerenciamento de pacotes no CentOS. Tocamos brevemente neste tópico nos capítulos anteriores. Neste capítulo, iremos trabalhar a partir de uma instalação CentOS limpa. Iremos primeiro atualizar completamente nossa instalação e, em seguida, instalar um aplicativo.
O YUM trouxe um longo caminho para a instalação e gerenciamento de software no Linux. YUM "automagicamente" verifica se há dependências desatualizadas, além de pacotes desatualizados. Isso realmente tirou uma carga do administrador do CentOS em comparação com os velhos tempos de compilar cada aplicativo a partir do código-fonte.
yum check-update
Verifica se há pacotes que podem atualizar candidatos. Para este tutorial, vamos assumir que este é um sistema de produção que estará voltado para a Internet sem aplicativos de produção que precisam ser testados pelo DevOps antes de atualizar os pacotes. Vamos agora instalar os candidatos atualizados no sistema.
[root@localhost rdc]# yum check-update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
NetworkManager.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-19.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
vim-common.x86_64 2:7.4.160-1.el7_3.1 updates
vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 updates
vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 updates
vim-minimal.x86_64 2:7.4.160-1.el7_3.1 updates
wpa_supplicant.x86_64 1:2.0-21.el7_3 updates
xfsprogs.x86_64 4.5.0-9.el7_3 updates
[root@localhost rdc]#
yum atualização
Isso instalará todos os candidatos atualizados, tornando a instalação do CentOS atual. Com uma nova instalação, isso pode demorar um pouco, dependendo da instalação e da velocidade de conexão com a Internet.
[root@localhost rdc]# yum update
vim-minimal x86_64 2:7.4.160-1.el7_3.1 updates 436 k
wpa_supplicant x86_64 1:2.0-21.el7_3 updates 788 k
xfsprogs x86_64 4.5.0-9.el7_3 updates 895 k
Transaction Summary
======================================================================================
Install 2 Packages
Upgrade 156 Packages
Total download size: 371 M
Is this ok [y/d/N]:
Instale o software via YUM
Além de atualizar o sistema CentOS, o gerenciador de pacotes YUM é nossa ferramenta para instalar o software. Tudo, desde ferramentas de monitoramento de rede, reprodutores de vídeo a editores de texto, pode ser instalado a partir de um repositório central com o YUM .
Antes de instalar alguns utilitários de software, vamos examinar alguns comandos YUM . Para o trabalho diário, 90% do uso do YUM por um Admin CentOS será com cerca de 7 comandos. Examinaremos cada um na esperança de nos familiarizarmos com a operação do YUM em um nível proficiente para uso diário. No entanto, como a maioria dos utilitários do Linux, o YUM oferece uma riqueza de recursos avançados que são sempre ótimos para explorar na página do manual. Usar o man yum sempre será o primeiro passo para realizar operações desconhecidas com qualquer utilitário Linux.
Comandos YUM mais comuns
A seguir estão os comandos YUM comumente usados.
Comando | Açao |
---|---|
lista instalada | Lista os pacotes instalados via YUM |
listar tudo | Lista todos os pacotes disponíveis atualmente |
lista de grupo | Lista pacotes agrupados |
informação | Fornece informações detalhadas sobre um pacote |
pesquisa | Pesquisa descrições e nomes de pacotes |
instalar | Instala um pacote |
localinstall | Instala um pacote rpm local |
retirar | Remove e instala o pacote |
limpar tudo | Limpa / var / cache / yum para liberar espaço em disco |
cara | Como todos os comandos do Linux, o arquivo de ajuda |
Instale o software com YUM
Vamos agora instalar um navegador da web baseado em texto chamado Lynx. Antes da instalação, devemos primeiro obter o nome do pacote que contém o navegador da web Lynx. Não temos 100% de certeza de que nosso repositório CentOS padrão oferece um pacote para o navegador Lynx, então vamos pesquisar e ver -
[root@localhost rdc]# yum search web browser
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
=================================================================
N/S matched: web, browser
==================================================================
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
plug-in and Web Start implementation
elinks.x86_64 : A text-mode Web browser
firefox.i686 : Mozilla Firefox Web browser
firefox.x86_64 : Mozilla Firefox Web browser
lynx.x86_64 : A text-based Web browser
Full name and summary matches only, use "search all" for everything.
[root@localhost rdc]#
Vemos que o CentOS oferece o navegador da web Lynx no repositório. Vamos ver mais algumas informações sobre o pacote.
[root@localhost rdc]# lynx.x86_64
bash: lynx.x86_64: command not found...
[root@localhost rdc]# yum info lynx.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Packages
Name : lynx
Arch : x86_64
Version : 2.8.8
Release : 0.3.dev15.el7
Size : 1.4 M
Repo : base/7/x86_64
Summary : A text-based Web browser
URL : http://lynx.isc.org/
License : GPLv2
Description : Lynx is a text-based Web browser. Lynx does not display any images,
: but it does support frames, tables, and most other HTML tags. One
: advantage Lynx has over graphical browsers is speed; Lynx starts and
: exits quickly and swiftly displays web pages.
[root@localhost rdc]#
Agradável! A versão 2.8 é atual o suficiente, então vamos instalar o Lynx.
[root@localhost rdc]# yum install lynx
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Resolving Dependencies
--> Running transaction check
---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
lynx x86_64
2.8.80.3.dev15.el7 base 1.4 M
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 1.4 M
Installed size: 5.4 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
lynx-2.8.8-0.3.dev15.el7.x86_64.rpm
| 1.4 MB 00:00:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Verifying : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Installed:
lynx.x86_64 0:2.8.8-0.3.dev15.el7
Complete!
[root@localhost rdc]#
A seguir, vamos ter certeza de que o Lynx de fato foi instalado corretamente.
[root@localhost rdc]# yum list installed | grep -i lynx
lynx.x86_64 2.8.8-0.3.dev15.el7 @base
[root@localhost rdc]#
Ótimo! Vamos usar o Lynx para ver como fica a web sem "curtidas" e imagens bonitas.
[root@localhost rdc]# lynx www.tutorialpoint.in
Ótimo, agora temos um navegador para nosso servidor de produção que pode ser usado sem muita preocupação em exploits remotos lançados pela web. Isso é bom para servidores de produção.
Estamos quase concluídos, porém primeiro precisamos configurar este servidor para que os desenvolvedores testem os aplicativos. Portanto, vamos garantir que eles tenham todas as ferramentas necessárias para o seu trabalho. Poderíamos instalar tudo individualmente, mas CentOS e YUM tornaram isso muito mais rápido. Vamos instalar o Pacote do Grupo de Desenvolvimento .
[root@localhost rdc]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Groups:
Compatibility Libraries
Console Internet Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Scientific Support
Security Tools
Smart Card Support
System Administration Tools
System Management
Done
[root@localhost rdc]#
Esta é uma lista menor de grupos de pacotes fornecida pelo CentOS. Vamos ver o que está incluído no "Grupo de Desenvolvimento".
[root@localhost rdc]# yum group info "Development Tools"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Group: Development Tools
Group-Id: development
Description: A basic development environment.
Mandatory Packages:
autoconf
automake
binutils
bison
A primeira tela de saída é como visto acima. Toda esta lista é bastante abrangente. No entanto, esse grupo normalmente precisará ser instalado em sua totalidade com o passar do tempo. Vamos instalar todo o Grupo de Desenvolvimento.
[root@localhost rdc]# yum groupinstall "Development Tools"
Esta será uma instalação maior. Quando concluído, seu servidor terá a maioria das bibliotecas e compiladores de desenvolvimento para Perl, Python, C e C ++.
Gerenciamento gráfico de pacotes no CentOS
O Gnome Desktop oferece uma ferramenta gráfica de gerenciamento de pacotes chamada Software. É bastante simples de usar e direto. Software, a ferramenta de gerenciamento de pacote Gnome para CentOS pode ser encontrada navegando em: Aplicativos → Ferramentas do Sistema → Software.
A Ferramenta de Gerenciamento de Pacotes de Software é dividida em grupos que permitem ao administrador selecionar os pacotes para instalação. Embora essa ferramenta seja ótima para facilidade de uso e simplicidade para usuários finais, o YUM é muito mais poderoso e provavelmente será mais usado por administradores.
A seguir está uma captura de tela da Ferramenta de Gerenciamento de Pacotes de Software, não realmente projetada para Administradores de Sistema.
Logical Volume Management (LVM)é um método usado pelo Linux para gerenciar volumes de armazenamento em diferentes discos rígidos físicos. Isso não deve ser confundido com RAID. No entanto, pode ser pensado em um conceito semelhante ao RAID 0 ou J-Bod. Com o LVM, é possível ter (por exemplo) três discos físicos de 1 TB cada, então um volume lógico de cerca de 3 TB, como / dev / sdb. Ou mesmo dois volumes lógicos de 1,5 TB, 5 volumes de 500 GB ou qualquer combinação. Um único disco pode até ser usado para instantâneos de volumes lógicos.
Note- O uso de volumes lógicos, na verdade, aumenta a E / S do disco quando configurado corretamente. Isso funciona de forma semelhante ao RAID 0 striping dados em discos separados.
Ao aprender sobre gerenciamento de volume com LVM, é mais fácil se soubermos o que é cada componente do LVM. Por favor, estude a tabela a seguir para obter uma compreensão firme de cada componente. Se precisar, use o Google para estudar. Compreender cada parte de um volume lógico é importante para gerenciá-los.
PV | Volume Físico | sda |
PP | Partição Física | sda1, sda2 |
VG | Grupo de Volume | Recursos físicos agrupados |
LV | Volume Lógico | Visto como uma instalação de armazenamento para o sistema operacional |
UMA physical volumeserá visto como / dev / sda, / dev / sdb; um disco físico detectado pelo Linux.
UMA physical partitionserá uma seção do disco particionada por um utilitário de disco como o fdisk. Lembre-se de que a partição física não é recomendada na maioria das configurações de LVM comuns. Exemplo: o disco / dev / sda é particionado para incluir duas partições físicas: / dev / sda1 e / dev / sda1
Se tivermos dois discos físicos de 1 TB cada, podemos criar um grupo de volume de quase 2 TB entre os dois.
A partir do grupo de volume, podemos criar três volumes lógicos, cada um de qualquer tamanho, não excedendo o tamanho total do grupo de volume.
Ferramentas tradicionais de administração de disco Linux
Antes de nos familiarizarmos com as ferramentas mais recentes e de maior destaque para Gerenciamento LVM no CentOS 7, devemos primeiro explorar as ferramentas mais tradicionais que foram usadas para gerenciamento de disco Linux. Essas ferramentas serão úteis e ainda poderão ser usadas com as ferramentas LVM avançadas de hoje, como o System Storage Manager: lsblk, parted e mkfs.xfs.
Agora, supondo que adicionamos outro ou dois discos ao nosso sistema, precisamos enumerar os discos detectados pelo Linux. Eu sempre aconselharia enumerar discos todas as vezes antes de realizar operações consideradas destrutivas.lsblké uma ótima ferramenta para obter informações do disco. Vamos ver quais discos o CentOS detecta.
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
sdc 8:32 0 4G 0 disk
sr0 11:0 1 1024M 0 rom
Como você pode ver, temos três discos neste sistema: sda, sdb e sdc.
O disco sda contém nossa instalação de trabalho do CentOS, então não queremos brincar com o sda. Tanto o sdb quanto o sdc foram adicionados ao sistema para este tutorial. Vamos tornar esses discos utilizáveis no CentOS.
Criar um rótulo de disco
[root@localhost rdc]# parted /dev/sdb mklabel GPT
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this
disk will be lost. Do you want to continue?
Yes/No? Yes
[root@localhost rdc]#
Agora temos um disco rotulado. Simplesmente execute o comando parted da mesma maneira no sdc .
Crie as partições no disco
Criaremos apenas uma única partição em cada disco. Para criar partições, o comando parted é usado novamente.
[root@localhost rdc]# parted -a opt /dev/sdb mkpart primary ext4 0% 100%
Warning - Você solicitou uma partição de 0,00B a 6442 MB (setores 0..12582911).
O local mais próximo que podemos gerenciar é de 17,4kB a 1048kB (setores 34..2047).
Isso ainda é aceitável para você?
Sim não? NÃO
[root@localhost rdc]# parted -a opt /dev/sdc mkpart primary ext4 0% 100%
Information - Você pode precisar atualizar / etc / fstab.
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part / boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
└─sdb1 8:17 0 6G 0 part
sdc 8:32 0 4G 0 disk
└─sdc1 8:33 0 4G 0 part
sr0 11:0 1 1024M 0 rom
[root@localhost rdc]#
Como você pode ver na saída do lsblk, agora temos duas partições, cada uma em sdb e sdc.
Faça o sistema de arquivos
Finalmente, antes de montar e usar qualquer volume, precisamos adicionar um sistema de arquivos. Estaremos usando o sistema de arquivos XFS.
root@localhost rdc]# mkfs.xfs -f /dev/sdb1
meta-data = /dev/sdb1 isize = 512 agcount = 4, agsize = 393088 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1572352, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]# mkfs.xfs -f /dev/sdc1
meta-data = /dev/sdc1 isize = 512 agcount = 4, agsize = 262016 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1048064, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]#
Vamos verificar se cada um tem um sistema de arquivos utilizável.
[root@localhost rdc]# lsblk -o NAME,FSTYPE
NAME FSTYPE
sda
├─sda1 xfs
└─sda2 LVM2_member
├─cl-root xfs
└─cl-swap swap
sdb
└─sdb1 xfs
sdc
└─sdc1 xfs
sr0
[root@localhost rdc]#
Cada um agora está usando o sistema de arquivos XFS. Vamos montá-los, verificar a montagem e copiar um arquivo para cada um.
[root@localhost rdc]# mount -o defaults /dev/sdb1 /mnt/sdb
[root@localhost rdc]# mount -o defaults /dev/sdc1 /mnt/sdc
[root@localhost ~]# touch /mnt/sdb/myFile /mnt/sdc/myFile
[root@localhost ~]# ls /mnt/sdb /mnt/sdc
/mnt/sdb:
myFile
/mnt/sdc:
myFile
Temos dois discos utilizáveis neste momento. No entanto, eles só poderão ser usados quando os montamos manualmente. Para montar cada um na inicialização, devemos editar o arquivo fstab . Além disso, as permissões devem ser definidas para grupos que precisam de acesso aos novos discos.
Criar grupos de volumes e volumes lógicos
Um dos maiores acréscimos ao CentOS 7 foi a inclusão de um utilitário chamado System Storage Manager ou ssm .System Storage Manager simplifica muito o processo de gerenciamento de pools LVM e volumes de armazenamento no Linux.
Percorreremos o processo de criação de um conjunto de volumes simples e volumes lógicos no CentOS. A primeira etapa é instalar o System Storage Manager.
[root@localhost rdc]# yum install system-storage-manager
Vejamos nossos discos usando o comando ssm list .
Conforme visto acima, um total de três discos estão instalados no sistema.
/sdba1 - Hospeda nossa instalação CentOS
/sdb1 - Montado em / mnt / sdb
/sdc1 - Montado em / mnt / sdc
O que queremos fazer é criar um Grupo de Volume usando dois discos (sdb e sdc). Em seguida, disponibilize três Volumes Lógicos de 3 GB para o sistema.
Vamos criar nosso Grupo de Volume.
[root@localhost rdc]# ssm create -p NEW_POOL /dev/sdb1 /dev/sdc1
Por padrão, o ssm criará um único volume lógico estendendo todos os 10 GB do pool. Não queremos isso, então vamos remover isso.
[root@localhost rdc]# ssm remove /dev/NEW_POOL/lvol001
Do you really want to remove active logical volume NEW_POOL/lvol001? [y/n]: y
Logical volume "lvol001" successfully removed
[root@localhost rdc]#
Finalmente, vamos criar os três volumes lógicos.
[root@localhost rdc]# ssm create -n disk001 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk002 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk003 --fs xfs -s 3GB -p NEW_POOL
Agora, vamos verificar nossos novos volumes.
Agora temos três volumes lógicos separados divididos em duas partições de disco físico.
Os volumes lógicos são um recurso poderoso agora integrado ao CentOS Linux. Chegamos à superfície sobre como gerenciar isso. Os pools de masterização e os volumes lógicos vêm com a prática e o aprendizado estendido do Tutorials Point. Por enquanto, você aprendeu os fundamentos do gerenciamento de LVM no CentOS e possui a capacidade de criar volumes lógicos distribuídos básicos em um único host.