CategoryTutoriais

Configurar IP estático no RHEL/CentOS

Olá pessoal! Esse post foi criado, vendo a necessidade de muitas vezes após realizar uma nova instalação do RHEL/CentOS ter que alterar a configuração de endereçamento da interface de rede de DHCP para estático, ou vice-versa.

Iremos alterar o arquivo de configuração da interface de rede que pretendemos ajustar as configurações. Vamos utilizar o comando “ifconfig” para listar a devida interface de rede.

# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.10.15 netmask 255.255.255.0 broadcast 10.151.53.255
inet6 fe80::a00:27ff:fe04:dfb7 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:04:df:b7 txqueuelen 1000 (Ethernet)
RX packets 12078 bytes 10297389 (9.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7143 bytes 556064 (543.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Loopback Local)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Neste caso irei utilizar a interface “enp0s3”, então vamos alterar o arquivo “/etc/sysconfig/network-scripts/ifcfg-enp0s3”

# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
HWADDR=08:00:27:04:DF:B7
TYPE=Ethernet
#BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
#IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=dbff828b-f8ac-4052-872f-cc8f1a02679a
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.10.15
NETMASK=255.255.255.0
GATEWAY=10.10.10.1

As linhas de IPv6 (IPV6INIT, IPV6_AUTOCONF, IPV6_DEFROUTE, IPV6_PEERDNS, IPV6_PEERROUTES, IPV6_FAILURE_FATAL) foram comentadas pois não irei utilizar endereçamento IPv6. A linha “BOOTPROTO=dhcp” foi comentada e criada uma nova entrada “BOOTPROTO=” com o valor “static” (também pode ser utilizado o valor none) para informarmos que a interface irá utilizar endereçamento estático, sendo necessário adicionar as respectivas linhas “IPADDR”, “NETMASK” e “GATEWAY”.

Feito isso salve o arquivo e reinicie o serviço de rede

No RHEL/CentOS 6.x

# service network restart

No RHEL/CentOS 7.x

# systemctl restart network.service

Para reiniciar somente a interface de rede

# ifdown enp0s3 && ifup enp0s3

Caso ocorra algum erro para resolução de nomes de domínio, adicione os servidores DNS da sua empresa ou o de sua preferência no arquivo “resolv.conf” conforme abaixo.

# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.10.10.1
nameserver 10.10.10.2

Pronto! Dessa forma temos nosso IP configurado de forma estática, caso queira alterar para DHCP, basta reverter o processo.

Backup e Restore de banco de dados MySQL

Olá pessoal! Este tutorial irá mostrar maneiras fáceis de realizar o backup e restaurar os dados em seu banco de dados MySQL.

Realizando backup do terminal utilizando o mysqldump

Iremos utilizar o comando “mysqldump” para realizar o backup dos dados do MySQL. Este comando se conecta ao servidor MySQL e cria um arquivo de despejo do SQL. O arquivo de despejo contém as instruções SQL necessárias para recriar o banco de dados. Veja abaixo a sintaxe utilizada:

$ mysqldump -u [usuario] -p[senha] [dbname] > [backupfile.sql]
  • [usuario] Usuário do banco de dados
  • [senha] A senha do usuário do banco de dados (não há espaço entre “-p” e a senha)
  • [dbname] O nome do banco de dados
  • [backupfile.sql] O nome do backup do banco de dados

Por exemplo, para fazer o backup do banco de dados “teste” com usuário “root” para um arquivo “teste_bkp.sql”, você poderá utilizar o comando abaixo:

$ mysqldump -u root -p teste > teste_bkp.sql

Este comando irá fazer backup do banco de dados “teste” em um arquivo chamado “teste_bkp.sql” que conterá todas as instruções SQL necessárias para recriar o banco de dados.

Com o comando mysqldump você pode especificar determinadas tabelas do banco de dados que deseja fazer backup. Por exemplo, para fazer backup somente de tabelas php_teste e asp_teste da base de dados “teste” realize o comando abaixo. Cada nome de tabela tem de ser separado por espaço.

$ mysqldump -u root -p teste php_teste asp_teste > teste_bkp.sql

Às vezes, é necessário fazer backup de mais de um banco de dados ao mesmo tempo. Neste caso, você pode usar a opção “ — databases” seguida pela lista de bancos de dados que você gostaria de fazer backup. Cada nome de banco de dados deve ser separado por espaço.

$ mysqldump -u root -p --databases teste tutoriais artigos > bancos_bkp.sql

Se você quiser fazer backup de todos os bancos de dados no servidor ao mesmo tempo, use a opção “ — all-databases”. Ele diz ao MySQL para realizar o dump de todos os bancos de dados existentes para o destino.

$ mysqldump -u root -p --all-databases > todosbancos_bkp.sql

O comando mysqldump tem também algumas outras opções úteis:

 — add-drop-table: Diz ao MySQL para adicionar uma instrução DROP TABLE antes de cada CREATE TABLE no dump.

 — no-data: Realiza o dump somente da estrutura do banco de dados, não o conteúdo.

 — add-locks: Adiciona as instruções LOCK TABLES e UNLOCK TABLES que você pode ver no arquivo de dump.

O comando mysqldump tem vantagens e desvantagens. As vantagens de usar mysqldump são que é simples de usar e cuida de questões de bloqueio de tabela para você. A desvantagem é que o comando bloqueia tabelas. Se o tamanho das suas tabelas é muito grande mysqldump pode bloquear os usuários por um longo período de tempo.

Realizando backup do banco de dados com compactação

Se o seu banco de dados mysql é muito grande, você pode querer compactar a saída do mysqldump. Basta usar o comando de backup mysql abaixo e canalizar a saída para gzip, então você terá a saída como arquivo gzip.

$ mysqldump -u [usuario] -p[senha] [dbname] | gzip -9 > [backupfile.sql.gz]

Se você quiser extrair o arquivo .gz, use o comando abaixo:

$ gunzip [backupfile.sql.gz]

Realizando restore do banco de dados

Acima realizamos o backup do banco de dados “teste” no arquivo “teste_bkp.sql”. Para recriar o banco de dados “teste” você deve seguir duas etapas:

  • Crie um banco de dados com o mesmo nome na máquina de destino
  • Carregue o arquivo usando o comando mysql:
$ mysql -u root -p teste < teste_bkp.sql

Para restaurar arquivos de backup compactados, você pode fazer o seguinte:

$ gunzip < [backupfile.sql.gz] | mysql -u [usuario] -p[senha] [dbname]

Se você precisar restaurar um banco de dados que já existe, você precisará usar o comando mysqlimport. A sintaxe para mysqlimport é a seguinte:

$ mysqlimport -u [usuario] -p[senha] [dbname] [backupfile.sql]

Se você precisar restaurar todos os bancos de dados, segue abaixo a sintaxe. Para esse comando, os bancos de dados precisam existir ou o script “todosbancos_bkp.sql” precisa conter os parâmetros CREATE DATABASE para os bancos de dados.

$ mysql -u root -p < todosbancos_bkp.sql

Então é isso amigos. Espero ter ajudado com mais uma postagem

Administração de usuários no MySQL

Olá pessoal! Dessa vez trarei em uma sequência de dois posts dicas para administração de usuários e backup/restore de bancos de dados no MySQL, o SGBD (Sistema Gerenciador de Banco de Dados) mais utilizado por pequenas, médias e grandes empresas do setor público e privado, provedores de internet, servidores de hospedagem, servidores web entre outros no mundo inteiro.

Esta documentação foi feita baseada na documentação oficial do MySQL para versão 5.7

Criação de usuários

Normalmente, um administrador de banco de dados primeiro usa CREATE USER para criar uma conta e definir suas características não prioritárias, como sua senha, se usa conexões seguras e limita o acesso aos recursos do servidor, então usa GRANT para definir seus privilégios. ALTER USER pode ser usado para alterar as características não prioritárias de contas existentes. Por exemplo:

CREATE USER 'neto'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL ON db1.* TO 'neto'@'localhost';
GRANT SELECT ON db2.invoice TO 'neto'@'localhost';
ALTER USER 'neto'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;

Exclusão de usuários

A instrução DROP USER remove uma ou mais contas MySQL e seus privilégios. Ele remove linhas de privilégios para a conta de todas as tabelas de concessão.

Para usar DROP USER, você deve ter o privilégio global CREATE USER ou o privilégio DELETE para o banco de dados mysql. Quando a variável de sistema read_only está habilitada, DROP USER requer, adicionalmente, o privilégio SUPER.

Ocorre um erro se você tentar soltar uma conta que não existe.

A partir do MySQL 5.7.8, a cláusula IF EXISTS pode ser usada, o que faz com que a declaração produza um aviso para cada conta nomeada que não existe, em vez de um erro.

DROP USER 'neto'@'localhost';

Obs.: A parte do nome do host do nome da conta, se omitida, assume como padrão ‘%’.

DROP USER não descarta ou invalida automaticamente bancos de dados ou objetos dentro deles que o usuário antigo criou. Isso inclui programas armazenados ou modos de exibição para os quais o atributo DEFINER nomeia o usuário descartado. As tentativas de acessar esses objetos podem produzir um erro se eles forem executados no contexto de segurança do definidor.

Exemplos de Permissões

Privilégios globais

Privilégios globais são administrativos ou aplicam-se a todos os bancos de dados em um determinado servidor. Para atribuir privilégios globais, use a sintaxe ON *. *:

GRANT ALL ON *.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';

Os privilégios CREATE TABLESPACE, CREATE USER, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN e SUPER são administrativos e só podem ser concedidos globalmente.

Outros privilégios podem ser concedidos globalmente ou em níveis mais específicos.

O MySQL armazena privilégios globais na tabela mysql.user.

Privilégios de banco de dados

Os privilégios de banco de dados aplicam-se a todos os objetos em um determinado banco de dados. Para atribuir privilégios de nível de banco de dados, use a sintaxe ON db_name.* :

GRANT ALL ON mydb.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';

Se você usar a sintaxe ON * (em vez de ON *. *) E tiver selecionado um banco de dados padrão, os privilégios serão atribuídos no nível do banco de dados padrão para o banco de dados. Ocorre um erro se não houver nenhum banco de dados padrão.

Os privilégios CREATE, DROP, EVENT, GRANT OPTION, LOCK TABLES e REFERENCES podem ser especificados no nível do banco de dados. Os privilégios de tabela ou de rotina também podem ser especificados no nível do banco de dados, caso em que eles se aplicam a todas as tabelas ou rotinas do banco de dados.

O MySQL armazena os privilégios do banco de dados na tabela mysql.db.

Privilégios de tabela

Os privilégios de tabela aplicam-se a todas as colunas de uma determinada tabela. Para atribuir privilégios ao nível da tabela, utilize ON sintaxe db_name.tbl_name:

GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';

Se você especificar tbl_name em vez de db_name.tbl_name, a instrução se aplica a tbl_name no banco de dados padrão. Ocorre um erro se não houver nenhum banco de dados padrão.

Os valores de priv_type permitidos no nível da tabela são ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER e UPDATE.

O MySQL armazena privilégios de tabelas na tabela mysql.tables_priv.

Privilégios de coluna

Os privilégios de colunas aplicam-se a colunas individuais em uma determinada tabela. Cada privilégio a ser concedido no nível da coluna deve ser seguido pela coluna ou colunas, entre parênteses.

GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';

Os valores priv_type permissíveis para uma coluna (ou seja, quando você usa uma cláusula column_list) são INSERT, REFERENCES, SELECT e UPDATE.

O MySQL armazena privilégios de colunas na tabela mysql.columns_priv.

Privilégios de rotina armazenados

Os privilégios ALTER ROUTINE, CREATE ROUTINE, EXECUTE e GRANT OPTION aplicam-se a rotinas armazenadas (procedimentos e funções). Eles podem ser concedidos nos níveis global e de banco de dados. Exceto para CREATE ROUTINE, esses privilégios podem ser concedidos no nível de rotina para rotinas individuais.

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Os valores de “priv_type” permitidos no nível de rotina são ALTER ROUTINE, EXECUTE e GRANT OPTION. CREATE ROUTINE não é um privilégio de nível de rotina porque você deve ter esse privilégio para criar uma rotina em primeiro lugar.

O MySQL armazena privilégios de nível de rotina na tabela mysql.procs_priv.

Privilégios do usuário do proxy

O privilégio PROXY permite que um usuário seja um proxy para outro. O usuário proxy personifica ou toma a identidade do usuário proxy.

GRANT PROXY ON 'localuser'@'localhost' TO 'externaluser'@'somehost';

Quando PROXY é concedido, ele deve ser o único privilégio nomeado na instrução GRANT, a cláusula REQUIRE não pode ser dada ea única opção WITH permitida é WITH GRANT OPTION.

Proxy requer que o usuário proxy autenticar por meio de um plugin que retorna o nome do usuário proxy para o servidor quando o usuário proxy se conecta e que o usuário proxy tem o privilégio PROXY para o usuário proxy.

O MySQL armazena privilégios de proxy na tabela mysql.proxies_priv.

Nomes de conta e senhas

Um valor de usuário em uma instrução GRANT indica uma conta MySQL à qual a declaração se aplica. Para acomodar a concessão de direitos a usuários de hosts arbitrários, o MySQL suporta especificar o valor do usuário no formato ‘user_name’ @ ‘host_name’.

Você pode especificar curingas no nome do host. Por exemplo, ‘user_name’@’%.example.com’ se aplica a user_name para qualquer host no domínio example.com, e ‘user_name’@’192.168.1.%’ aplica-se a user_name para qualquer host no 192.168.1 Classe C sub-rede.

O formulário simples ‘user_name’ é um sinônimo de ‘user_name’ @ ‘%’.

O MySQL não suporta curingas em nomes de usuário. Para se referir a um usuário anônimo, especifique uma conta com um nome de usuário vazio com a instrução GRANT:

GRANT ALL ON test.* TO ''@'localhost' ...;

Neste caso, qualquer usuário que se conectar do host local com a senha correta para o usuário anônimo terá acesso permitido, com os privilégios associados à conta de usuário anônimo.

Criação Implícita de Conta

Se uma conta nomeada em uma instrução GRANT não existir, a ação tomada depende do modo SQL NO_AUTO_CREATE_USER:

* Se NO_AUTO_CREATE_USER não estiver habilitado, GRANT cria a conta. Isso é muito inseguro, a menos que você especifique uma senha não vazia usando IDENTIFIED BY.

* Se NO_AUTO_CREATE_USER estiver ativado, GRANT falhará e não criará a conta, a menos que você especifique uma senha não vazia usando IDENTIFIED BY ou nomeie um plug-in de autenticação usando IDENTIFIED WITH.

* A partir do MySQL 5.7.2, se a conta já existir, IDENTIFIED WITH é proibido porque é destinado somente para uso ao criar novas contas.

Remover privilégios

A declaração REVOKE permite aos administradores de sistema revogar privilégios de contas MySQL.

Quando a variável de sistema read_only está habilitada, REVOKE requer o privilégio SUPER além de quaisquer outros privilégios necessários descritos na discussão a seguir.

REVOKE INSERT ON *.* FROM 'neto'@'localhost';

Obs.: A parte do nome do host do nome da conta, se omitida, assume como padrão ‘%’.

Para usar a primeira sintaxe REVOKE, você deve ter o privilégio GRANT OPTION e você deve ter os privilégios que você está revogando.

Para revogar todos os privilégios, use a segunda sintaxe, que descarta todos os privilégios globais, de banco de dados, de tabela, de coluna e de rotina para o usuário ou usuários nomeados:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

Para usar essa sintaxe REVOKE, você deve ter o privilégio global CREATE USER ou UPDATE para o banco de dados mysql.

Se as tabelas de concessão contiverem linhas de privilégios que contêm nomes de banco de dados de misto ou de tabela e a variável de sistema lower_case_table_names estiver definida como um valor diferente de zero, REVOKE não pode ser usado para revogar esses privilégios. Será necessário manipular as tabelas de concessão diretamente. (GRANT não criará tais linhas quando lower_case_table_names estiver definido, mas essas linhas poderiam ter sido criadas antes de definir a variável.)

Quando executado com êxito a partir do programa mysql, REVOKE responde com Query OK, 0 linhas afetadas. Para determinar quais privilégios resultam da operação, use SHOW GRANTS.

Então é isso amigos. Espero ter ajudado com mais uma postagem

Utilizando LVM em servidores GNU/Linux

Olá pessoal!

Esse post foi criado com a intenção de documentar um passo-a-passo para criar, remover e alterar LV’s (Logical Volumes) em servidores e estações GNU/Linux

1. Criando partição LVM

Vamos localizar o disco de 50 GB adicionado recentemente à VM

root@vm-testes:~# fdisk -l
...
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 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
...

Vamos utilizar o disco “/dev/sdb” como exemplo

root@vm-testes:~# fdisk /dev/sdb

Vamos criar uma nova partição

Comando (m para ajuda): n

Escolha o tipo de partição

Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended

Utilizando o sistema de particionamento MBR, somente é possível as quatro primeiras partições de um disco serem primárias.

Select (default p): p

Esta será a primeira partição

Partition number (1-4, default 1): 1

O fdisk agora pergunta qual setor a partição deverá iniciar e em Agora o fdisk me pergunta em qual setor essa partição deve começar e em seguida o último setor, definindo o tamanho, como iremos utilizar todo o disco vamos escolher as opções “default” com a tecla ENTER.

First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599):

