O AS/400, desenvolvido pela IBM, representa um marco notável na história da computação corporativa, não apenas por sua arquitetura inovadora, mas também pela filosofia de design que o sustenta. Criado para ser uma plataforma integrada e eficiente, o AS/400 consolidou conceitos avançados que até hoje influenciam o desenvolvimento de sistemas empresariais robustos e confiáveis.

No cerne do AS/400 está sua arquitetura única, que inclui uma máquina virtual independente da tecnologia subjacente, permitindo que o sistema evolua com o tempo sem perder compatibilidade com aplicações existentes. Essa abstração possibilita que diferentes processadores, incluindo o revolucionário PowerPC RISC, sejam incorporados sem que os usuários percebam grandes mudanças, mantendo assim a estabilidade e continuidade operacional.

Outro pilar fundamental do AS/400 é sua abordagem orientada a objetos e gerenciamento de objetos. Em vez de tratar dados e processos de maneira isolada, o sistema gerencia tudo como objetos, o que simplifica a segurança, a autorização e a integridade dos dados. A integração direta de um banco de dados no sistema operacional facilita não só o desempenho, mas também a consistência das informações, eliminando camadas intermediárias que normalmente adicionam complexidade e pontos potenciais de falha.

O armazenamento de dados no AS/400 utiliza o conceito de “armazenamento em único nível” (single-level store), onde memória principal e armazenamento secundário são tratados de maneira uniforme, o que aumenta a eficiência no acesso e manipulação de dados. Isso, combinado com um gerenciamento sofisticado de processos e um sistema avançado de entrada/saída, resulta em uma plataforma que pode suportar cargas de trabalho intensas com alta confiabilidade.

A arquitetura do AS/400 também foi projetada com a computação cliente/servidor em mente, antecipando tendências que mais tarde se tornariam padrões na indústria. Isso reforça sua adaptabilidade e capacidade de integrar-se em ambientes corporativos heterogêneos, atendendo às necessidades tanto de grandes empresas quanto de desenvolvedores de aplicações.

O processo de desenvolvimento do AS/400 em Rochester destacou-se pela dedicação e criatividade de seus profissionais, que, mesmo enfrentando críticas e obstáculos, focaram na satisfação dos clientes e na inovação tecnológica. Essa cultura fez com que o sistema não apenas sobrevivesse às mudanças do mercado, mas se tornasse uma referência em design de sistemas empresariais.

Além dos aspectos técnicos, o sucesso do AS/400 está profundamente ligado ao entendimento das necessidades reais dos usuários e ao compromisso com a qualidade e evolução contínua do sistema. Isso demonstra que, apesar da sofisticação tecnológica, o foco humano e prático é essencial para criar soluções que realmente funcionem e tragam valor.

É importante reconhecer que a arquitetura do AS/400 não é fruto do acaso ou de uma simples “mágica”, mas sim o resultado de um design cuidadoso e inovador, fundamentado em princípios sólidos que combinam eficiência, segurança e flexibilidade. Para o leitor que deseja compreender o funcionamento e o impacto do AS/400, é crucial perceber como a integração entre hardware, software e processos gerenciais cria uma sinergia que diferencia essa plataforma de outras soluções computacionais da época.

Além disso, entender o AS/400 exige uma apreciação do contexto histórico e das escolhas técnicas que permitiram sua longevidade. O sistema foi projetado para evoluir, suportar novas tecnologias e continuar relevante mesmo diante de rápidas mudanças no cenário tecnológico. Isso traz à tona a importância de projetar sistemas não apenas para o presente, mas com uma visão clara para o futuro.

A partir dessa análise, fica claro que o AS/400 é um exemplo de como uma arquitetura bem pensada pode transcender limitações técnicas e temporais, servindo como base para aplicações críticas e influenciando gerações futuras de sistemas computacionais. O aprendizado para o leitor está na compreensão profunda das soluções arquiteturais adotadas, na valorização da integração sistêmica e na percepção do papel humano no desenvolvimento tecnológico.

Como o sistema operacional AS/400 equilibra desempenho, segurança e independência do hardware através do LIC

No projeto do sistema AS/400, a arquitetura do sistema operacional é cuidadosamente dividida para otimizar tanto a segurança quanto o desempenho, mantendo ao mesmo tempo a independência do hardware. Uma das principais divisões está no ponto chamado Interface de Definição da Máquina (Machine Interface, MI), que separa o software em duas camadas: acima e abaixo da MI. A MI representa um nível de abstração que protege o sistema de mudanças no hardware subjacente, proporcionando portabilidade e estabilidade.

Funções do sistema operacional que não dependem diretamente do hardware, como a segurança em sua maior parte, são implementadas acima da MI, no OS/400. Entretanto, certas partes críticas da segurança ficam abaixo da MI, no LIC (Licensed Internal Code), para garantir um nível maior de proteção. Assim, a segurança do sistema é dividida: o controle amplo e a política geral residem no OS/400, enquanto a autorização e acesso a recursos específicos do sistema são gerenciados diretamente pelo LIC, aumentando a eficácia da proteção.

Além da segurança, outras funções importantes do sistema também são divididas entre essas camadas, o que permite um equilíbrio entre abstração e desempenho. À medida que uma função se torna mais dependente do hardware, ela tende a ser movida para o LIC, abaixo da MI, para aproveitar otimizações específicas e obter maior performance. Porém, essa migração tem um custo: o código do sistema operacional fica mais acoplado ao hardware, o que pode reduzir a flexibilidade.

O LIC, portanto, funciona como uma camada crítica que integra software e hardware. Ele não apenas contém funções operacionais de baixo nível, mas também engloba microcódigo — um tipo especial de software que programa internamente o processador para executar as instruções da arquitetura da máquina. No System/38 original, havia duas camadas de microcódigo: o Horizontal Microcode (HMC), que emulava diretamente a arquitetura da máquina, e o Vertical Microcode (VMC), que continha funções independentes de hardware. Com a evolução para o AS/400 e seus processadores RISC, a estrutura foi simplificada, eliminando uma dessas camadas e consolidando o microcódigo em uma única camada chamada System Licensed Internal Code (SLIC).

Este rearranjo e renomeação refletem as mudanças tecnológicas e legais da época. Inicialmente, o kernel do sistema foi denominado microcódigo para contornar restrições comerciais relativas ao empacotamento de software e hardware, permitindo que o núcleo do sistema fosse tratado como parte do hardware. Posteriormente, com o licenciamento de software e a evolução dos processadores, o conceito de microcódigo foi atualizado para o LIC, que agora representa um componente licenciado, mas controlado pela IBM, fundamental para o funcionamento do sistema.

A complexidade do LIC é enorme, com mais de um milhão de linhas de código e uma equipe dedicada de programadores, evidenciando a importância desta camada para o desempenho, segurança e integração do AS/400. Mudanças e atualizações ao longo das várias gerações do sistema exigiram reestruturações significativas no LIC, especialmente na transição para a arquitetura RISC.

É essencial compreender que, embora o LIC esteja abaixo da MI e seja mais próximo do hardware, ele não é apenas um código de baixo nível, mas sim um componente sofisticado que equilibra múltiplos objetivos: assegurar a independência da máquina, garantir a segurança do sistema e maximizar o desempenho para a arquitetura específica.

Além do que foi exposto, o leitor deve ter em mente que o modelo do AS/400 demonstra uma abordagem que muitos sistemas modernos adotam: a divisão clara entre camadas de abstração para promover portabilidade, enquanto partes críticas, especialmente as relacionadas à segurança e desempenho, são implementadas em níveis mais baixos, próximos ao hardware. Isso cria um equilíbrio delicado entre flexibilidade e eficiência, que é uma lição importante para o design de sistemas complexos.

Adicionalmente, a evolução do LIC, de microcódigo para código licenciado, destaca a importância das questões comerciais e legais no desenvolvimento tecnológico, mostrando que aspectos extratecnológicos influenciam profundamente a arquitetura e o funcionamento dos sistemas.

Como a Estrutura de Bibliotecas do OS/400 e o Sistema de Arquivos Integrado Impactam a Gestão de Objetos e Dados

O OS/400, sistema operacional da IBM para a linha AS/400, organiza seus objetos e dados em uma hierarquia clara e estruturada. A primeira característica fundamental desse sistema é a separação entre bibliotecas e objetos. Embora seja possível ter um programa e um espaço de dados com o mesmo nome, não é permitido que dois programas possuam o mesmo nome. Cada objeto deve existir exclusivamente em uma biblioteca, e uma biblioteca, com exceção de uma, não pode referenciar outras bibliotecas, preservando assim uma hierarquia simples e de único nível entre a biblioteca e o objeto.

