AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 534131
Accepted
roaima
roaima
Asked: 2019-08-07 04:40:37 +0800 CST2019-08-07 04:40:37 +0800 CST 2019-08-07 04:40:37 +0800 CST

rsync daemon com a aplicação da política selinux rsync_export_all_ro ainda impede o acesso a arquivos em /var/spool/postfix/private/

  • 772

Eu tenho vários sistemas baseados em Debian que são copiados regularmente usando arquivos rsync. Por vários motivos, tive que implantar um pequeno servidor CentOS 7 e quero adicioná-lo ao meu agendamento de backup. Não pode ser feito backup usando rsync sobre ssh; em vez disso, preciso usar o daemon rsync.

O CentOS tem o SELinux habilitado no modo de imposição, então isso me colocou em uma curva de aprendizado íngreme.

A rsyncdseção de configuração (simplificada)

[root]
    comment = Filesystem
    path = /
    exclude = /proc/*** /run/*** /sys/*** [...]
    read only = yes
    list = yes
    uid = root
    secrets file = [...]
    ignore errors = no
    ignore nonreadable = no
    refuse options = delete

Eu acredito que o processo está rotulado corretamente:

ps -eZ | grep rsync
system_u:system_r:rsync_t:s0    26020 ?        00:00:00 rsync

Inicialmente, a tentativa de backup por meio do rsyncdaemon falhou com todos os tipos de erros de permissão que atribuí aos rótulos do SELinux. Cavando mais, encontrei uma referência a uma política SELinux que permite que o rsyncdaemon exporte todos os arquivos somente leitura:

setsebool -P rsync_export_all_ro 1

Isso resulta neste conjunto

getsebool -a | grep '^rsync'
rsync_anon_write --> off
rsync_client --> off
rsync_export_all_ro --> on
rsync_full_access --> off

Infelizmente, isso ainda não me dá acesso a todos os arquivos no sistema. Especificamente, tenho alguns arquivos /var/spool/postfix/privateque são ilegíveis:

rsync: readlink_stat("/var/spool/postfix/private/defer" (in root)) failed: Permission denied (13)
rsync: readlink_stat("/var/spool/postfix/private/trace" (in root)) failed: Permission denied (13)
rsync: readlink_stat("/var/spool/postfix/private/verify" (in root)) failed: Permission denied (13)
rsync: readlink_stat("/var/spool/postfix/private/proxymap" (in root)) failed: Permission denied (13)
...

Uma entrada de exemplo relacionada a /var/spool/postfix/privatefrom audit2why -asegue. Observe que nenhuma das entradas faz referência a rsync_export_all_ro:

type=AVC msg=audit(1565118203.332:21775): avc:  denied  { getattr } for  pid=26597 comm="rsync" path="/var/spool/postfix/private/scache" dev="dm-0" ino=9148374 scontext=system_u:system_r:rsync_t:s0 tcontext=system_u:object_r:postfix_private_t:s0 tclass=sock_file permissive=0
        Was caused by:
        The boolean rsync_full_access was set incorrectly.
        Description:
        Allow rsync to full access

        Allow access by executing:
        # setsebool -P rsync_full_access 1

Não entendo por que há uma referência a rsync_full_access(que não quero definir e não deveria ser acionada de qualquer maneira), mas nenhuma a rsync_export_all_ro.

No interesse de obter um backup completo, como posso adicionar esta árvore de diretórios ao conjunto de arquivos que podem ser exportados pelo rsyncdaemon? (E para que essa mudança seja persistente nas reinicializações.)

centos rsync
  • 1 1 respostas
  • 1819 Views

1 respostas

  • Voted
  1. Best Answer
    Edward
    2019-08-18T22:44:24+08:002019-08-18T22:44:24+08:00

    Você está certo em não querer desabilitar o SELinux para o rsync_tdomínio. Infelizmente, embora a configurabilidade da implementação do SELinux para rsync seja bastante extensa, existem casos extremos em que definir o rsync_export_all_roboolean ainda não permitirá que o daemon rsync acesse determinados arquivos. Há uma entrada do Bugzilla que se assemelha muito aos seus problemas. A sugestão dada é usar rsync_full_accesspara superar o problema, embora prejudicando a segurança (ainda é melhor do que semanage permissive -a rsync_tembora).

    Criando módulo de política personalizado

    Portanto, para responder à sua pergunta, se você deseja usar a opção mais segura rsync_export_all_ro e permitir que o daemon rsync acesse os arquivos/diretórios "edge case", você precisa criar seu próprio módulo de política.

    Isso é feito deixando o daemon rsync fazer seu trabalho no modo permissivo, capturando negações de AVC à medida que avança e, em seguida, convertendo as negações de AVC em uma política, assim:

    # put SELinux in permissive mode
    setenforce 0
    
    # --- do your rsync stuff ---
    
    # get related AVC denials
    # I'm using 'recent' here, depending on the rsync run time please adjust accordingly
    ausearch -m avc -ts recent --subject rsync_t
    
    # go through the output. If you're satisfied, create the module
    ausearch -m avc -ts recent --subject rsync_t | audit2allow -m roaima-rsync-custom-1 > roaima-rsync-custom-1.te
    checkmodule -M -m -o roaima-rsync-custom-1.mod roaima-rsync-custom-1.te
    semodule_package -o roaima-rsync-custom-1.pp -m roaima-rsync-custom-1.mod
    
    # load the policy module
    semodule -i roaima-rsync-custom-1.pp
    
    # disable permissive mode
    setenforce 1
    
    # --- do your rsync stuff again --
    

    Capturando negações de AVC que não são auditadas ("dontaudit")

    Se, por algum motivo, os arquivos "edge case" ainda não estiverem acessíveis e o ausearchcomando não produzir resultados, você pode estar atingindo uma regra "dontaudit".

    Para reconstruir a política SELinux ignorando todas as regras "dontaudit", execute semodule -DB. A -Dopção desabilita as regras de "não auditoria"; a -Bopção reconstrói a política.

    Em seguida, tente se você pode acionar eventos de log de auditoria. Em caso afirmativo, capture-os como mostrei acima, crie o módulo SELinux e reative as regras "dontaudit" executando: semodule -B.

    Para obter uma lista completa de regras "dontaudit", execute o sesearch --dontauditcomando. Restrinja as pesquisas usando a -sopção de domínio e o grepcomando. Por exemplo: sesearch --dontaudit -s rsync_t.

    • 4

relate perguntas

  • Por que meu switch não está obtendo um endereço do pool especificado

  • Criando menus personalizados na guia do menu Aplicativos no CentOS7 GNOME

  • Problemas de exclusão de Rsync

  • rsync porta 22 e 873 uso

  • Roteador estranho funciona com centos 6 [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve