Izin ditolak dalam modul sinkronisasi yang dimungkinkan

3

Saya menggunakan Ansible, antara lain, untuk mendukung tujuan. Saya menjalankan ansible-playbookdengan pengguna non-root (katakanlah itu user) dan ssh as user. Setelah itu, saya mengatur eskalasi hak istimewa untuk menjadi rootpada setiap server. Hingga saat ini, tidak ada masalah.

Untuk mengambil direktori jarak jauh, saya memiliki sesuatu yang setara dengan aturan berikut:

- synchronize:
  mode: pull
  delete: true
  src: "{{ dir }}/"
  dest: "{{ tank_base }}/{{ inventory_hostname }}/{{ dir }}/"
  rsync_opts:
    - "--exclude=tmp*"
    - "--exclude=~*"
    - "--exclude=*~"
    - "--exclude=.gvfs/"
    - "--exclude=.cache/"

tetapi untuk beberapa subdirektori ini memberikan kesalahan berikut (sedikit diedit untuk menyembunyikan data pribadi):

fatal: [server]: GAGAL! => {"diubah": false, "cmd": "/ usr / bin / rsync --delay-update -F --compress --delete-after --archive --rsh 'ssh -S none -o StrictHostKeyChecking = no '--exclude = tmp * --exclude = ~ * --exclude = * ~ --exclude = .gvfs / --exclude = .cache / --out-format =' <>% i% n% L ' \ "server: / var / backup / \" \ "/ var / tank / snapshot / server / backup / \" "," gagal ": true," msg ":" rsync: opendir \ "/ var / backup / subdir \ "gagal: Izin ditolak (13) \ nrsync kesalahan: beberapa file / attr tidak ditransfer (lihat kesalahan sebelumnya) (kode 23) di main.c (1650) [generator = 3.1.2] \ n", "rc" : 23}

Subdirektori yang gagal ( /var/backup/subdirdalam kasus di atas) dimiliki oleh root:rootdan hanya dapat dibaca / ditulis oleh pemilik. Dugaan saya rsyncadalah mencoba untuk menarik file sebagai usergantinya root.

Bagaimana saya bisa menarik direktori-direktori itu tanpa membahayakan keamanan dan mungkin tanpa mengubah apa pun di sisi server? Bagaimanapun eskalasi hak istimewa sudah ada dan berfungsi.

ntd
sumber

Jawaban:

2

Bagaimanapun eskalasi hak istimewa sudah ada dan berfungsi.

Tidak persis - synchronizemodul berjalan rsyncsecara lokal pada mesin manajemen, bukan pada simpul target (yang Anda gunakan untuk mengatur eskalasi hak istimewa). Dokumentasi modul menjelaskan hal ini secara terperinci (kutipan di bawah):

  • Pengguna dan izin untuk sinkronisasi srcadalah milik pengguna yang menjalankan tugas Ansible pada host lokal (atau remote_useruntuk delegate_tohost ketika delegate_todigunakan).

  • Pengguna dan izin untuk sinkronisasi destadalah dari remote_userhost tujuan atau become_userjika become=yesaktif.

Jadi mengakses folder sumber Anda ( server:/var/backup/dalam contoh) usertidak root.


Jika Anda tidak memerlukan kata sandi untuk userke sudopada mesin target (atau konfigurasikan dengan cara ini untuk rsyncperintah), Anda dapat menggunakan delegate_to: <your_server>parameter yang dikombinasikan dengan rsync_path="sudo rsync"untuk menjalankannya secara eksplisit sudo.

techraf
sumber
Saya tidak tahu internal yang mungkin: Saya berharap syncmodul ini dapat menggali lalu lintasnya dengan menggunakan kembali koneksi yang sudah ada alih-alih membuat yang baru. Saya akan menggali lebih banyak pada delegate_torute ...
nd
1

Dalam An 2.2.2.0 ini bekerja untuk saya:

- synchronize:
    mode: pull
    src: "/home/vagrant/dir1"
    dest: "/my_linux/dir1"
    recursive: yes
    delete: no
    times: yes

... dan dengan inventaris ini (untuk menggunakan ansible_ssh_private_key_filevar):

[vagrant1]
192.168.77.4

[vagrant1:vars]
ansible_user=vagrant
ansible_ssh_private_key_file="/Users/Chilcano/.vagrant.d/insecure_private_key"

Semoga ini bisa membantu Anda.

Chilcano
sumber