A exceção a essa regra é a biblioteca QSYS, que tem a capacidade única de referenciar outras bibliotecas. Essa biblioteca especial é de suma importância no OS/400, pois nela residem objetos críticos, como os perfis de usuário e objetos de configuração de entrada/saída (I/O), que são fundamentais para a segurança e o funcionamento do sistema. A configuração dessa estrutura é mostrada no exemplo da Figura 5.2, onde vemos que QSYS contém, entre outros, o perfil de usuário "JOHN", uma biblioteca chamada LIB1 e uma descrição de dispositivo DEVD1. A biblioteca LIB1, por sua vez, contém um arquivo de banco de dados DB, uma fila de dados DQ e uma fila de saída OQ.

A principal função das bibliotecas no OS/400 é organizar e fornecer acesso aos objetos de forma eficiente. A estrutura do sistema é tal que cada tarefa ou "job" no sistema possui uma lista de bibliotecas associadas, indicando a ordem em que o sistema deve procurar os objetos. Essa organização não só facilita o gerenciamento, mas também a manutenção e a segurança dos dados.

Além disso, com a crescente integração de tecnologias de PC e a evolução dos sistemas operacionais, surgiram novos desafios no AS/400, principalmente na integração do ambiente de escritório e do suporte ao uso de PCs. O conceito de "shared folders" (pastas compartilhadas) foi introduzido para fornecer uma forma estruturada de armazenamento e organização de objetos do escritório, como documentos, e-mails, programas e arquivos de PC. Essa estrutura permitiu que os usuários do AS/400 interagissem com os sistemas de PC de maneira mais eficiente, integrando não apenas os dados tradicionais de escritório, mas também permitindo que os arquivos do PC fossem acessados e manipulados como se estivessem armazenados localmente na máquina.

O "Client Access for OS/400" substituiu o antigo produto "PC Support" para suportar aplicações cliente/servidor mais modernas e garantir compatibilidade com sistemas operacionais de PC mais novos, como o Windows. Isso foi possível através da introdução de um novo sistema de arquivos integrado que unificou diferentes tipos de sistemas de arquivos: o sistema de bibliotecas do OS/400, as pastas compartilhadas para o ambiente de escritório, e sistemas de arquivos de PC e Unix. Essa unificação permitiu a interoperabilidade de dados entre diferentes plataformas e foi anunciada com o lançamento do V3R1 do OS/400.

O "Integrated File System" (IFS) foi desenvolvido para permitir que sistemas de arquivos de diferentes plataformas, como o de PCs (que utiliza a estrutura de diretórios), Unix e o sistema de bibliotecas do OS/400, coexistam dentro de uma única estrutura hierárquica. Essa abordagem facilita a integração de arquivos e objetos entre sistemas operacionais e permite que um aplicativo desenvolvido para um sistema de arquivos específico, como o de PC ou Unix, possa acessar diretamente dados armazenados no AS/400. Um dos maiores desafios enfrentados pela IBM foi encontrar uma maneira de construir esse sistema de arquivos integrado, pois os sistemas de arquivos originais não foram projetados para serem compatíveis entre si. No entanto, a solução surgiu de uma forma mais simples do que o esperado.

A nova estrutura de arquivos no OS/400, que agora combina os sistemas de arquivos de diferentes plataformas sob um único "root" ou diretório base, inclui novos sistemas de arquivos para Unix, para clientes de LAN, e para sistemas remotos. Essa solução foi aprimorada e compatível com versões mais recentes do "Client Access for OS/400". O IFS também permite o uso de convenções de nomenclatura padronizadas, compatíveis com os sistemas de arquivos de PC, como o uso de barras ("/") ou barras invertidas ("").

A estrutura de diretórios no IFS é baseada nos padrões POSIX e suporta a Unicode, uma norma internacional que permite o uso de múltiplas línguas, incluindo idiomas com caracteres de dois bytes. Isso amplia a compatibilidade do sistema com diferentes culturas e mercados, sendo um diferencial importante para empresas globais.