Created a new partition 1 of type 'Linux' and of size 50 GiB.

Vamos listar as partições

Comando (m para ajuda): p

Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders, total 125829120 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 identifier: 0xe61fc21b

Device Boot Start End Blocks Id System
/dev/sdb1 2048 125829119 62913536 83 Linux

Vamos escolher o tipo da partição

Comando (m para ajuda): t

Selected partition 1
Partition type (type L to list all types): 8e
Changed type of partition 'Linux' to 'Linux LVM'.

Vamos gravar as alterações no disco

Comando (m para ajuda): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Vamos listar agora a tabela de partições do disco “/dev/sdb” e veja a criação da partição “/dev/sdb1”

root@vm-testes:~# fdisk -l /dev/sdb
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0x5673f5b0

Dispositivo Inicializar Start Fim Setores Size Id Tipo
/dev/sdb1 2048 104857599 104855552 50G 8e Linux LVM

2. Criando PV (Physical Volume)

Após criarmos uma partição LVM, vamos criar um PV

root@vm-testes:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

Vamos escanear os PVs e perceba que o “/dev/sdb1” foi criado conforme exibe abaixo.

root@vm-testes:~# pvscan
PV /dev/sda5 VG ubuntu-testvm-vg lvm2 [24,52 GiB / 32,00 MiB free]
PV /dev/sdb1 lvm2 [50,00 GiB]
Total: 2 [74,52 GiB] / in use: 1 [24,52 GiB] / in no VG: 1 [50,00 GiB]

