Oracle Database 12cR2 (12.2.0) ACFS Segurança e Encriptação

Por Y V Ravi KumarGavin Soorma Rodrigo Mufalani
Publicado em Outubro 2018
Revisado por Francisco Riccio

Introdução

Oracle Automatic Storage Management Cluster File System (ACFS) estende a funcionalidade do ASM para suportar não apenas Oracle Database files como executables, database data files, trace files, alert log files para citar alguns, mas também arquivos de clientes como textos, vídeos, áudios e arquivos de imagem.

Introdução

Oracle ACFS security fornece políticas refinadas para usuários e groups para acesso aos filesystems e diretórios aplicadas através de domínios de segurança, bem como a funcionalidade de encriptação para proteger o conteúdo de arquivos protegidos por domínio armazenados em um sistema de arquivos ACFS.

No nível mais alto, os seguintes passos precisam ser realizados para habilitar a segunça e a encriptação para um filesystem ACFS:

  • Criar diskgroups ASM
  • Criar volumes ADVM (ASM Dynamic Volume Manager)
  • Criar o filesystem ACFS
  • Inicializar a segurança para o filesystem ACFS
  • Opcionalmente inicializar a encriptação para o filesystem ACFS
  • Preparar o filesystem ACFS para segurança
  • Opicionalmente habilitar encriptação para o filesystem ACFS
  • Criar um ou mais domínios de segurança para o filesystem
  • Criar regras de segurança
  • Criar conjuntos de regras de segurança
  • Assinalar as regras de segurança aos conjuntos de regras de segurança
  • Adicionar objetos aos domínios de segurança
  • Fazer backup dos metadados de segurança do filesystem

Alguns dos passos acima listados podem ser feitos usando GUI Oracle 12c Release 2 ASM Configuration Assistant (ASMCA), enquanto alguns restantes serão realizados via linha de comando usando acfsutil, especificament os “sec commands”.

Iniciar ASMCA desde el home de Oracle 12c Release 2 Grid Infrastructure

5. Criar o ASM diskgroup – DATA

Clique em Create…

Clique em OK

Crie o Volume ADVM

Clique em Create …

Clique em OK...

Inicialize a segurança para o filesystem ACFS

Nós devemos inicializar a segurança do filesystem como o primeiro passo antes de configurar um filesystem ACFS.

Selecione Security and Encryption…

Um usuário pre-existente do Sistema operacional é designado a ser o administrador de segurança inicial do ACFS e também especificamos o grupo de administradores de segurança.

Se for requerido, o administrador do ACFS pode criar administradores de segurança adicionais.

Opcionalmente, a encriptação do filesystem ACFS também é inicializada com a segurança marcando o box "Configure Encryption" e as senhas dos domínios de segurança são armazenadas em uma wallet, que será criada durante o processo de inicialização de segurança.

Será necessário especificar uma senha para o administrador de segurança, um por vez com o comando acfsutil sec.

Clique em Show Command

Como usuário root, execute o comando acfsutil sec init para configurar e armazenar as credenciais de segurança em uma wallet e também identificar um usuário de sistema operacional que será o primeiro administrador de segurança. Isso em que ser executado uma única vez para o cluster inteiro e pode ser executado de qualquer node no cluster.

Crear el File System ACFS

Selecione o mount point que será usado para montar o filesystem ACFS

Clique em Show Command

Clique em Ok

Como root, execute o script gerado acfs_script.sh.

Note que o filesystem ACFS agora está montado em ambos os nodes do cluster.

Nós podemos verificar que a operação de montagem do mount point foi realizada com sucesso utilizando o comando df no sistema operacional.

Prepare o filesystem ACFS para segurança

Isso precisa ser feito antes de executar qualquer comando relacionado aos comandos de gerenciamento do domínio de segurança.

Note que o usuário root não é designado como administrador de segurança e não é possível rodar nenhum comando “acfsutil sec” – somente o administrador de segurança, que foi inicializado anteriormente, quem pode rodar estes comandos.

Este comando cria três domínios de segurança

SYSTEM_logs – este domínio é para proteger a segurança do ACFS relacionado aos log files armazenados no diretório /mount_point/.Security/realm/logs.

SYSTEM_SecurityMetaData – este domino de segurança protegre os arquivos de metadados XML Oracle ACFS armazenados no diretório /mount_point/.Security/backup/.

SYSTEM_BackupOperators- este domínio de segurança nos habilita a autorizar usuários que podem backupear arquivos do dominio de segurança e seus diretórios

Habilitar a encriptação do file system ACFS

Depois que a segurança foi inicializada, você pode habilitar a encriptação. Você deve iniciar o Sistema de encriptação como primeiro passo para encriptar um filesystem Oracle ACFS.

Nota – Nós devemos rodar este comando primeiro como root para inicializar a encriptação do filesystem ACFS.



# /sbin/acfsutil encr init
	 

Nós podemos habilitar encriptação para diretórios e arquivos pelo acfsutil que pode ser executado ou pleo root ou pelo administrador de segurança. Neste exemplo, nós estamos habilitando a encriptação recursivament em todos os arquivos no diretório /confidential/topsecret.