Além da compatibilidade entre diferentes sistemas de arquivos, o AS/400 passou a suportar novos tipos de clientes, como os clientes Windows e LAN, que agora podem acessar e interagir com os dados armazenados no IFS de maneira eficiente e sem a necessidade de conversões manuais. No entanto, a estrutura original de pastas compartilhadas e bibliotecas ainda permanece, permitindo a retrocompatibilidade com os clientes legados, como os antigos PCs que utilizavam o QDLS (Document Library Services).

Ao longo da evolução do OS/400, a integração de novas tecnologias e a necessidade de suportar um número crescente de sistemas e dispositivos levaram à criação de soluções mais robustas e flexíveis. O IFS foi um passo importante nessa direção, pois unificou a gestão de arquivos e dados, permitindo que o AS/400 se integrasse de maneira mais eficiente ao mundo externo, mantendo sua confiabilidade e desempenho em um ambiente corporativo.

Como são representados os objetos do sistema na arquitetura MI do AS/400?

No Modelo de Interface (MI) do AS/400, o termo “objeto” será utilizado exclusivamente para se referir aos objetos do sistema gerenciados abaixo do MI, evitando assim confusões com objetos de tipo "programa" ou entidades similares em níveis mais altos. Apesar de o MI não possuir uma noção explícita de memória, todos os processadores AS/400 utilizam armazenamento físico, tanto em memória principal quanto em disco. Os objetos do sistema, nesse contexto, são implementados como estruturas de dados bem definidas dentro desse armazenamento físico. A responsabilidade de criar e gerenciar essas estruturas pertence ao componente de gerenciamento de objetos do SLIC (System Licensed Internal Code).

O conceito de memória no AS/400, abaixo do MI, é diferente daquele encontrado em sistemas operacionais convencionais. A totalidade da memória principal e do espaço em disco é tratada como um único espaço de endereçamento, conhecido como "single-level store". Esse espaço lógico é acessível via endereços de 64 bits, permitindo uma representação contínua e unificada de todo o armazenamento disponível, independentemente de sua localização física. Embora seja difícil relacionar o volume de endereçamento de 64 bits a qualquer medida física intuitiva, a analogia com a distância da Terra ao Sol ajuda a ilustrar sua vastidão.

Dentro desse "single-level store", o espaço de endereçamento é logicamente dividido em segmentos, que são blocos contíguos de bytes. Inicialmente, o AS/400 utilizava segmentos de 64 kilobytes e de 16 megabytes, sendo este último composto por 256 dos primeiros. Com a transição para endereçamento de 64 bits, o sistema adotou apenas segmentos de 16 megabytes, eliminando os menores. Cada segmento começa obrigatoriamente em um limite de segmento, o que significa que os 24 bits menos significativos do endereço são sempre zeros. Assim, cada segmento é identificado unicamente pelos 40 bits mais significativos do endereço.

A correspondência entre os endereços lógicos e a memória física é feita por meio do componente de gerenciamento de armazenamento do SLIC, que organiza o espaço físico em páginas de 4 kilobytes. Um segmento é composto por múltiplas dessas páginas, que não precisam estar contiguamente alocadas na memória física. Essa abstração permite que os objetos do sistema se estendam logicamente sem se preocupar com a fragmentação física do armazenamento.

A estrutura de um objeto do sistema é padronizada. Cada objeto começa com um cabeçalho de segmento de 32 bytes, seguido pelo cabeçalho da arquitetura de programa encapsulado (EPA – Encapsulated Program Architecture), uma herança direta da arquitetura do System/38. Esse cabeçalho EPA define os atributos comuns a todos os objetos do sistema, independentemente de seu tipo. Juntos, o cabeçalho de segmento e o EPA ocupam os primeiros 256 bytes de qualquer objeto.

Logo após, vem o cabeçalho personalizado, que contém os atributos específicos daquele tipo de objeto. Por exemplo, objetos do tipo programa possuem propriedades que não se aplicam a espaços de dados, e vice-versa. Os componentes que compõem o objeto propriamente dito aparecem em seguida e são dependentes do tipo de objeto. Todos os objetos do sistema contêm uma parte chamada "espaço associado", que funciona como uma área de trabalho para o sistema operacional OS/400. Esse espaço é sempre incluído e representa, no nível MI, o componente de espaço do objeto.

Um objeto do sistema pode ocupar um ou mais segmentos, mas sempre começa em um limite de segmento. O primeiro segmento é denominado "segmento base", e todos os objetos possuem um. Um ponteiro do sistema sempre aponta para esse segmento base. Objetos mais complexos podem incluir segmentos secundários, como por exemplo o espaço associado, que geralmente reside em um desses segmentos. Importante notar que nenhum segmento pertence a mais de um objeto.

Cada segmento possui seu próprio cabeçalho de segmento, que contém informações relativas ao próprio segmento, e não ao objeto como um todo. Além disso, é nesse cabeçalho que residem os endereços que interligam os vários segmentos de um objeto multissegmentado. Os cabeçalhos EPA e personalizados aparecem exclusivamente no segmento base, pois descrevem o objeto de forma global.

A criação de objetos é realizada por meio de instruções MI do tipo CREATE xxx, onde “xxx” representa o tipo de objeto a ser criado. Essa operação é distinta dos comandos de criação do OS/400 (como CRTRPGPGM), que passam por várias fases antes de efetivar a instrução MI CREATE. Durante a execução dessa instrução, o sistema aloca os segmentos necessários no single-level store e atualiza os diretórios internos do SLIC para refletir a existência do novo objeto.

Além disso, o gerenciamento de armazenamento precisa registrar o novo objeto em seus diretórios próprios, e, se esse objeto for atribuído a uma biblioteca, a biblioteca precisa ser atualizada com o nome e localização do objeto. Caso nenhuma biblioteca seja especificada, o objeto é automaticamente colocado na biblioteca corrente do trabalho que executou a instrução CREATE, conforme definido na lista de bibliotecas associada ao trabalho.

Embora o MI abstraia a noção de memória, o entendimento da forma como os objetos são representados e organizados no nível SLIC é fundamental para compreender a robustez e integridade do modelo do AS/400. Essa arquitetura garante isolamento, integridade e um modelo uniforme de gerenciamento de armazenamento, que continua sendo um diferencial técnico em relação a sistemas mais tradicionais, mesmo décadas após sua concepção.

Importante ainda entender que, nesse modelo, cada tipo de objeto é rigidamente definido, e sua estrutura interna é determinada não em tempo de execução, mas na própria concepção do sistema. A presença de um modelo uniforme de armazenamento, em que tudo — programas, dados, bibliotecas — é tratado como objeto dentro de um único espaço endereçável, reforça a coerência, segurança e previsibilidade do sistema. Essa uniformidade é a base da abstração MI e uma das razões pelas quais o AS/400 (hoje IBM i) se mantém como uma plataforma altamente confiável e escalável em ambientes corporativos críticos.

Quais são os níveis de segurança do AS/400 e como eles são aplicados?

A segurança no AS/400 é projetada para atender a uma ampla gama de necessidades empresariais, desde sistemas sem nenhuma proteção até aqueles com segurança certificada por órgãos governamentais. Esta flexibilidade é alcançada por meio de valores do sistema que permitem configurar cinco níveis de segurança, cada um com suas próprias características e restrições. O núcleo da implementação de segurança do AS/400 se encontra no sistema operacional OS/400, com alguns componentes de segurança operando acima e outros abaixo do MI (Machine Interface), sendo essa estrutura fundamental para entender a segurança do sistema.

A segurança do AS/400 é dividida em várias camadas, e os mecanismos podem ser encontrados tanto acima do MI, no próprio OS/400, quanto abaixo, no SLIC (System Layer Interface). Entre esses mecanismos estão a definição de valores de segurança do sistema, como o QSECURITY, que determina o nível de segurança, e a autorização de objetos, que ocorre abaixo do MI. Além disso, há o suporte a instruções privilegiadas e autoridade especial, que opera parcialmente abaixo e acima do MI.

Os níveis de segurança do AS/400 são definidos por valores específicos e incluem configurações como a função de auditoria de segurança, que permite registrar certos eventos de segurança no sistema. Quando configurado, o AS/400 pode registrar falhas de autorização, exclusões de objetos, identificações de programas que utilizam instruções restritas, entre outros eventos de segurança, possibilitando que o auditor de segurança do sistema analise e monitore qualquer comportamento suspeito ou irregular.

O valor QSECURITY, um dos principais elementos de configuração de segurança, permite que o sistema seja configurado para diferentes níveis de segurança, com cinco opções disponíveis: 10, 20, 30, 40 e 50. A partir do V1R3 do OS/400, foram introduzidos novos níveis, até chegar ao nível 50. Cada um desses níveis oferece diferentes graus de proteção e controle sobre os recursos e dados do sistema.