Para maiores detalhes do PV criado utilize o comando “pvdisplay”

root@vm-testes:~# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "50,00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 50,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID spINyj-nfj0-J3Tb-oprJ-ExVl-WSlO-DkVqk3

3. Criando um VG (Volume Group)

Vamos criar o VG de exemplo “vg-teste” conforme abaixo

root@vm-testes:~# vgcreate vg-teste /dev/sdb1
Volume group "vg-teste" successfully created

Vamos escanear os VGs e perceba que o “vg-teste” foi criado conforme exibe abaixo.

root@vm-testes:~# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg-teste" using metadata type lvm2
Found volume group "ubuntu-testvm-vg" using metadata type lvm2

Para maiores detalhes do VG criado utilize o comando “vgdisplay”

root@vm-testes:~# vgdisplay vg-teste
--- Volume group ---
VG Name vg-teste
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 50,00 GiB
PE Size 4,00 MiB
Total PE 12799
Alloc PE / Size 0 / 0
Free PE / Size 12799 / 50,00 GiB
VG UUID eZ2jyt-A8tb-e1Lo-bLhn-VYcG-H8qF-ClDMco

4. Adicionando PV (Physical Volume) ao VG (Volume Group)

Vamos adicionar o PV “/dev/sdc1” ao VG “vg-teste” usando o “vgextend” conforme abaixo

root@vm-testes:~# vgextend vg-teste /dev/sdc1
Volume group "vg-teste" successfully extended

5. Criando LV (Logical Volume)

Vamos criar agora o LV “lvubuntu” no VG “vg-teste”

root@vm-testes:~# lvcreate --name lvubuntu --size 40G vg-teste

Ou para criar com 100% do espaço livre do VG

root@vm-testes:~# lvcreate -l 100%FREE -n lvubuntu vg-teste
Logical volume "lvubuntu" created.

Vamos escanear os LVs e perceba que o “lvubuntu” foi criado conforme exibe abaixo.

root@vm-testes:~# lvscan
ACTIVE '/dev/vg-teste/lvubuntu' [40,00 GiB] inherit
ACTIVE '/dev/ubuntu-testvm-vg/root' [23,74 GiB] inherit
ACTIVE '/dev/ubuntu-testvm-vg/swap_1' [764,00 MiB] inherit

Para maiores detalhes do LV criado no “vg-teste” utilize o comando “lvdisplay”

root@vm-testes:~# lvdisplay vg-teste
--- Logical volume ---
LV Path /dev/vg-teste/lvubuntu
LV Name lvubuntu
VG Name vg-teste
LV UUID C8vdEw-oDV3-MfN4-Lb0V-azZa-Mhhe-X2e9rc
LV Write Access read/write
LV Creation host, time web, 2016-08-10 10:46:51 -0300
LV Status available
# open 0
LV Size 40,00 GiB
Current LE 10240
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:2

6. Formatando a partição LVM

Vamos agora formatar a partição LVM

root@vm-testes:~# mkfs.ext4 /dev/mapper/vg--teste-lvubuntu
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 10485760 4k blocks and 2621440 inodes
Filesystem UUID: aa2a4d29-554d-4dea-9ce8-bacec86a6b5f
Cópias de segurança de superblocos gravadas em blocos:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624

Allocating group tables: pronto
Gravando tabelas inode: pronto
Creating journal (32768 blocks): concluído
Escrevendo superblocos e informações de contabilidade de sistema de arquivos: concluído

7. Montando a partição LVM

Vamos criar o diretório que a partição será montada e realizar a montagem

root@vm-testes:~# mkdir -p /dados/lvubuntu
root@vm-testes:~# mount /dev/mapper/vg--teste-lvubuntu /dados/lvubuntu/

8. Configurando fstab

Vamos utilizar o “blkid” para listar o “UUID” da partição

root@vm-testes:~# blkid | grep "lvubuntu"
/dev/mapper/vg--teste-lvubuntu: UUID="aa2a4d29-554d-4dea-9ce8-bacec86a6b5f" TYPE="ext4"

Vamos adicionar a linha abaixo como uma entrada no arquivo “/etc/fstab”

root@vm-testes:~# vim /etc/fstab
UUID=aa2a4d29-554d-4dea-9ce8-bacec86a6b5f /dados/lvubuntu ext4 defaults 0 1

9. Expandindo o LV (Logical Volume)

Vamos desmontar o LV que será estendido

root@vm-testes:~# umount /dados/lvubuntu

Vamos estender o LV com mais 5 GB

root@vm-testes:~# lvextend -L +5GB /dev/mapper/vg--teste-lvubuntu
Size of logical volume vg-teste/lvubuntu changed from 40,00 GiB (10240 extents) to 45,00 GiB (11520 extents).
Logical volume lvubuntu successfully resized.