/sbin/acfsutil encr on -r /confidential/topsecret -m /confidential

	 

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar um domínio de segurança

Execute o comando acfsutil sec realm create para criar um domínio de segurança para o filesystem /confidential.

Note que nós estamos habilitando a encriptação para o filesystem /confidential .



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm create myrealm1 -m /confidential -e 
on -a  AES -k 128
ACFS Security administrator password:

Criar regras de segurança

Criar uma regra de segurança que irá negar acesso ao usuário de sistema operacional 'gavin'.



[oracle@host02 topsecret]$ /sbin/acfsutil sec rule  create myrule1 -m /confidential -t 
username gavin -o DENY

ACFS Security administrator password:

Criar conjuntos de regras de segurança

Criar um conjunto de regras de segurança e uma regra existe a um conjunto de regras.



[oracle@host02 topsecret]$ /sbin/acfsutil sec ruleset create myruleset1 -m /confidential
ACFS Security administrator password:
  
[oracle@host02 topsecret]$ /sbin/acfsutil sec ruleset edit myruleset1 -m /confidential 
-a myrule1
ACFS Security administrator password:

Adicionar objetos ao domínio de segurança

Execute o comando acfsutil sec realm add para adicionar objetos, assim como o comando de regras, conjunto de regras e usuários do domínio de segurança.

Enquanto adicionamos um conjunto de regras a um domínio de segurança, nós podemos especificar o comando de regra associado ao conjunto de regras.

Em nosso exemplo, nós criamos a regra uma opção de negar (DENY). O comando ALL significar todas as operações nos arquivos e diretórios em um ACFS filesystem com segurança habilitada, será negado ao usuário de sistema operacional gavin.



[oracle@host02 topsecret]$ /sbin/acfsutil sec realm add myrealm1 -m /confidential -l 
ALL:myruleset1 -f -r /confidential/topsecret
ACFS Security administrator password:

Execute o comando acfsutil sec info para mostrar informação de um domínio de segurança.



[oracle@host02 topsecret]$ /sbin/acfsutil sec info -m /confidential -n myrealm1
ACFS Security administrator password:

Realm status: ENABLED

Users present in realm 'myrealm1' are as follows : 
Groups present in realm 'myrealm1' are as follows : 
Filters present in realm 'myrealm1' are as follows : 
        ALL : myruleset1

Encryption status : ON 
Encryption algorithm : AES 
Encryption key length : 128 

Realm description : ''

Nota – Mesmo o usuário root não pode executar qualquer comando acfsutil sec. Todos os commandos precisam ser executados pelo administrador de segurança designado.



[root@host02 topsecret]# /sbin/acfsutil sec info -m /confidential
acfsutil sec info: ACFS-10662: Current user 'root' does not have security 
administrator privileges.
acfsutil sec info: ACFS-10606: User 'root' is not a security administrator.

Testando a segurança e a ecriptação do ACFS

Nós agora estamos conectados com o usuário de sistema operacional gavin e vamos tentar acessar qualquer arquivo que está armazenado em um filesystem ACFS com segurança habilitada /confidential/topsecret.



[gavin@host02 ~]$ cd /confidential/topsecret/
[gavin@host02 topsecret]$ ls -l
ls: cannot open directory .: Permission denied

[gavin@host02 topsecret]$ cd ..

Porém , o mesmo usuário consegue acessar o diretório superior /confidential.



[gavin@host02 confidential]$ ls -l
total 116
drwx------. 2 root   root 65536 May  4 11:30 lost+found
drwxr-xr-x. 2 oracle dba  20480 May  4 13:02 topsecret

Mesmo o root não tem acesso ao diretório /confidential/topsecret.



[root@host02 topsecret]# pwd
/confidential/topsecret

[root@host02 topsecret]# ls -l
ls: cannot open directory .: Permission denied

Nós podemos usar o comando acfsutil encr info para visualizar as configurações de encriptação no nivel de diretório assim como para arquivos individuais localizados naquele diretório.



[oracle@host02 topsecret]$ /sbin/acfsutil encr info -m /confidential -r 
/confidential/topsecret
Path: /confidential/topsecret
        Encryption status: ON
        Algorithm: AES 128-bits
        Key length: 16 bytes
Path: /confidential/topsecret/secret1.txt
        Encryption status: ON
        Algorithm: AES 128-bits
        Key length: 16 bytes

Próximo, edite a regra de segurança myrule1 e mude de DENY para ALLOW para o usuário de sistema operacional gavin.



[oracle@host02 ~]$ acfsutil sec rule edit myrule1 -m /confidential -t 
username gavin -o ALLOW
ACFS Security administrator password:

Conecte-se novamente com o usuário de Sistema operacional gavin e agora note que Podemos visualizar o conteúdo não somente do filesystem ACFS /confidential/topsecret mas também do arquivo secret1.txt localizado neste diretório. Anteriormente isso não era possível, mas agora a regra de segurança basicamente ALLOW juntamente com a regra do comando ALL que dá ao usuário gavin permissões completas ao filesystem ACFS seguro.



