dezembro 21, 2025
14 min de leitura

Perguntas para Entrevista de Administrador de Sistemas Sênior: Guia Completo

interview
career-advice
job-search
Perguntas para Entrevista de Administrador de Sistemas Sênior: Guia Completo
MB

Milad Bonakdar

Autor

Domine conceitos avançados de administração de sistemas com perguntas abrangentes para entrevistas, cobrindo virtualização, automação, recuperação de desastres, segurança e infraestrutura de TI empresarial para cargos de sysadmin sênior.


Introdução

Administradores de Sistemas Seniores projetam, implementam e gerenciam infraestruturas de TI complexas, lideram equipes e garantem a confiabilidade e segurança em nível empresarial. Essa função exige profundo conhecimento técnico, habilidades de automação e pensamento estratégico.

Este guia aborda questões essenciais para entrevistas de administradores de sistemas seniores, focando em conceitos avançados e soluções empresariais.


Virtualização & Nuvem

1. Explique a diferença entre hipervisores Tipo 1 e Tipo 2.

Resposta:

Tipo 1 (Bare Metal):

  • Executa diretamente no hardware
  • Melhor desempenho
  • Exemplos: VMware ESXi, Hyper-V, KVM

Tipo 2 (Hospedado):

  • Executa em um SO host
  • Mais fácil de configurar
  • Exemplos: VMware Workstation, VirtualBox
Loading diagram...

Gerenciamento KVM:

# Listar VMs
virsh list --all

# Iniciar VM
virsh start vm-name

# Criar VM a partir de XML
virsh define vm-config.xml

# Clonar VM
virt-clone --original vm1 --name vm2 --auto-clone

# Alocação de recursos da VM
virsh setmem vm-name 4G
virsh setvcpus vm-name 4

Raridade: Comum Dificuldade: Média


2. Como você projeta clusters de alta disponibilidade?

Resposta: Alta Disponibilidade (HA) garante que os serviços permaneçam acessíveis apesar de falhas.

Tipos de Cluster:

Loading diagram...

Cluster Ativo-Passivo:

  • Um nó ativo, outros em standby
  • Failover automático em caso de falha
  • Menor utilização de recursos

Cluster Ativo-Ativo:

  • Todos os nós atendem o tráfego
  • Melhor utilização de recursos
  • Configuração mais complexa

Configuração Pacemaker + Corosync:

# Instalar o software do cluster
sudo apt install pacemaker corosync pcs

# Configurar a autenticação do cluster
sudo passwd hacluster
sudo pcs cluster auth node1 node2 -u hacluster

# Criar o cluster
sudo pcs cluster setup --name mycluster node1 node2

# Iniciar o cluster
sudo pcs cluster start --all
sudo pcs cluster enable --all

# Desativar STONITH para testes (ativar em produção)
sudo pcs property set stonith-enabled=false

# Criar recurso de IP virtual
sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 \
    ip=192.168.1.100 cidr_netmask=24 \
    op monitor interval=30s

# Criar recurso de serviço web
sudo pcs resource create webserver ocf:heartbeat:apache \
    configfile=/etc/apache2/apache2.conf \
    statusurl="http://localhost/server-status" \
    op monitor interval=1min

# Agrupar os recursos
sudo pcs resource group add webgroup virtual_ip webserver

# Definir restrições de recursos
sudo pcs constraint colocation add webserver with virtual_ip INFINITY
sudo pcs constraint order virtual_ip then webserver

# Verificar o status do cluster
sudo pcs status
sudo crm_mon -1

Keepalived (HA Simples):

# Instalar o keepalived
sudo apt install keepalived

# Configurar no Master
sudo vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    
    authentication {
        auth_type PASS
        auth_pass secret123
    }
    
    virtual_ipaddress {
        192.168.1.100/24
    }
    
    track_script {
        chk_nginx
    }
}

vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"
    interval 2
    weight 2
}

Replicação de Banco de Dados (MySQL):

# Configuração do Master
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = production

# Criar usuário de replicação
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

# Obter o status do master
SHOW MASTER STATUS;

# Configuração do Slave
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin
log_bin = /var/log/mysql/mysql-bin.log
read_only = 1