Vamos verificar o LV executando o “e2fsck”

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2621440 files (0.0% non-contiguous), 209554/10485760 blocks

Vamos agora redimensionar a partição

root@vm-testes:~# resize2fs -p /dev/mapper/vg--teste-lvubuntu
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/mapper/vg--teste-lvubuntu to 11796480 (4k) blocks.
The filesystem on /dev/mapper/vg--teste-lvubuntu is now 11796480 (4k) blocks long.

Vamos novamente executar o “e2fsck”, porém agora para verificar a partição redimensionada.

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2949120 files (0.0% non-contiguous), 231139/11796480 blocks

Vamos montar novamente a partição

root@vm-testes:~# mount /dev/mapper/vg--teste-lvubuntu /dados/lvubuntu/

Vamos checar o tamanho da nova partição montada

root@vm-testes:~# df -kh /dev/mapper/vg--teste-lvubuntu
Sist. Arq. Tam. Usado Disp. Uso% Montado em
/dev/mapper/vg--teste-lvubuntu 45G 52M 42G 1% /dados/lvubuntu

10. Diminuindo o LV (Logical Volume)

Vamos desmontar o LV que será reduzido

root@vm-testes:~# umount /dados/lvubuntu

Vamos verificar a partição “/dev/mapper/vg–teste-lvubuntu” primeiramente

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2949120 files (0.0% non-contiguous), 231139/11796480 blocks

Vamos reduzir o tamanho da partição para 40 GB

root@vm-testes:~# resize2fs -p /dev/mapper/vg--teste-lvubuntu 40G
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/mapper/vg--teste-lvubuntu to 10485760 (4k) blocks.
Iniciar passo 3 (máximo = 360)
Varrendo tabela de inodes XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/vg--teste-lvubuntu is now 10485760 (4k) blocks long.

Vamos agora reduzir o tamanho do LV para 40 GB e confirmar com “y”

root@vm-testes:~# lvreduce -L 40G /dev/mapper/vg--teste-lvubuntu
WARNING: Reducing active logical volume to 40,00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvubuntu? [y/n]: y
Size of logical volume vg-teste/lvubuntu changed from 45,00 GiB (11520 extents) to 40,00 GiB (10240 extents).
Logical volume lvubuntu successfully resized.

Vamos verificar a partição “/dev/mapper/vg–teste-lvubuntu” novamente

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2621440 files (0.0% non-contiguous), 209554/10485760 blocks

Vamos montar a partição novamente

root@vm-testes:~# mount /dados/lvubuntu

Vamos checar o tamanho da nova partição montada

root@vm-testes:~# df -kh /dev/mapper/vg--teste-lvubuntu
Sist. Arq. Tam. Usado Disp. Uso% Montado em
/dev/mapper/vg--teste-lvubuntu 45G 52M 42G 1% /dados/lvubuntu

11. Removendo um PV (Phisical Volume)

Para remover o disco do VG, utilize o comando abaixo

root@vm-testes:~# vgreduce vg-teste /dev/sdb1

Para remover um disco PV

root@vm-testes:~# pvremove /dev/sdb1

Utilizando o OCS Teledeploy

O Teledeploy é uma ferramenta do OCS Inventory NG para deployment de pacotes, por isso vamos precisar do uso de certificados digitais e SSL para validar o servidor antes de tentar fazer o download dos pacotes. Para entender um pouco mais do uso de certificados digitais e SSL no apache, pode ser utilizado o post anterior clicando aqui.

Vamos adicionar o vitualhost abaixo (para uso das configurações ssl, configurações do php para envio de arquivos através do “Teledeploy” e configurações do diretório /download) no nosso arquivo de configurações “/etc/httpd/conf.d/ocsinventory-reports.conf”.

<Virtualhost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/ca/inventario.crt
SSLCertificateKeyFile /etc/pki/tls/private/inventario.key
SSLCACertificateFile /etc/pki/tls/certs/ca/cacert.pem

ServerName   ocsvm01
ServerAlias  ocsvm01.home.local
DocumentRoot /usr/share/ocsinventory-reports/ocsreports

php_flag file_uploads           on
php_value post_max_size         51M
php_value upload_max_filesize   50M

Alias /download /var/lib/ocsinventory-reports/download
<Directory /var/lib/ocsinventory-reports/download>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
</Directory>
</Virtualhost>

Vamos liberar o acesso ao apache na porta 443 pelo iptables

# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Criando um pacote

Existem três formas de criação de pacotes: STORE, EXECUTE e LAUNCH. Cada uma delas tem um comportamento diferente, o STORE faz o download de um arquivo e armazena em um diretório, o EXECUTE tanto executa um comando como um programa com um comando, e o LAUNCH faz o download de um arquivo, descompacta, e em seguida, executa a sua instalação. Para criar o pacote, é necessário o usuário “apache” ter acesso de gravação para a pasta “/var/lib/ocsinventory-reports/download/”.

Antes de tudo, iremos definir alguns ajustes de configuração do “Deployment server” e “Redistribution Servers”.

Vamos entrar na interface Web do OCS Inventory, selecionar o ícone “Config”, opção “Config”, e clicar na aba “Deployment”. Iremos alterar as opções DOWNLOAD de OFF para ON (habilitar a função de distribuição automatica do deploy), nos campos DOWNLOAD_URI_FRAG e DOWNLOAD_URI_INFO iremos definir o nome do nosso servidor e clicar em UPDATE conforme a imagem abaixo:

config_deploy

Ainda nas configurações do servidor vá para a aba “Redistribution Servers” e altere a opção DOWNLOAD_REDISTRIB de ON para OFF e clicar em UPDATE(desabilitar a função de servidores de redistribuição, pois os pacotes somente serão utilizados pelo nosso “Deployment Server”)

Então… vamos criar um primeiro pacote:

Vamos novamente entrar na interface Web do OCS Inventory, selecionar o ícone “Deployment” e “Build” para a criação do pacote.

deploy_build

Devemos atribuir um nome para o pacote, Descrição do pacote, Plataforma, Protocolo e Prioridade (opção que vai priorizar a ordem de execução do pacote no cliente, o menor terá a maior prioridade). Na hora de fazer upload de arquivos e programas, é necessário comprimir em .zip ou .tar.gz antes. Vamos escolher uma ação (podemos usar variáveis do sistema, como %SYSTEMDRIVE%, %TEMP%, %USERPROFILE%, %PROGRAMFILES%, etc) para armazenar o arquivo ou comando a ser executado. É possível escolher se queremos que o usuário seja avisado sobre a execução do pacote, e até mesmo para permitir ao usuário para atrasar a execução (útil para implantações de pacote de serviço, etc).

build_package1

A próxima etapa vai nos permitir criar os fragmentos (quantidade de partes que o pacote será dividido para permitir uma melhor implementação, para em caso de erros, realizar apenas o download dos fragmentos com falha novamente, etc), bem como a soma de verificação para validade dos dados.

build_package2

Seu pacote será criado em seguida em “/var/lib/ocsinventory-reports/download/#Pkgid#”.

Ativando um pacote

Quando criamos o pacote, é criado um arquivo “info” (com informações das ações do pacote) e os fragmentos de pacotes, podemos tê-los somente em um servidor ou dividir entre diferentes servidores (Redistribution Servers) tendo que especificar onde está localizado cada pacote antes de usá-lo em nossas máquinas. Este processo é chamado de “ativação”.

Ainda na interface Web do OCS Inventory, vamos selecionar o ícone “Deployment” e “Activate”, para a ativação do pacote desejado.

deploy_activate

Será exibida uma lista com os pacotes criados e prontos para ativação, vamos clicar no ícone ativar do pacote que iremos realizar a ativação (você pode observar que é criado um hiperlink sobre o nome dos pacotes que já estão ativados).

activate_package1

