Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
centos:rsynd_c8 [05.07.2020 13:22. ] – [rsync-Daemon konfigurieren] django | centos:rsynd_c8 [18.11.2024 19:02. ] (aktuell) – Externe Bearbeitung 127.0.0.1 |
---|
===== Installation und Konfiguration ===== | ===== Installation und Konfiguration ===== |
==== manuelle Weg ==== | ==== manuelle Weg ==== |
=== TFTP-Server installieren === | === rsync-Daemon installieren === |
Als erstes installieren wir uns die für den rsyslog-Daemon-Server notwendigen Pakete via **''dnf''**. | Als erstes installieren wir uns die für den rsyslog-Daemon-Server notwendigen Pakete via **''dnf''**. |
# dnf install rsync-daemon rsync -y | # dnf install rsync-daemon rsync -y |
# rpm -qil rsync-daemon | # rpm -qil rsync-daemon |
# rpm -qil rsync | # rpm -qil rsync |
| |
| |
| |
| |
| |
| |
=== rsync-Daemon konfigurieren === | === rsync-Daemon konfigurieren === |
# hostname and IP address. If none of the patterns match, then the connec- | # hostname and IP address. If none of the patterns match, then the connec- |
# tion is rejected. | # tion is rejected. |
# hosts allow = *.mailserver.guru | # hosts allow = *.nausch.org |
| |
# Module examples: | # Module examples: |
# outgoing chmod = 0644 | # outgoing chmod = 0644 |
# lock file = /var/lock/object.lock | # lock file = /var/lock/object.lock |
# hosts allow = *.mailserver.guru | # hosts allow = *.nausch.org |
| |
#[REPO] | #[REPO] |
#path = /srv/public/mailserver.guru/ | #path = /srv/public/nausch.org/ |
#comment = repo.mailserver.guru | #comment = repo.nausch.org |
#allow = 88.217.171.167 | #allow = 88.217.171.167 |
| |
Damit die Clients später Verbindungsanfragen zu dem geöffneten Port **tftp/873**unseres rsync-Daemon stellen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. | Damit die Clients später Verbindungsanfragen zu dem geöffneten Port **tftp/873**unseres rsync-Daemon stellen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. |
| |
Unter **[[#tftp-server_installieren|CentOS 8]]** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbiundungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden. | Unter **[[#tftp-server_installieren|CentOS 8]]** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbindungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden. |
| |
Im ersten Konfigurationsbeispiel werden wir nun den Port **873/tcp** für alle öffnen, also unabhängig von der source-IP-Adresse können alle vbeliebeigen clients Daten synchronisieren. Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public** für den Port ***873/tcp** an. | Im ersten Konfigurationsbeispiel werden wir nun den Port **873/tcp** für alle öffnen, also unabhängig von der source-IP-Adresse können alle vbeliebeigen clients Daten synchronisieren. Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public** für den Port ***873/tcp** an. |
| |
| |
| ==== automatisierter Weg mit Hilfe von Ansible ==== |
| Da wir aber in unserer Produktiven Umgebung alle Server, Dienste und Services mit Hilfe von **[[centos:ansible:start|Ansible]]** werden wir natürlich auch für unseren **rsync**-Daemon dies über eine entsprechende **[[centos:ansible:detail#grundlagen|Ansible-Rolle]] {{:centos:pxe_c8:ansible-role-rsync.tar.gz|ansible-role-rsync.tar.gz}}**((Version v1 vom 05.07.2020)) erledigen lassen. |
| |
| /* |
| Erzeugen des tar.gz einer Ansible-Rolle: |
| $ cd ~/ansible/roles |
| $ tar -czvPf /tmp/ansible-role-tftp.tar.gz tftp/ |
| */ |
| |
| |
| Wir holen uns also das Verzeichnis mit der **role** auf unseren Rechner. |
| $ wget https://dokuwiki.nausch.org/lib/exe/fetch.php/centos:pxe_c8:ansible-role-rsync.tar.gz -O ansible-role-rsync.tar.gz |
| |
| Da wir bei der Installation und **[[centos:ansible:first#ansibledirectory_layout|Konfiguration]]** von Ansible bereits das **''Ansible Directory Layout''** erzeugt hatten, brauchen wir nur noch das heruntergeladene Archiv an Ort und Stelle entpacken. |
| $ tar -xvf ansible-role-rsync.tar.gz -C ~/ansible/roles/ |
| |
| Jetzt brauchen wir nur noch die Rolle unserem Server **rsync-server** zuordnen. |
| $ vim ~/ansible/rsync.yml |
| |
| <file yml ~/ansible/rsync.yml>--- # Start des Playbooks für den rsyncd-Server |
| - hosts: rsync-server |
| |
| roles: |
| #- base # Basiskonfiguration (User anlegen) |
| #- chrony # Installation und Konfiguration NTP-Client |
| - rsync # Installation und Konfiguration rsync-Daemon |
| |
| ... # Ende des Playbooks für den rsyncd-Server |
| </file> |
| |
| Bevor wir nun das Playbook ausführen, passen wir noch ggf. die Firewall-Einstellungen an. Beispiele dazu sind im entsprechenden **''task''** bereits vermerkt. |
| $ vim ~/ansible/roles/rsync/tasks/firewall.yml |
| <file bash ~/ansible/roles/rsync/tasks/firewall.yml>--- |
| - name: "*{{ daemon_name }}* : Firewall-Daemon für den {{ daemon_name }} anpassen" |
| firewalld: #https://docs.ansible.com/ansible/latest/modules/firewalld_module.html |
| zone: public |
| port: 873/tcp |
| permanent: yes |
| immediate: yes |
| state: enabled |
| # |
| #zone: public |
| #rich_rule: rule family="ipv4" source address="88.217.171.167/32" port protocol="tcp" port="873" destination address="10.0.0.190/32" accept |
| #permanent: yes |
| #immediate: yes |
| #state: enabled</file> |
| |
| Die Definition der Parameter für den **''rsyncd''** erfolgt über die Variablen-Datei **''~/ansible/roles/rsync/vars/main.yml''** |
| $ vim ~/ansible/roles/rsync/vars/main.yml |
| <file yml ~/ansible/roles/rsync/vars/main.yml>--- # Definition der rollenspezifische Variablen zum rsync Daemon |
| daemon_name : rsyncd |
| config_file : /etc/rsyncd.conf |
| config_backup_file : /etc/rsyncd.conf.orig |
| template_file : templates/rsyncd.conf.j2 |
| # rsyncd config-options |
| rsyncd_motd : "# motd file" |
| rsyncd_pid : "# pid file = /var/run/rsyncd.pid" |
| rsyncd_port : "# port 873" |
| rsyncd_address : "# address" |
| rsyncd_uid : "uid = nobody" |
| rsyncd_gid : "gid = nobody" |
| rsyncd_log_file : "# log file = /var/log/rsyncd.log" |
| rsyncd_syslog_tag : "# syslog tag = rsyncd" |
| rsyncd_syslog_facility : "# syslog facility = daemon" |
| rsyncd_transfer_logging : "transfer logging = yes" |
| rsyncd_max_connections : "# max connections = 0" |
| rsyncd_path : "# path = /home/ftp" |
| rsyncd_exclude : "# exclude = lost+found/" |
| rsyncd_use_chroot : "# use chroot = yes" |
| rsyncd_timeout : "timeout = 600" |
| rsyncd_ignore_nonreadable: "# ignore nonreadable = yes" |
| rsyncd_dont_compress : "dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2" |
| rsyncd_module : "[demo]\nmax connections = 2\npath = /srv/tftp/test\ncomment = Demo für rsync Daemon Artikel in Djangos WIKI\nlist = yes\nhosts allow = 10.10.10.0/26\n" |
| </file> |
| |
| <WRAP center round tip 80%> |
| Wenn man die hostspezfische Konfiguration des rsync-Daemon lieber in der Host-spezifischen Konfiguration vornehmen möchte, braucht man die **# rsyncd config-options** nur hier bei der Rolle auskommentieren bzw. löschen und in die Hostvariable im Inverntory aufnehmen. |
| <WRAP center round important 100%> |
| **WICHTIG**: Variablen in der Rollen-Konfiguration überschreiben (gleichlautende) Variablen-Definitionen aus dem Inventory! |
| </WRAP> |
| </WRAP> |
| |
| Nun brauchen wir nur noch das Playbook ausführen und unser TFTP-Server steht bereit. |
| $ ansible-playbook -v ~/ansible/rsync.yml |
| |
| <html><pre class="code"> |
| <font style="color: rgb(43, 100, 164)">Using /home/ansible/.ansible.cfg as config file</font> |
| <font style="color: rgb(0, 0, 0)">BECOME password: |
| |
| PLAY [rsync-server] ******************************************************************************************************************** |
| |
| TASK [Gathering Facts] *****************************************************************************************************************</font> |
| <font style="color: rgb(25, 100, 5)">ok: [rsync-server]</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Installation der relevanten Pakete (in der aktuellsten Version) für den rsyncd] ***************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "msg": "", "rc": 0, "results": ["Installed: rsync-daemon-3.1.3-7.el8.noarch", "Installed: rsync-3.1.3-7.el8.x86_64"]}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : 1) Überprüfen ob das Backup der Konfigurationsdatei '/etc/rsyncd.conf' bereits existiert] *****************************</font> |
| <font style="color: rgb(25, 100, 5)">ok: [rsync-server] => {"changed": false, "stat": {"exists": false}}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : 2) Von der bestehenden originalen Konfigurationsdatei '/etc/rsyncd.conf' ein Backup '/etc/rsyncd.conf.orig' erstellen]*</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "checksum": "5400f2739a22e6831dbf9a26a8946821c21ce844", "dest": "/etc/rsyncd.conf.orig", "gid": 0, "group": "root", "md5sum": "c63fccb45c0dcbbbe17d0f4bdba920ec", "mode": "0644", "owner": "root", "secontext": "system_u:object_r:etc_t:s0", "size": 458, "src": "/etc/rsyncd.conf", "state": "file", "uid": 0}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Template Konfigurationsdatei an Ort und Stelle kopieren und Variablen setzen] *****************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "checksum": "0b4dff047064222e2952157d9840b2a93f89b26a", "dest": "/etc/rsyncd.conf", "gid": 0, "group": "root", "md5sum": "5f18235a7e8444010877fe3975641c9d", "mode": "0644", "owner": "root", "secontext": "system_u:object_r:rsync_etc_t:s0", "size": 9459, "src": "/home/ansible/.ansible/tmp/ansible-tmp-1593968476.9547315-8021-252894376954121/source", "state": "file", "uid": 0}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Firewall-Daemon für den rsyncd anpassen] ******************************************************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "msg": "Permanent and Non-Permanent(immediate) operation, Changed port 873/tcp to enabled"}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Sicherstellen dass der rsyncd gestartet wird und läuft] ***************************************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "enabled": true, "name": "rsyncd.service", "state": "started", "status": {"ActiveEnterTimestampMonotonic": "0", "ActiveExitTimestampMonotonic": "0", "ActiveState": "inactive", "After": "systemd-journald.socket basic.target sysinit.target system.slice", "AllowIsolate": "no", "AllowedCPUs": "", "AllowedMemoryNodes": "", "AmbientCapabilities": "", "AssertResult": "no", "AssertTimestampMonotonic": "0", "Before": "shutdown.target", "BlockIOAccounting": "no", "BlockIOWeight": "[not set]", "CPUAccounting": "no", "CPUAffinity": "", "CPUQuotaPerSecUSec": "infinity", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "[not set]", "CPUUsageNSec": "[not set]", "CPUWeight": "[not set]", "CacheDirectoryMode": "0755", "CanIsolate": "no", "CanReload": "no", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_fsetid cap_kill cap_setgid cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend", "CollectMode": "inactive", "ConditionResult": "no", "ConditionTimestampMonotonic": "0", "ConfigurationDirectoryMode": "0755", "Conflicts": "shutdown.target", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "fast remote file copy program daemon", "DevicePolicy": "auto", "DynamicUser": "no", "EffectiveCPUs": "", "EffectiveMemoryNodes": "", "EnvironmentFiles": "/etc/sysconfig/rsyncd (ignore_errors=no)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "0", "ExecMainStartTimestampMonotonic": "0", "ExecMainStatus": "0", "ExecStart": "{ path=/usr/bin/rsync ; argv[]=/usr/bin/rsync --daemon --no-detach $OPTIONS ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/rsyncd.service", "GID": "[not set]", "GuessMainPID": "yes", "IOAccounting": "no", "IOSchedulingClass": "0", "IOSchedulingPriority": "0", "IOWeight": "[not set]", "IPAccounting": "no", |