[root@host02 trace]# su – gavin
[gavin@host02 ~]$ cd /confidential/topsecret/
[gavin@host02 topsecret]$ ls -l
total 4
-rw-r--r--. 1 oracle dba 13 May  4 13:06 secret1.txt

[gavin@host02 topsecret]$ vi secret1.txt 
[gavin@host02 topsecret]$ cat secret1.txt 
TOP SECRET!!

Vamos agora mudar a regra de comando de ALL para READ para o conjunto de regras myruleset1.



[oracle@host02 ~]$ acfsutil sec realm add myrealm1 -m /confidential -l 
READ:myruleset1
ACFS Security administrator password:
[oracle@host02 ~]$ exit

Verifique os usuários que fazem parte do domínio de segurança e os filtros presentes para um particular conjunto de regras que é parte do mesmo domínio de segurança.




Users present in realm 'myrealm1' are as follows : 
        root
        oracle
        gavin

Groups present in realm 'myrealm1' are as follows : 

Filters present in realm 'myrealm1' are as follows : 
        READ : myruleset1

Encryption status : ON 
Encryption algorithm : AES 
Encryption key length : 128 

Novamente, reconecte-se com o usuário de Sistema operacional gavin e agora note que enquanto o usuário pode ler o conteúdo do arquivo secret1.txt, ele não pode realizar qualquer outra operação como renomear, editar o arquivo ou mesmo criar um novo arquivo no diretório.



[root@host02 bin]# su - gavin
[gavin@host02 ~]$ cd /confidential/topsecret/
[gavin@host02 topsecret]$ cat secret1.txt 
TOP SECRET!!
[gavin@host02 topsecret]$ mv secret1.txt secretnew.txt
mv: cannot move `secret1.txt' to `secretnew.txt': Permission denied

[gavin@host02 topsecret]$ touch xyz
touch: cannot touch `xyz': Permission denied

O que acontece se tentarmos copiar este arquivo seguro e encriptado para um outro servidor usando o comando scp?



[oracle@host02 topsecret]$ scp -rp secret1.txt oracle@host01:/home/oracle
secret1.txt                                     0%    0     0.0KB/s   --:-- ETA
secret1.txt: Permission denied

Se nós criarmos um arquivo no diretório superior /confidential, Podemos ver que é permitido copiar para um outro servidor.



[oracle@host02 topsecret]$ cd ..

[oracle@host02 confidential]$ echo "TOP SECRET" > not_a_secret_file.txt
[oracle@host02 confidential]$ scp -rp not_a_secret_file.txt oracle@host01:/home/oracle
not_a_secret_file.txt                         100%   11     0.0KB/s   00:00

Resumo Oracle ACFS fornece segurança baseada em domínios para um filesystem Oracle ACFS, e fornece um refinado controle de acesso em cima do controle de acesso fornecido pelo sistema operacional. A encriptação do Oracle ACFS habilita aos usuários a criptografar os dados armazenados no disco, e isso protege os dados em um filesystem ACFSe previne acessos não-autorizados aos dados em caso de perda ou roubo.

Y V Ravi Kumar é um Oracle ACE Director e Oracle Certified Master (OCM) com 18 anos de experiência em instituições financeiras, serviços financeiros e seguros (BFSI) e atuou em diversos papeis como Senior Database Architect e Production DBA. Ele também é OCP em Oracle 8i, 9i, 10g, 11g & 12c e Certificado em Golden Gate, RAC, Performance Tuning& Oracle Exadata. Ele continua motivando muitos DBAs e ajudando a Oracle Community publicando suas dicas /ideias/sugestões/soluções em seu blog. Ele escreveu 40+ artigos OTN sobre Oracle Exadata, Oracle RAC e Oracle GoldenGate para a OTN em Espanhol, OTN em Português e OTN em inglês e 19 artigos para a TOAD World, 2 Artigos para o UKOUG, 3 Artigos para OTech Magazine e 2 Artigos para a Redgate. Ele é membro do AllIndia Oracle UserGroup (AIOUG) e frequente Oracle speaker in @NYOUG, @OTN, AIOUG, Sangam e IOUG. Ele desenha, projeta e implementa Core Banking System (CBS) Databases para o Central Banks em dois países – India e Mahe, Seychelles. Ele é Co-Founder do OraWorld (www.oraworld.com). Leia mais sobre o seu perfil na LaserSoft.

Rodrigo Mufalani é um Oracle ACE e Oracle Certified Master (OCM), com mais de 14 anos de experiência, começou com o Oracle 8i, OCP DBA nas versões 10g, 11g e 12c além de Oracle Certified Specialist em RAC e Exadata. Seu foco principal é Performance & Tuning e RAC. É palestrante regular em Oracle User Groups como: OTN LAD TOUR. Atualmente trabalha na eProseed (Luxemburgo). Twitter @mufalani/ blog www.mufalani.com.br/blog

Gavin Soorma é um Oracle ACE Director, Oracle Certified Master (10g,11g and 12c), Oracle Certified Specialist (GoldenGate, Exadata 11g, Exadata Database Machine 2014) and Oracle OCP (8i to 12c).

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.