Após clicar em ativar vamos verificar se os campos “Fragments url” e Https url” estão configurados conforme definimos acima, vamos clicar em “Enable this alteration” e o pacote agora está criado e ativado!

activate_package

 

 

Aplicando pacotes nos computadores

Nessa etapa podemos aplicar pacotes selecionando um (com a exibição de propriedades do computador, selecionando o ícone de personalização e adicionando o pacote) ou vários computadores. A melhor forma é aplicar os pacotes usando a busca avançada.

O certificado “cacert.pem” que foi gerado através da CA, deverá estar presente no diretório do agente do OCS Inventory NG no Windows (geralmente em “C:\Program Files\OCS Inventory Agent”) e no Linux (/etc/ocsinventory-client). Desconsidere isso no caso em que o certificado tenha sido anexado no “OcsPackage.exe”.

No exemplo abaixo, vamos através da busca avançada aplicar os pacotes em todos computadores Windows

aplicando_package1

A busca irá retornar apenas os itens que correspondem com a requisição

aplicando_package

Podemos selecionar apenas alguns computadores que foram encontrados, como podemos aplicar os pacotes para todo o resultado da busca. Para isso, basta clicar em “deploy”, escolher o pacote desejado e clicar em “Update”.aplicando_package3

Note que o status do pacote irá ficar como WAITING NOTIFICATION até o agente conectar novamente ao Communication Server.

Seguem abaixo alguns exemplos de STATUS do pacote

Status code Meaning
WAITING NOTIFICATION Server is waiting for agent communication to notify there is something to download.
NOTIFIED Agent has been notified there is something to download. Now server waiting for result code.
SUCCESS Agent has successfully download package and launch command or stored extracted data. With “Launch” action, this status may be completed with command execution return code. (return code 0).
ERR_EXIT_CODE_xxx Agent has successfully download package, BUT command of execution or data store associated terminated in error (return code xxx).
ERR_ALREADY_SETUP Package was previously installed successfully on this computer.
ERR_BAD_ID Agent is unable to download package because it cannot find package ID on deployment server.
ERR_BAD_DIGEST Downloaded data are has bad digest, so agent does not execute associated command.
ERR_DOWNLOAD_INFO Agent was unable to download INFO file associated to the package.
ERR_DOWNLOAD_PACK Agent was unable to download ZIP or TAR.GZ file.
ERR_BUILD Agent was unable to rebuild package fragments.
ERR_UNZIP Agent was unable to uncompress downloaded ZIP or TAR.GZ file.
ERR_OUT_OF_SPACE There is not enought space available on disk to uncompress and execute ZIP or TAR.GZ package.
ERR_BAD_PARAM A INFO file parameter of the package is incorrect.
ERR_EXECUTE_PACK Any execution command is specified in INFO file of package.
ERR_EXECUTE Agent was unable to execute associated package command.
ERR_CLEAN Agent was unable to clean downloaded package.
ERR_DONE_FAILED Agent can’t retrieve execution result in package cache (cache is used to store result if the server is not responding at the end of package execution).
ERR_TIMEOUT Agent was unable to download package during DOWNLOAD_TIMEOUT days.
ERR_ABORTED User canceled package command execution (you’ve choosen to notify him, and allowed him to cancel).

Fonte:
Wiki OCS Inventory NG

Utilizando Certificados Digitais e SSL no apache

Visão Geral do SSL e de Certificados Digitais

O SSL oferece conexões seguras permitindo que, para dois aplicativos que estão se conectando por meio de uma rede, cada aplicativo faça a autenticação da identidade do outro aplicativo. Além disso, o SSL fornece a criptografia dos dados trocados entre esses aplicativos. A autenticação permite que um servidor (unidirecional) e, opcionalmente, um cliente (bidirecional) verifiquem a identidade do aplicativo na outra extremidade de uma conexão de rede. A criptografia faz com que os dados transmitidos pela rede possam ser compreendidos apenas pelo destinatário planejado.

Os recursos do SSL incluem os seguintes conceitos:

  • O SSL oferece um mecanismo para que um aplicativo se autentique em outro aplicativo.
  • O SSL unidirecional permite que um aplicativo saiba exatamente a identidade do outro aplicativo.
  • O SSL bidirecional (autenticação mútua) permite que ambos os aplicativos saibam exatamente a identidade do outro.
  • O aplicativo que assume a função de “servidor” possui e utiliza um certificado de servidor para comprovar sua identidade ao aplicativo cliente.
  • Em uma autenticação mútua, o aplicativo que assume a função de “cliente” possui e utiliza um certificado de cliente para comprovar sua identidade ao aplicativo servidor.
  • O aplicativo que recebe um certificado deve possuir o certificado raiz (ou a cadeia de certificado) de CA (Autoridade de Certificação) que assinou esse certificado que está sendo apresentado. O certificado raiz, ou a cadeia, de CA valida o certificado que está sendo apresentado.
  • Em conexões de clientes, o navegador cliente alerta o usuário quando recebe um certificado que não foi emitido por uma Autoridade de Certificação reconhecida.

Compreendendo Chaves Privadas e Certificados Digitais

Chaves privadas, certificados digitais e Autoridades de Certificação confiáveis podem ser utilizadas para estabelecer e verificar a identidade de aplicativos de rede.

O SSL utiliza tecnologia de criptografia de chave pública para autenticação. Na criptografia de chave pública, uma chave pública e uma chave privada são geradas para um aplicativo. As chaves são relacionadas de tal forma que os dados criptografados com a chave pública podem ser decriptografados somente utilizando a chave privada correspondente. De maneira similar, os dados criptografados com a chave chave privada podem ser decriptografados somente utilizando a chave pública correspondente. A chave privada é cuidadosamente protegida, de forma que apenas o proprietário possa decriptografar as mensagens criptografadas utilizando a chave pública.

A chave pública está incorporada a um certificado digital com informações adicionais que descrevem o proprietário da chave pública, como nome, endereço e endereço de e-mail. Uma chave privada e um certificado digital fornecem a identidade para o aplicativo.

Os dados incorporados em um certificado digital são verificados por uma CA confiável e assinados digitalmente com o certificado digital da Autoridade de Certificação. As Autoridades de Certificação conhecidas incluem Verisign eEntrust.net. Uma Autoridade de Certificação confiável estabelece confiança para um aplicativo.

Um aplicativo que participa de uma conexão SSL é autenticado quando a outra parte avalia e aceita os respectivos certificados digitais. Um certificado digital utilizado para autenticação é validado por um certificado de CA raiz associado, localizado na aplicação de recepção.

Navegadores da Web, servidores e outros aplicativos ativados por SSL geralmente aceitam como verdadeiro qualquer certificado digital que seja assinado por uma Autoridade de Certificação confiável e seja válido. Por exemplo, um certificado digital pode ser invalidado porque expirou ou porque o certificado digital da Autoridade de Certificação utilizada para assiná-lo expirou. Um certificado de servidor poderá ser invalidado se o nome do host no certificado digital do servidor não corresponder ao nome do host especificado pelo cliente.

Irei mostrar três formas para gerar certificados SSL para o seu servidor. Você poderá utilizar um certificado auto-assinado (uma forma mais rápida, fácil, porém limitada), um certificado assinado através da CA, que poderá ser gerenciada por você mesmo (uma forma mais segura e confiável), ou usando um certificado de uma CA reconhecida (neste exemplo utilizarei o “cacert.org”, pois eles assinam seus certificados e fornecem um certificado com o objetivo de ser usado em muitos projetos de software livre).

Geralmente o mod_ssl vem junto com o pacote principal do Apache. Nas distribuições derivadas do debian é necessário somente ativar o módulo.

# a2enmod ssl

Vamos recarregar o serviço para que as alterações sejam aplicadas

# /etc/init.d/apache2 force-reload

No caso das distribuições derivadas do RHEL, como o CentOS, vamos verificar se o “mod_ssl” está instalado e ativar no apache.