# Configurar o slave
CHANGE MASTER TO
    MASTER_HOST='master-ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=107;

START SLAVE;
SHOW SLAVE STATUS\G

Verificações de Saúde:

#!/bin/bash
# Script de verificação de saúde do serviço

check_service() {
    if systemctl is-active --quiet $1; then
        return 0
    else
        return 1
    fi
}

if ! check_service nginx; then
    echo "Nginx down, attempting restart"
    systemctl restart nginx
    sleep 5
    if ! check_service nginx; then
        echo "Nginx failed to restart, triggering failover"
        # Acionar failover
        pcs resource move webgroup node2
    fi
fi

Testando o Failover:

# Simular falha do nó
sudo pcs cluster stop node1

# Verificar o failover
sudo pcs status
ping 192.168.1.100

# Restaurar o nó
sudo pcs cluster start node1

Raridade: Comum Dificuldade: Difícil


Automação & Scripting

3. Como você automatiza tarefas de administração de sistemas?

Resposta: A automação reduz o esforço repetitivo e melhora a consistência:

Scripting em Bash:

#!/bin/bash
# Verificação automatizada de saúde do servidor

HOSTNAME=$(hostname)
DATE=$(date '+%Y-%m-%d %H:%M:%S')
REPORT="/var/log/health-check.log"

echo "=== Health Check: $DATE ===" >> $REPORT

# Carga da CPU
LOAD=$(uptime | awk -F'load average:' '{print $2}')
echo "Load Average: $LOAD" >> $REPORT

# Uso de memória
MEM=$(free -h | grep Mem | awk '{print "Used: "$3" / "$2}')
echo "Memory: $MEM" >> $REPORT

# Uso de disco
echo "Disk Usage:" >> $REPORT
df -h | grep -vE '^Filesystem|tmpfs|cdrom' >> $REPORT

# Serviços com falha
FAILED=$(systemctl --failed --no-pager)
if [ -n "$FAILED" ]; then
    echo "Failed Services:" >> $REPORT
    echo "$FAILED" >> $REPORT
fi

# Enviar alerta se crítico
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 90 ]; then
    echo "CRITICAL: Disk usage above 90%" | mail -s "Alert: $HOSTNAME" [email protected]
fi

Playbook Ansible:

---
- name: Configure web servers
  hosts: webservers
  become: yes
  tasks:
    - name: Install packages
      apt:
        name:
          - nginx
          - python3
          - git
        state: present
        update_cache: yes
    
    - name: Copy nginx config
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: restart nginx
    
    - name: Ensure nginx is running
      service:
        name: nginx
        state: started
        enabled: yes
  
  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted

Raridade: Muito Comum Dificuldade: Média-Difícil


4. Como você gerencia a configuração em centenas de servidores?

Resposta: O gerenciamento de configuração em escala requer automação e consistência.

Comparação de Ferramentas:

FerramentaTipoLinguagemAgenteComplexidade
AnsiblePushYAMLSem AgenteBaixa
PuppetPullRuby DSLAgenteAlta
ChefPullRubyAgenteAlta
SaltStackPush/PullYAMLAgente/Sem AgenteMédia

Ansible em Escala:

# inventory/production
[webservers]
web[01:20].company.com

[databases]
db[01:05].company.com

[loadbalancers]
lb[01:02].company.com

[webservers: vars]
ansible_user=deploy
ansible_become=yes
# playbooks/site.yml
---
- name: Configure all servers
  hosts: all
  roles:
    - common
    - security
    - monitoring

- name: Configure web servers
  hosts: webservers
  roles:
    - nginx
    - php
    - application
  
- name: Configure databases
  hosts: databases
  roles:
    - mysql
    - backup
# roles/common/tasks/main.yml
---
- name: Update all packages
  apt:
    upgrade: dist
    update_cache: yes
    cache_valid_time: 3600

- name: Install common packages
  apt:
    name:
      - vim
      - htop
      - curl
      - git
    state: present

- name: Configure NTP
  template:
    src: ntp.conf.j2
    dest: /etc/ntp.conf
  notify: restart ntp

- name: Ensure services are running
  service:
    name: "{{ item }}"
    state: started
    enabled: yes
  loop:
    - ntp
    - rsyslog

Inventário Dinâmico:

#!/usr/bin/env python3
# dynamic_inventory.py - Inventário dinâmico AWS EC2

import json
import boto3

def get_inventory():
    ec2 = boto3.client('ec2')
    response = ec2.describe_instances()
    
    inventory = {
        '_meta': {'hostvars': {}},
        'all': {'hosts': []}
    }
    
    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            if instance['State']['Name'] != 'running':
                continue
            
            hostname = instance['PrivateIpAddress']
            inventory['all']['hosts'].append(hostname)
            
            # Agrupar por tags
            for tag in instance.get('Tags', []):
                if tag['Key'] == 'Role':
                    role = tag['Value']
                    if role not in inventory:
                        inventory[role] = {'hosts': []}
                    inventory[role]['hosts'].append(hostname)
    
    return inventory

if __name__ == '__main__':
    print(json.dumps(get_inventory(), indent=2))

Melhores Práticas de Infraestrutura como Código:

1. Controle de Versão:

# Workflow Git
git checkout -b feature/update-nginx-config
# Fazer alterações
git add .
git commit -m "Update nginx SSL configuration"
git push origin feature/update-nginx-config
# Criar pull request para revisão

2. Testes:

# Testar a sintaxe do playbook
ansible-playbook --syntax-check site.yml

# Dry run
ansible-playbook site.yml --check

# Executar no ambiente de staging primeiro
ansible-playbook -i inventory/staging site.yml

# Implantar em produção
ansible-playbook -i inventory/production site.yml

3. Gerenciamento de Segredos:

# Ansible Vault
ansible-vault create secrets.yml
ansible-vault encrypt vars/passwords.yml
ansible-playbook site.yml --ask-vault-pass

# Ou usar arquivo de senha
ansible-playbook site.yml --vault-password-file ~/.vault_pass

4. Idempotência:

# Ruim - não é idempotente
- name: Add line to file
  shell: echo "config=value" >> /etc/app.conf

# Bom - idempotente
- name: Ensure config line exists
  lineinfile:
    path: /etc/app.conf
    line: "config=value"
    state: present

Execução Paralela:

# Executar em 10 hosts por vez
ansible-playbook -i inventory site.yml --forks 10

# Limitar a hosts específicos
ansible-playbook site.yml --limit webservers

# Executar tags específicas
ansible-playbook site.yml --tags "configuration,deploy"

Raridade: Comum Dificuldade: Média-Difícil


Recuperação de Desastres

5. Como você projeta um plano de recuperação de desastres?

Resposta: Estratégia DR abrangente:

Métricas Chave:

  • RTO (Recovery Time Objective): Tempo máximo aceitável de inatividade
  • RPO (Recovery Point Objective): Perda máxima aceitável de dados

Estratégia DR:

1. Estratégia de Backup:

#!/bin/bash
# Backup automatizado com retenção

BACKUP_SOURCE="/var/www /etc /home"
BACKUP_DEST="/mnt/backup"
REMOTE_SERVER="backup.company.com"
RETENTION_DAYS=30

# Criar backup
DATE=$(date +%Y%m%d)
tar -czf $BACKUP_DEST/backup-$DATE.tar.gz $BACKUP_SOURCE

# Sincronizar para remoto
rsync -avz --delete $BACKUP_DEST/ $REMOTE_SERVER:/backups/

# Limpar backups antigos
find $BACKUP_DEST -name "backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete

# Verificar backup
tar -tzf $BACKUP_DEST/backup-$DATE.tar.gz > /dev/null
if [ $? -eq 0 ]; then
    echo "Backup verified successfully"
else
    echo "Backup verification failed!" | mail -s "Backup Alert" [email protected]
fi

2. Replicação de Banco de Dados:

# Configuração MySQL Master-Slave
# No Master:
CHANGE MASTER TO
  MASTER_HOST='master-server',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=107;

START SLAVE;
SHOW SLAVE STATUS\G

3. Documentação:

  • Procedimentos de recuperação
  • Listas de contato
  • Diagramas do sistema
  • Backups de configuração

Raridade: Muito Comum Dificuldade: Difícil


Reforço de Segurança

6. Como você reforça a segurança de um servidor Linux?

Resposta: Abordagem de segurança em várias camadas:

1. Atualizações do Sistema:

# Atualizações de segurança automatizadas (Ubuntu)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

2. Reforço do SSH:

# /etc/ssh/sshd_config
Port 2222  # Alterar a porta padrão
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers admin devops
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

3. Configuração do Firewall:

# Regras iptables
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Permitir conexões estabelecidas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permitir SSH (porta personalizada)
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# Permitir HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Salvar regras
iptables-save > /etc/iptables/rules.v4

4. Detecção de Intrusão:

# Instalar AIDE
sudo apt install aide
sudo aideinit

# Verificar alterações
sudo aide --check

5. Auditoria de Log:

# Ativar auditd
sudo systemctl enable auditd
sudo systemctl start auditd

# Monitorar acesso a arquivos
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes

Raridade: Muito Comum Dificuldade: Difícil


Otimização de Desempenho

7. Como você otimiza o desempenho do servidor?

Resposta: Ajuste sistemático do desempenho:

1. Identificar Gargalos:

# CPU
mpstat 1 10

# Memória
vmstat 1 10

# Disk I/O
iostat -x 1 10

# Rede
iftop
nethogs

2. Otimizar Serviços:

# Ajuste do Nginx
worker_processes auto;
worker_connections 4096;
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/json;

# Ajuste do MySQL
innodb_buffer_pool_size = 4G
max_connections = 200
query_cache_size = 64M

3. Ajuste do Kernel:

# /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
fs.file-max = 100000

4. Monitorar e Alertar:

# Prometheus + Grafana
# Node Exporter para métricas do sistema
# Alertas personalizados para limites

Raridade: Comum Dificuldade: Média-Difícil


8. Como você projeta uma solução abrangente de monitoramento e alertas?

Resposta: O monitoramento eficaz evita interrupções e permite uma resposta rápida a incidentes.

Arquitetura da Stack de Monitoramento:

Loading diagram...

Configuração do Prometheus:

# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets:
        - 'server1:9100'
        - 'server2:9100'
        - 'server3:9100'
  
  - job_name: 'mysql'
    static_configs:
      - targets: ['db1:9104']
  
  - job_name: 'nginx'
    static_configs:
      - targets: ['web1:9113']

alerting:
  alertmanagers:
    - static_configs:
      - targets: ['localhost:9093']

rule_files:
  - 'alerts/*.yml'

Regras de Alerta:

# alerts/system.yml
groups:
  - name: system_alerts
    interval: 30s
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage is {{ $value }}%"
      
      - alert: HighMemoryUsage
        expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "High memory usage on {{ $labels.instance }}"
          description: "Memory usage is {{ $value }}%"
      
      - alert: DiskSpaceLow
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Low disk space on {{ $labels.instance }}"
          description: "Only {{ $value }}% disk space remaining"
      
      - alert: ServiceDown
        expr: up == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Service {{ $labels.job }} down"
          description: "{{ $labels.instance }} has been down for more than 2 minutes"

Configuração do Alertmanager:

# alertmanager.yml
global:
  resolve_timeout: 5m
  slack_api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'

route:
  group_by: ['alertname', 'cluster']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 12h
  receiver: 'default'
  routes:
    - match:
        severity: critical
      receiver: 'pagerduty'
      continue: true
    - match:
        severity: warning
      receiver: 'slack'

receivers:
  - name: 'default'
    email_configs:
      - to: '[email protected]'
        from: '[email protected]'
        smarthost: 'smtp.company.com:587'
  
  - name: 'slack'
    slack_configs:
      - channel: '#alerts'
        title: '{{ .GroupLabels.alertname }}'
        text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
  
  - name: 'pagerduty'
    pagerduty_configs:
      - service_key: 'YOUR_PAGERDUTY_KEY'

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

Dashboard Grafana:

{
  "dashboard": {
    "title": "System Overview",
    "panels": [
      {
        "title": "CPU Usage",
        "targets": [
          {
            "expr": "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
          }
        ]
      },
      {
        "title": "Memory Usage",
        "targets": [
          {
            "expr": "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100"
          }
        ]
      }
    ]
  }
}

Conceitos SLO/SLA/SLI:

SLI (Service Level Indicator):

  • Medida quantitativa do nível de serviço
  • Exemplos: % de uptime, latência, taxa de erros

SLO (Service Level Objective):

  • Valor alvo para SLI
  • Exemplo: 99,9% de uptime, latência p95 < 200ms

SLA (Service Level Agreement):

  • Contrato com consequências
  • Exemplo: 99,9% de uptime ou o cliente recebe reembolso
# Exemplo SLO
- alert: SLOViolation
  expr: |
    (
      sum(rate(http_requests_total{status=~"2.."}[30d]))
      /
      sum(rate(http_requests_total[30d]))
    ) < 0.999
  labels:
    severity: critical
  annotations:
    summary: "SLO violation: Success rate below 99.9%"

Prevenindo a Fadiga de Alertas:

  1. Alertas Significativos:

    • Alertar sobre sintomas, não causas
    • Todo alerta deve ser acionável
    • Remover alertas ruidosos
  2. Agrupamento de Alertas:

    • Agrupar alertas relacionados
    • Usar regras de inibição
    • Definir limites apropriados
  3. Escalonamento:

    • Aviso → Chat da equipe
    • Crítico → PagerDuty
    • Usar rodízios de plantão

Raridade: Comum Dificuldade: Difícil


Infraestrutura Empresarial

9. Como você gerencia um ambiente Windows em grande escala?

Resposta: Estratégias de gerenciamento centralizado:

Gerenciamento de Política de Grupo:

# Criar GPO
New-GPO -Name "Security Policy" -Comment "Enterprise security settings"

# Vincular à OU
New-GPLink -Name "Security Policy" -Target "OU=Servers,DC=company,DC=com"

# Configurar política de senha
Set-ADDefaultDomainPasswordPolicy -Identity company.com `
    -MinPasswordLength 12 `
    -PasswordHistoryCount 24 `
    -MaxPasswordAge 90.00:00:00

# Implantar software via GPO
# Computer Configuration > Policies > Software Settings > Software Installation

WSUS (Windows Update):

# Configurar WSUS
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" `
    -Name "WUServer" -Value "http://wsus.company.com:8530"

# Forçar a verificação de atualização
wuauclt /detectnow /updatenow

PowerShell Remoting:

# Ativar remoting
Enable-PSRemoting -Force

# Executar em vários servidores
Invoke-Command -ComputerName server1,server2,server3 -ScriptBlock {
    Get-Service | Where-Object {$_.Status -eq "Stopped"}
}

# Execução paralela
$servers = Get-Content servers.txt
$servers | ForEach-Object -Parallel {
    Test-Connection -ComputerName $_ -Count 1
} -ThrottleLimit 10

Raridade: Comum Dificuldade: Difícil


Conclusão

Entrevistas para administradores de sistemas seniores exigem profundo conhecimento técnico e experiência em liderança. Concentre-se em:

  1. Virtualização: Hipervisores, gerenciamento de recursos, migração
  2. Alta Disponibilidade: Clustering, failover, replicação
  3. Automação: Scripting, gerenciamento de configuração, orquestração
  4. Gerenciamento de Configuração: Ansible, Puppet, IaC em escala
  5. Recuperação de Desastres: Estratégias de backup, replicação, testes
  6. Segurança: Reforço, conformidade, monitoramento
  7. Desempenho: Otimização, planejamento de capacidade, solução de problemas
  8. Monitoramento: Prometheus, Grafana, alertas, SLO/SLA
  9. Gerenciamento Empresarial: AD, GPO, administração centralizada

Demonstre experiência no mundo real com infraestrutura complexa e tomada de decisões estratégicas. Boa sorte!

Newsletter subscription

Dicas de carreira semanais que realmente funcionam

Receba as últimas ideias diretamente na sua caixa de entrada

Decorative doodle

Sua Próxima Entrevista Está a Apenas um Currículo de Distância

Crie um currículo profissional e otimizado em minutos. Não são necessárias habilidades de design—apenas resultados comprovados.

Criar meu currículo

Compartilhar esta publicação

Seja Contratado 50% Mais Rápido

Candidatos que usam currículos profissionais aprimorados por IA conseguem vagas em uma média de 5 semanas comparado às 10 padrão. Pare de esperar e comece a fazer entrevistas.