Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
admin_grundlagen:capabilities [2022/12/09 05:56] carsten_strotmann |
admin_grundlagen:capabilities [2025/09/05 13:03] (aktuell) ingo_wichmann |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== ping mit capability statt suid-Bit ====== | + | ====== ping mit capability statt suid-Bit ====== |
| Statt einem Programm über das SETUID-Bit **alle** Systemrechte zu geben, ist es sinnvoller, nur die Fähigkeiten (capabilities) zu geben, die das Programm zur Erfüllung seines Zwecks benötigt. Das setzt allerdings die Unterstützung des Kernels voraus, welches bestimmte Capabilities bereitstellt, die dann den Programmen gegeben werden können. | Statt einem Programm über das SETUID-Bit **alle** Systemrechte zu geben, ist es sinnvoller, nur die Fähigkeiten (capabilities) zu geben, die das Programm zur Erfüllung seines Zwecks benötigt. Das setzt allerdings die Unterstützung des Kernels voraus, welches bestimmte Capabilities bereitstellt, die dann den Programmen gegeben werden können. | ||
| Zeile 19: | Zeile 19: | ||
| Moderne Kernel :?: (oder eine andere black magick) erlauben ''ping'' auch ohne Capabilities. | Moderne Kernel :?: (oder eine andere black magick) erlauben ''ping'' auch ohne Capabilities. | ||
| + | sysctl -a | grep ping | ||
| setcap cap_net_raw,cap_net_admin=pe /usr/sbin/tcpdump | setcap cap_net_raw,cap_net_admin=pe /usr/sbin/tcpdump | ||
| Danach kann jeder User tcpdump benutzen | Danach kann jeder User tcpdump benutzen | ||
| + | |||
| + | |||
| ====== einer (root) shell eine Capability entziehen ====== | ====== einer (root) shell eine Capability entziehen ====== | ||
| ''capsh'' startet eine neue Shell mit veränderten Capabilities. | ''capsh'' startet eine neue Shell mit veränderten Capabilities. | ||
| Zeile 33: | Zeile 36: | ||
| Pakete: libcap-ng-utils | Pakete: libcap-ng-utils | ||
| pscap | pscap | ||
| + | getpcap <pid> | ||
| + | | ||
| + | == low level == | ||
| + | grep ^Cap /proc/<pid>/status | ||
| + | | ||
| + | CapInh: 0000000000000000 | ||
| + | CapPrm: 000001ffffffdffe | ||
| + | CapEff: 000001ffffffdffe | ||
| + | CapBnd: 000001ffffffdffe | ||
| + | CapAmb: 0000000000000000 | ||
| + | | ||
| + | capsh --decode=000001ffffffdffe | ||
| + | |||
| + | ===== rsync read only ===== | ||
| + | zu sichernder Server: | ||
| + | |||
| + | apt install rsync acl libcap2-bin | ||
| + | useradd -r -d /srv/rosync -s /usr/bin/sh rosync | ||
| + | install -d -o rosync -g rosync -m 700 /srv/rosync/.ssh | ||
| + | install -o rosync -g rosync -m 600 /dev/null /srv rosync/.ssh/authorized_keys | ||
| + | |||
| + | cp /usr/bin/rsync /usr/local/sbin/rsync-for-backup | ||
| + | chown root:root /usr/local/sbin/rsync-for-backup | ||
| + | chmod 700 /usr/local/sbin/rsync-for-backup | ||
| + | setfacl -m user:rosync:rx /usr/local/sbin/rsync-for-backup | ||
| + | setcap cap_dac_read_search+ep /usr/local/sbin/rsync-for-backup | ||
| + | |||
| + | |||
| + | TODO: include rrsync? | ||
| + | |||
| + | pull initierender Server: | ||
| + | apt install rsync | ||
| + | ssh-keygen -N '' -f .ssh/id_ed25519_rosync -C 'rosync backup' | ||
| + | ssh root@otherserver 'cat > /srv/rosync/.ssh/authorized_keys' < .ssh/id_ed25519_rosync.pub | ||
| + | rsync -ax -e 'ssh -i .ssh/id_ed25519_rosync' --rsync-path=/usr/local/sbin/rsync-for-backup rosync@192.168.122.74:/ backup | ||
| + | |||
| + | Was nicht gehen sollte: | ||
| + | rsync -ax -e 'ssh -i .ssh/id_ed25519_rosync' --rsync-path=/usr/local/sbin/rsync-for-backup /etc/passwd rosync@192.168.122.74:/srv | ||
| + | ==== systemd + caps ==== | ||
| + | systemctl show <unit> | grep -i cap | ||
| ====== Doku ====== | ====== Doku ====== | ||
| * http://www.admin-magazin.de/Das-Heft/2009/03/Rechte-ueber-File-Capabilities-einschraenken | * http://www.admin-magazin.de/Das-Heft/2009/03/Rechte-ueber-File-Capabilities-einschraenken | ||