# rpm -qa | grep mod_ssl

Vamos instalar o módulo e recarregar as configurações.

# yum install mod_ssl
# httpd -kgraceful

Após instalação do mod_ssl, automaticamente é criado o arquivo de configuração ssl.conf dentro do diretório “/etc/httpd/conf.d”

1 – Gerando um certificado auto-assinado

Gerar a chave privada com 2048 bits

$ cd /etc/pki/tls/certs
# openssl genrsa -out servidor.key 2048

Gerar o certificado auto-assinado

# openssl req -outform PEM -new -key servidor.key -x509 -days 1825 -out servidor.crt
Country Name (2 letter code) [XX]:BR
State or Province Name (full name) []:Ceara
Locality Name (eg, city) [Default City]:Fortaleza
Organization Name (eg, company) [Default Company Ltd]:Café com Linux
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.cafecomlinux.com.br
Email Address []:neto@cafecomlinux.com.br

Responda as perguntas conforme as informações de seu site. O campo “Common Name” deverá ser preenchido com as informações do hostname, os campos “Organizational Unit Name” e “Email” não são obrigatórios, porém darão mais informações ao certificado que será gerado.

Copie a chave privada para o respectivo diretório

# cp servidor.key /etc/pki/tls/private

O conteúdo abaixo deverá ser inserido no arquivo de configuração de ssl do seu servidor apache ou nas configurações do virtualhost de seu site

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/servidor.crt
SSLCertificateKeyFile /etc/pki/tls/private/servidor.key

2 – Gerando um certificado assinado através da sua CA

Nesse exemplo, irei utilizar dois servidores, o servidor que será assinado pela CA e o servidor responsável pela CA.

Vamos criar um diretório para a chave privada e certificado da CA

# mkdir /etc/pki/tls/certs/CA

Gerar a chave privada com 2048 bits da CA

$ cd /etc/pki/tls/certs/CA
# openssl genrsa -des3 -out cacert.key 2048
Enter pass phrase for cacert.key:
Verifying - Enter pass phrase for cacert.key:

Gerar o certificado auto-assinado da CA com validade de 10 anos

# openssl req -new -x509 -days 3650 -key cacert.key -out cacert.pem 
Country Name (2 letter code) [XX]:BR
State or Province Name (full name) []:Ceara
Locality Name (eg, city) [Default City]:Fortaleza
Organization Name (eg, company) [Default Company Ltd]:Café com Linux
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.cafecomlinux.com.br
Email Address []:neto@cafecomlinux.com.br

Responda as perguntas conforme as informações de seu site. O campo “Common Name” deverá ser preenchido com as informações do hostname, os campos “Organizational Unit Name” e “Email” não são obrigatórios, porém darão mais informações ao certificado que será gerado.

Agora iremos criar a chave privada do servidor que será assinado pela CA

# openssl genrsa -out servidor.key 2048

Gerar a requisição de certificado do servidor que será assinado pela CA

# openssl req -new -key servidor.key -out servidor.csr
Country Name (2 letter code) [XX]:BR
State or Province Name (full name) []:Ceara
Locality Name (eg, city) [Default City]:Fortaleza
Organization Name (eg, company) [Default Company Ltd]:Café com Linux
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.cafecomlinux.com.br
Email Address []:neto@cafecomlinux.com.br

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Novamente responda as perguntas conforme as informações de seu site. O campo “Common Name” deverá ser preenchido com as informações do hostname, os campos “Organizational Unit Name”, “Email”, “A challenge password” e “An optional company name” não são obrigatórios, porém darão mais informações ao certificado que será gerado.

Vamos assinar o certificado do seu servidor pela CA com validade de 10 anos

# openssl x509 -req -in servidor.csr -out servidor.crt -sha1 -CA cacert.pem -CAkey cacert.key -CAcreateserial -days 3650

O conteúdo abaixo deverá ser inserido no arquivo de configuração de ssl do seu servidor apache ou nas configurações do virtualhost de seu site

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/CA/servidor.crt
SSLCertificateKeyFile /etc/pki/tls/certs/CA/servidor.key
SSLCACertificateFile /etc/pki/tls/certs/CA/cacert.pem

Para o navegador de internet e aplicações clientes que utilizarão ssl, se faz necessário importar ou copiar o arquivo “cacert.pem” para seus respectivos diretórios.

3 – Usando um certificado de uma CA reconhecida”

Gerar a chave privada com 2048 bits

$ cd /etc/pki/tls/certs
# openssl genrsa -out servidor.key 2048

Gerar a requisição de certificado do servidor que será assinado pela CA

# openssl req -new -key servidor.key -out servidor.csr
Country Name (2 letter code) [XX]:BR
State or Province Name (full name) []:Ceara
Locality Name (eg, city) [Default City]:Fortaleza
Organization Name (eg, company) [Default Company Ltd]:Café com Linux
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.cafecomlinux.com.br
Email Address []:neto@cafecomlinux.com.br

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Responda as perguntas conforme as informações de seu site. O campo “Common Name” deverá ser preenchido com as informações do hostname, os campos “Organizational Unit Name”, “Email”, “A challenge password” e “An optional company name” não são obrigatórios, porém darão mais informações ao certificado que será gerado.

Copie a chave privada para o respectivo diretório

# cp servidor.key /etc/pki/tls/private

