Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:capabilities

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.

Mittels man capabilities kann man die vom verwendeten Kernel angebotenen Capabilities auflisten.

cat /usr/bin/ping > PING
./PING 9.9.9.9

als root

setcap cap_net_raw=p ./PING
getcap ./PING

als user

./PING 9.9.9.9

Unter Debian nicht update-fest:

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

Danach kann jeder User tcpdump benutzen

einer (root) shell eine Capability entziehen

capsh startet eine neue Shell mit veränderten Capabilities.

capsh --drop=cap_chown,cap_net_raw --
chown kurt /etc/passwd
ping 9.9.9.9

Welcher Prozess hat welche Capabilities?

Pakete: libcap-ng-utils

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

admin_grundlagen/capabilities.txt · Zuletzt geändert: 2025/09/05 13:03 von ingo_wichmann