Nível 10 — Nenhuma Segurança

O Nível 10 é o nível de segurança mais baixo disponível, representando um sistema completamente sem segurança. Não é necessário nenhuma senha para acessar o sistema, e todos os usuários têm acesso irrestrito a todos os recursos do sistema. Embora o acesso não seja restrito, os usuários não podem interferir nos trabalhos de outros usuários. Este nível é o padrão e deve ser alterado caso um nível mais alto de segurança seja desejado. É ideal para ambientes onde apenas a segurança física, como uma trava na porta do data center, é necessária. Neste nível, qualquer usuário pode fazer login e usar o sistema, e se um perfil de usuário não existir, ele será automaticamente criado ao especificar o nível de segurança 10.

Nível 20 — Segurança por Senha

O Nível 20 exige que o usuário esteja cadastrado no sistema e insira uma senha válida para acessar o sistema. Após o login, não há restrições para o uso de recursos do sistema, o que torna este nível similar ao Nível 10, mas com a adição de uma senha para o acesso inicial. Mesmo assim, o sistema é considerado de baixo risco, pois não há restrições significativas após o login. Uma funcionalidade adicional desse nível permite que os usuários sejam configurados como "usuários de capacidade limitada", o que restringe as suas ações no sistema. Um exemplo disso seria um grupo de usuários responsáveis por realizar pedidos, sendo que apenas os comandos relacionados à execução dessa função estariam disponíveis para eles.

Nível 30 — Segurança de Recursos

Quando é necessário um controle mais rigoroso sobre os recursos do sistema, o Nível 30 oferece a segurança adequada. Assim como no Nível 20, o usuário deve estar cadastrado e usar uma senha válida para acessar o sistema. A diferença é que, no Nível 30, a segurança é aplicada aos recursos do sistema, garantindo que apenas usuários autorizados possam acessar objetos específicos do sistema, como arquivos, programas e dispositivos. Além disso, é possível restringir o acesso a comandos do sistema por meio de perfis de usuário. Este nível foi o mais alto de segurança no System/38 e manteve-se no início do AS/400, com algumas melhorias subsequentes.

Nível 40 e Nível 50 — Segurança Certificada

Com o tempo, à medida que o AS/400 evoluiu, surgiram novos níveis de segurança, que foram adicionados para atender a necessidades mais avançadas. A partir do V1R3 do OS/400, o Nível 40 foi introduzido, seguido pelo Nível 50, que oferece uma segurança altamente robusta, adequada para ambientes onde a conformidade com normas governamentais ou de indústrias específicas é necessária. Esses níveis mais altos bloqueiam o acesso a objetos internos do sistema e exigem o uso de APIs padrão para interagir com esses dados de forma controlada e segura, evitando que softwares independentes do sistema possam acessar informações sensíveis de maneira indevida.

Os Níveis 40 e 50 são especialmente importantes para empresas que lidam com informações sensíveis ou que operam em setores que exigem altos padrões de segurança, como o setor financeiro ou governamental. Nesses níveis, a segurança se estende a todas as operações do sistema, tornando quase impossível para usuários não autorizados obterem acesso a dados internos ou executarem comandos não permitidos.

Considerações Finais sobre a Implementação da Segurança no AS/400

A implementação de segurança no AS/400 deve ser cuidadosamente planejada, considerando os requisitos específicos de cada organização. A escolha do nível de segurança adequado depende do tipo de dados que a empresa lida e da necessidade de proteger esses dados contra acessos não autorizados. Além disso, a configuração correta de valores como QAUDJRL, QMAXSIGN e QSECURITY é crucial para garantir que o sistema opere de maneira eficiente e segura, especialmente em ambientes que exigem monitoramento e auditoria constantes.

Um dos maiores desafios ao configurar a segurança no AS/400 é equilibrar a necessidade de proteção com a flexibilidade operacional. Em alguns casos, a implementação de segurança excessiva pode dificultar o trabalho dos usuários ou interferir em processos legítimos. Por outro lado, uma configuração de segurança insuficiente pode expor o sistema a riscos e ataques. Portanto, é essencial que a segurança seja configurada de acordo com o ambiente específico, garantindo que o sistema permaneça seguro, mas funcional.