Agora vamos colar conteúdo do arquivo servidor.csr no site da CA que será gerado o certificado (https://www.cacert.org/account.php?id=10) e após receber e-mail com resposta, vamos copiar o cetificado “.crt” gerado pela CA para o servidor web

# cp servidor.crt /etc/pki/tls/certs/servidor.crt

Vamos baixar o certificado CACERT’s root certificate e renomear para “cacert.pem”. Este certificado será utilizado tanto pelo servidor web quanto pelos clientes.

O conteúdo abaixo deverá ser inserido no arquivo de configuração de ssl do seu servidor apache ou nas configurações do virtualhost de seu site

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/servidor.crt
SSLCertificateKeyFile /etc/pki/tls/private/servidor.key
SSLCACertificateFile /etc/pki/tls/certs/cacert.pem

Para o navegador de internet e aplicações clientes que utilizarão ssl, se faz necessário importar ou copiar o arquivo “cacert.pem” para seus respectivos diretórios.

Com o openssl podemos obter algumas informações através dos certificados gerados, abaixo seguem alguns exemplos de comandos:

Informação geral do certificado

# openssl x509 -in cacert.pem -noout -text

Informação sobre datas de criação e expiração

# openssl x509 -in cacert.pem -noout -dates

Informação da finalidade do certificado

# openssl x509 -in cacert.pem -noout -purpose

Instalação do OCS Inventory RHEL/CentOS 6.x

Pré-requisitos para instalação do OCS Inventory NG
– Apache 1.3.33 ou superior;
– Mod_perl 1.29 ou superior;
– Mod_php 4.3.2 ou superior;
– PHP 4.3.2 ou superior com suporte a ZIP e GD habilitados;
– PERL 5.6 ou superior;
– Perl module XML::Simple versão 2.12 ou superior;
– Perl module Compress::Zlib versão 1.33 ou superior;
– Perl module DBI versão 1.40 ou superior;
– Perl module DBD::Mysql versão 2.9004 ou superior;
– Perl module Apache::DBI versão 0.93 ou superior;
– Perl module Net::IP versão 1.21 ou superior;
– Perl module SOAP::Lite versão 0.66 ou superior (opcional);
– MySQL 4.1.0 ou superior com engine InnoDB habilitada;

Para instalar o MySQL, pode ser utilizado o meu post anterior clicando aqui.

Os pacotes do ocs não vêm nos repositórios padrão do RHEL/CentOS. Iremos instalar a versão 2.1.2 do ocs, pois já traz bastante melhoria de recursos comparada à versões anteriores, para isso vamos instalar o epel e o remi como repositório adicional.

# yum install epel-release
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6*.rpm

O yum resolverá todas dependências informadas no início do post. Vamos instalar o OCS Inventory habilitando o uso do remi.

# yum --enablerepo=remi install ocsinventory

Vamos liberar o acesso ao apache e ao mysql nas portas 80 e 3306 pelo iptables

# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

E deixar o SElinux no modo permissivo

# vim /etc/selinux/config
SELINUX=permissive

Vamos criar o banco de dados “ocsweb”, criar o usuário “ocs” e dar acesso ao banco.

# mysql -u root -p
CREATE DATABASE ocsweb;
GRANT ALL PRIVILEGES ON ocsweb.* to ocs@localhost IDENTIFIED BY 'senha';
FLUSH PRIVILEGES;
QUIT

Vamos agora checar se será necessário realizar alguma alteração nas informações do banco instalado

# vim /etc/httpd/conf.d/ocsinventory-server.conf
# Master Database settings
  # Replace localhost by hostname or ip of MySQL server for WRITE
  PerlSetEnv OCS_DB_HOST localhost
  # Replace 3306 by port where running MySQL server, generally 3306
  PerlSetEnv OCS_DB_PORT 3306
  # Name of database
  PerlSetEnv OCS_DB_NAME ocsweb //verifique se é o nome do banco que foi criado
  PerlSetEnv OCS_DB_LOCAL ocsweb //verifique se é o nome do banco que foi criado
  # User allowed to connect to database
  PerlSetEnv OCS_DB_USER ocs //verifique se é o nome do usuário do banco com permissões
  # Password for user
  PerlSetVar OCS_DB_PWD ocs //altere para a senha definida

Vamos iniciar o serviço httpd

# /etc/init.d/httpd start

Define a inicialização do httpd nos níveis padrão de inicialização do sistema

# chkconfig http on

Acesse o endereço “http://ip-do-servidor/ocsreports/install.php” e preencha conforme abaixo

ocs_database

Ao clicar em send, será executado o script install.php que realizará a configuração do banco de dados do OCS Inventory.
Acesse o endereço “http://ip-do-servidor/ocsreports” para acessar o OCS Inventory e use as credenciais abaixo

User: admin
Password: admin

ocs_home

Após o login, poderão aparecer alertas na tela informando que o script install.php está presente no servidor, conforme imagem acima. O usuário e senha do banco e da interface web de administração estão definidos como padrão. Altere as senhas no banco de dados e na interface web de administração e apague o script conforme abaixo.

# rm -f /usr/share/ocsinventory-reports/ocsreports/install.php

Pronto. O serviço do OCS Inventory está instalado, configurado, executando e aguardando por novos inventários, instale o agente na sua estação e verifique!

Fonte:
Wiki OCS Inventory NG

Instalação e configuração inicial MySQL no RHEL/CentOS 6.x

O repositório padrão do CentOS não dispõe de versões mais recentes do MySQL. No caso da necessidade de uma versão mais atual que ofereça novos recursos adicionados, costumo sempre utilizar o repositório epel com o remi como repositório adicional.

# yum install epel-release
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6*.rpm

Vamos instalar o serviço mysqld no nosso servidor. Com o yum, iremos habilitar o uso do remi (por padrão é desabilitado) e adquirir as informações de versão do pacote a ser instalado.

# yum --enablerepo=remi info mysql-server.x86_64
Plugins carregados: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.gtdinternet.com
 * epel: epel.gtdinternet.com
 * extras: centos.ufes.br
 * remi: mirror.cedia.org.ec
 * remi-safe: mirror.cedia.org.ec
 * updates: mirror.gtdinternet.com
Pacotes disponíveis
Name        : mysql-server
Arch        : x86_64
Version     : 5.5.48
Release     : 1.el6.remi
Size        : 10 M
Repo        : remi
Summary     : The MySQL server and related files
URL         : http://www.mysql.com
License     : GPLv2 with exceptions and LGPLv2 and BSD
Descrição : MySQL is a multi-user, multi-threaded SQL database server. MySQL is
          : a client/server implementation consisting of a server daemon
          : (mysqld) and many different client programs and libraries. This
          : package contains the MySQL server and some accompanying files and
          : directories.

A versão que iremos utilizar será a 5.5.48 do mysql-server conforme exibido acima.

# yum --enablerepo=remi install mysql mysql-server -y

Após a instalação vamos iniciar o serviço mysqld

# /etc/init.d/mysqld start

Define a inicialização do mysqld nos níveis padrão de inicialização do sistema

# chkconfig mysqld on

Após inicialização do banco, iremos definir a senha de root. Existem duas formas, através do comando “mysqladmin” ou executando o script “mysql_secure_installation”. Irei a seguir mostrar das duas formas.
Com o comando “mysqladmin”, basta informar a nova senha conforme abaixo.

# mysqladmin -u root password 'nova_senha'

Utilizando o script “mysql_secure_installation” será feita uma configuração básica do servidor

# mysql_secure_installation
Enter current password for root (enter for none): //pressione enter no caso de não existir senha ainda
Set root password? [Y/n] //pressione enter para definir a senha de root do servidor MySQL
New password: //insira a senha de root do servidor MySQL
Re-enter new password: //repita a senha de root do servidor MySQL
Remove anonymous users? [Y/n] //pressione enter para remover o acesso de usuários anônimos
Disallow root login remotely? [Y/n] //pressione enter para remover o acesso remoto do root
Remove test database and access to it? [Y/n] //pressione enter para remover a tabela test e seus acessos
Reload privilege tables now? [Y/n] //pressione enter para recarregar os privilégios das tabelas

O servidor MySQL já está instalado e configurado com o básico. Espero ter ajudado

VirtualBox 5 no Fedora/CentOS/RHEL

Olá pessoal, hoje irei apresentar um pequeno tutorial para realizar a instalação do Oracle VirtualBox no Fedora 23/22/21/20/19/18, RHEL/CentOS 7/6/5.

O VirtualBox é uma ótima ferramenta para virtualização com um maior uso doméstico e educacional, por possuir uma grande facilidade de instalação em sistemas operacionais “hospedeiros” voltados para o usuário final.

Inicialmente vamos adicionar o repositório de arquivos do VirtualBox

$ cd /etc/yum.repos.d/

Fedora 23/22/21/20/19/18/17/16/15/14/13/12

# wget http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo

RHEL/CentOS 7/6/5

# wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

Vamos atualizar o nosso repositório e checar a nossa versão do Kernel

# yum update
$ uname -r

No caso do RHEL/CentOS é necessário instalar o pacote do repositório epel. Faremos isso com os comandos abaixo.
RHEL/CentOS 7

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

RHEL/CentOS 6

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

RHEL/CentOS 5

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

Vamos instalar as dependências abaixo necessárias.
Fedora 23/22

# yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms

Fedora 21/20/19/18/17/16/15/14 e RHEL/CentOS 7/6/5

# yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms

Vamos buscar e instalar a última versão do VirtualBox

# yum search VirtualBox
Last metadata expiration check performed 0:24:27 ago on Wed Dec  2 20:45:19 2015.
=========================== N/S Matched: VirtualBox ============================
VirtualBox-4.3.x86_64 : Oracle VM VirtualBox
VirtualBox-5.0.x86_64 : Oracle VM VirtualBox
libvirt-daemon-driver-vbox.x86_64 : VirtualBox driver plugin for the libvirtd
                                  : daemon
RemoteBox.noarch : Open Source VirtualBox Client with Remote Management
libvirt-daemon-vbox.x86_64 : Server side daemon & driver required to run
                           : VirtualBox guests
# yum install VirtualBox-5.0.x86_64

Vamos executar o comando abaixo para recriar os módulos do kernel.
Fedora 23/22/21/20/19 e RHEL/CentOS 7

# /usr/lib/virtualbox/vboxdrv.sh setup

Fedora 18/17/16/15/14 e RHEL/CentOS 6/5

# /etc/init.d/vboxdrv setup

Ou

# service vboxdrv setup

Vamos adicionar o usuário no grupo “vboxusers” criado automaticamente pela instalação.

# usermod -a -G vboxusers "usuário"

Em alguns casos você poderá ter problemas com o parâmetro “KERN_DIR”, então iremos setar este parâmetro manualmente.
Utilizando o Kernel atual no Fedora

# KERN_DIR=/usr/src/kernels/`uname -r`

Utilizando o Kernel atual no RHEL/CentOS

# KERN_DIR=/usr/src/kernels/`uname -r`-`uname -m`

Exportar KERN_DIR

# export KERN_DIR

Pronto! Feito isso, o nosso Oracle VirtualBox está instalado e funcionando corretamente. Agora vamos testar.

Samba4 no RHEL/CentOS

Sejam todos bem vindos ao Café com Linux!

Decidi criar o primeiro post com um tutorial. Pretenderei sempre postar novos tutoriais, dicas e notícias com assuntos relacionados à área de Tecnologia da Informação, buscando priorizar sempre Software Livre.

Este será um tutorial sobre o Samba4, uma ferramenta que tem amadurecido muito desde sua primeira versão. Uma das grandes vantagem ao utilizar o Samba4 é poder criar um controlador de domínio Active Directory (AD DC) similar ao da Microsoft. O objetivo deste post é preparar um ambiente RHEL/CentOS com as dependências necessárias para a compilação, instalação e primeira configuração. Não irei abordar a instalação do RHEL/CentOS, pois imagino que já saibam como fazer.

O ambiente utilizado:

  • VM CentOS 6.7 x86_64 minimal (utilizei uma imagem mínima por instalar somente o necessário para o funcionamento do S.O.);
  • 1GB de RAM;
  • 20GB de HD;

Como utilizei uma imagem minimal (offline), recomendo fazer a atualização após a instalação do S.O. utilizando o comando:

# yum update

Iremos fazer a instalação e configurações iniciais com o nosso serviço de firewall iptables parado e o SELinux no modo permissivo com os comandos abaixo. Lembrando que não é recomendável utilizar um servidor em produção com o firewall desabilitado e como se trata somente de um laboratório, deixaremos a criação de um arquivo iptables configurado de forma correta, liberando somente as portas necessárias para o funcionamento do Samba4 em um outro post.

# service iptables stop
# setenforce 0

Iremos editar o arquivo do SELinux e alterar a linha conforme abaixo:

# vim /etc/sysconfig/selinux
SELINUX=permissive

Iremos instalar agora os pacotes necessários para a compilação e funcionamento do samba:

# yum install -y epel-release vim wget man perl gcc attr libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig krb5-workstation zlib-devel setroubleshoot-server libaio-devel setroubleshoot-plugins policycoreutils-python libsemanage-python perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Test-Base popt-devel libxml2-devel libattr-devel keyutils-libs-devel cups-devel bind-utils libxslt docbook-style-xsl openldap-devel autoconf pam-devel systemd-devel

Obtendo o samba:

Utilizaremos o “wget” para baixar a última versão estável do Samba4 no site “https://www.samba.org/samba/download/”

$ cd /usr/src
$ wget "https://ftp.samba.org/pub/samba/samba-latest.tar.gz"
$ tar zxvf samba-latest.tar.gz
$ cd /usr/src/samba-4.2.3

Compilando o samba:

Utilizaremos o comando abaixo para que seja criado o makefile e seja possível compilar o samba. Nessa etapa é interessante acompanhar o resultado final, pois será informado se há necessidade de instalação de mais algum pacote. Caso tenha ocorrido tudo com sucesso o resultado final deverá ser ” ‘configure’ finished successfully (47.522s)”.

$ ./configure

Esse processo pode levar algum tempo, de acordo com o seu hardware. Iremos executar o seguinte comando para compilar o samba:

$ make

Instalando o samba:

Esse processo também pode levar algum tempo. Iremos executar o seguinte comando para instalar o samba:

# make install

Provisionando o samba:

Após a instalação, iremos criar o Active Directory.

# /usr/local/samba/bin/samba-tool domain provision
Realm [LOCAL]: CAFE.LOCAL     //Você deverá inserir o nome completo do domínio em caixa alta (FQDN);
Domain [CAFE]:     //Nome do domínio ou ENTER para escolher a opção já definida como padrão;
Server Role (dc, member, standalone) [dc]:     //Você deverá informar se será um controlador de domínio, membro ou standalone. Como iremos criar o AD DC, deveremos escolher a opção [dc] que já está como padrão;
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:     //Utilizaremos o DNS do próprio samba4 como backend, então pressionamos novamente ENTER para o padrão;
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.1.1]:     //No meu caso estou escolhendo um servidor DNS da minha rede para ser utilizado como forwarder em casos que o samba não consiga resolver os nomes;
Administrator password:     //Você deverá definir uma senha complexa para que o provisionamento do domínio seja criado com sucesso;
Retype password:     //Você deverá reinserir a senha para confirmar. Após essa etapa, se tudo estiver ocorrido bem, seu samba retornará um mensagem similar à seguir;

O resultado deverá ser parecido com o abaixo:

Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: cafecomlinux
NetBIOS Domain: CAFE
DNS Domain: cafe.local
DOMAIN SID: S-1-5-21-11342085-354663710-1608352529

Testando o samba:

Iniciaremos o Samba4 em modo standalone para realizar alguns testes. O nosso samba ainda não tem scripts de inicialização. Estarei criando um novo post, onde utilizaremos um modelo disponível no site wiki.samba.org.

# /usr/local/samba/sbin/samba

Executaremos o “smbclient” para checar se o samba criou os compartilhamentos padrões “netlogon” e “sysvol” durante o seu provisionamento.

# /usr/local/samba/bin/smbclient -L localhost -U%

Testaremos agora a autenticação no compartilhamento “netlogon” com usuário e senha criados no momento de provisionamento do samba:

# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
Domain=[CAFE] OS=[Windows 6.1] Server=[Samba 4.2.3]
. D 0 Thu Sep 3 23:40:16 2015
.. D 0 Thu Sep 3 23:40:55 2015

17971068 blocks of size 1024. 15315052 blocks available

Testando o DNS

O DNS é necessário para o funcionamento do Active Directory. Sem o DNS configurado, o Kerberos e alguns outros serviços podem não funcionar corretamente. Iremos alterar o arquivo “resolv.conf” inserindo as informações do nosso servidor DNS do samba.

# vim /etc/resolv.conf
; generated by /sbin/dhclient-script
search cafe.local     //Nome do domínio;
nameserver 192.168.1.67     //Endereço de ip do servidor samba4;

Para testar se o DNS está trabalhando direito, execute os comandos a seguir e compare a saída com o mostrado abaixo:

# host -t SRV _ldap._tcp.cafe.local
_ldap._tcp.cafe.local has SRV record 0 100 389 cafecomlinux.cafe.local.
# host -t SRV _kerberos._udp.cafe.local
_kerberos._udp.cafe.local has SRV record 0 100 88 cafecomlinux.cafe.local.
# host -t A cafecomlinux.cafe.local
cafecomlinux.cafe.local has address 192.168.1.67

Se retornar algum erro, verifique os logs.

Configurando o Kerberos:

Iremos copiar ou criar um link simbólico do arquivo de configuração gerado na criação do AD para o local padrão do arquivo de configuração no sistema.

# ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf

Agora iremos testar o Kerberos gerando um ticket com o “kinit” e “klist”.

# kinit administrator@CAFE.LOCAL
Password for administrator@CAFE.LOCAL:
Warning: Your password will expire in 41 days on Thu Oct 15 23:40:53 2015
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@CAFE.LOCAL

Valid starting Expires Service principal
09/04/15 19:36:56 09/05/15 05:36:56 krbtgt/CAFE.LOCAL@CAFE.LOCAL
renew until 09/05/15 19:36:47

Fonte:
Samba Wiki

© 2018 Blog do Vieira

Theme by Anders NorénUp ↑