[HowTo] ZABBIX Agentd für Freetz

Möglicherweise reicht schon setuid auf Busybox, damit ping geht.
Vielleicht wenn SUID handling ausgeschaltet ist im busybox and das Attribut auf /bin/busybox enabled ist (muss ich testen). Aber dann wirden alle applets mit root verwendet fur alle users.
Das will ich nicht.

Aber ich habe jetzt ein gutes System....

busybox muss suid enabled haben um das system mit /etc/busybox.conf . Somit kann er nur einige applets als 'root' verwenden. Alle anderen werden wieder zabbix.....

Aber busybox hat dafur ein suid - system womit man individuelle applets ein suid geben kann.
mit 'make busybox-menuconfig' kann man das configurieren.
Die applets setzt man in /etc/busybox.conf
 
Zuletzt bearbeitet:
Ich habe dieser fwmod_custom geschrieben....


Code:
#!/bin/bash
# Custom firmware modifications

# Directories:
#  ./firmware   - untared firmware
#  ./filesystem - unpacked filesystem squashfs
#  ./kernel     - unpacked kernel & hidden kernel squashfs

DOT_CONFIG="../../.config"
. ${DOT_CONFIG}

all() {
        dummy=0
        if echo ${FREETZ_REPLACE_BUSYBOX} | grep -q 'y' ; then
                echo 'Busybox is being replaced!'
                if grep -q '^CONFIG_FEATURE_SUID_CONFIG=y' ../../make/busybox/Config.${FREETZ_TARGET_REF} ; then
                        echo 'set atttributes on busybox'
                        chmod u+s ./filesystem/bin/busybox
                        echo -e '[SUID]\nsu = ssx 0.0\npasswd = ssx 0.0\nmore = ssx 0.0\ngrep = ssx 0.0\nping = ssx 0.0' >./filesystem/etc/busybox.conf
                        chmod 0440 ./filesystem/etc/busybox.conf
                fi
        fi
        if [ -f ./filesystem/usr/bin/sudo ] ; then
                echo 'set atttributes of /usr/bin/sudo'
                chmod u+s ./filesystem/usr/bin/sudo
                echo 'set atttributes of /etc/sudoers'
                chmod 0440 ./filesystem/etc/sudoers
                echo 'set atttributes of files inside /etc/sudoers.d/*'
                chmod -R 0440 ./filesystem/etc/sudoers.d/*
        fi
}

clean() {
        dummy=0
}

case "$1" in
        ""|all)
                all
                ;;
        clean)
                clean
                ;;
        *)
                echo "Usage: $0 {all|clean}" 1>&2
                exit 1
                ;;
esac

exit 0
 
Beide funktionieren...

suid und sudo

Code:
# cat /etc/busybox.conf
[SUID]
su = ssx 0.0
passwd = ssx 0.0
more = ssx 0.0
grep = ssx 0.0
ping = ssx 0.0

Code:
# ls -altr /etc/sudoers
-r--r-----    1 root     root          2849 Sep  8  2011 /etc/sudoers

Zabbix kann ohne Problemen pingen... Er brauch kein 'sudo'
Code:
# sudo -u zabbix ping -c1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.467 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.467/0.467/0.467 ms

Nicht alles geht.... (und muss auch nicht)
Code:
# sudo -u zabbix cat /etc/sudoers
cat: can't open '/etc/sudoers': Permission denied

Ich habe auch nog ein Problem gefunden hiermit:
Code:
sudo: can't mkdir /var/lib/sudo: No such file or directory

Ich habe das repariert mit dieser im Datei 'configure':
Code:
 --with-timedir=/var/mod/usr/lib \


Darum hab ich sudo.patch.txt ein wenig modifiziert..
Jetzt geht alles... ;-)
 

Anhänge

  • sudo.patch.txt
    6.7 KB · Aufrufe: 6
In mein fw_mod.custom hab ich jetzt etwas mehr....

@ sf3978,
I guess you have rights to add packages to Freetz.
Could you add sudo and/or zabbix to the official package?

$ cat fwmod_custom
Code:
#!/bin/bash

# Custom firmware modifications

# Directories:
#  ./firmware   - untared firmware
#  ./filesystem - unpacked filesystem squashfs
#  ./kernel     - unpacked kernel & hidden kernel squashfs

all() {
        dummy=0
        echo -e '\n\n'
        if [ -f "../../.config" ] ; then
                DOT_CONFIG="../../.config"
                grep "^FREETZ_" "${DOT_CONFIG}" >/tmp/FREETZ_ENV
                . /tmp/FREETZ_ENV
        else
                echo "Error....!!!\n\n\Could not find ${DOT_CONFIG}"
                pwd
                ls -al ../../
        fi
        if echo "${FREETZ_REPLACE_BUSYBOX}" | grep -q 'y' ; then
                echo 'Busybox is being replaced!, lets check if we need to set SUID....'
                # Check if CONFIG_FEATURE_SUID_CONFIG is set in the file ~/freetz-trunk/make/busybox/Config.16mb or Config.8mb (whatever is used now)
                if grep -q '^CONFIG_FEATURE_SUID_CONFIG=y' ../../make/busybox/Config.${FREETZ_TARGET_REF} ; then
                        echo 'set SUID atttributes on the file busybox itself'
                        chmod u+s ./filesystem/bin/busybox
                        echo 'Create /etc/busybox.conf and make it readable for root only'
                        echo -e '[SUID]\nsu = ssx 0.0\npasswd = ssx 0.0\nmore = ssx 0.0\ngrep = ssx 0.0\nping = ssx 0.0' >./filesystem/etc/busybox.conf
                        chmod 0440 ./filesystem/etc/busybox.conf
                fi
        fi
        if [ -f ./filesystem/usr/bin/sudo ] ; then
                echo 'set atttributes of /usr/bin/sudo'
                chmod u+s ./filesystem/usr/bin/sudo
                echo 'set atttributes of /etc/sudoers'
                chmod 0440 ./filesystem/etc/sudoers
                echo 'set atttributes of files inside /etc/sudoers.d/*'
                chmod -R 0440 ./filesystem/etc/sudoers.d/*
        fi
        if echo "${FREETZ_PACKAGE_ZABBIX_AGENTD}" | grep -q 'y' ; then
                if [ -e ../../make/zabbix_agentd/files/root/sbin ] ; then
                        echo "copy custom scripts"
                        find ../../make/zabbix_agentd/files/root/sbin -maxdepth 1 -mindepth 1 -type f | while read source ; do
                                target="./filesystem/sbin/${source##*/}"
                                echo "copy ${source} to ${target} (script from zabbix_agentd)"
                                cp -p "${source}" "${target}"
                                chmod +x "${target}"
                                chmod u+s "${target}"
                        done
                fi
        fi
        echo -e '\n\n'

}

clean() {
        dummy=0
}

case "$1" in
        ""|all)
                all
                ;;
        clean)
                clean
                ;;
        *)
                echo "Usage: $0 {all|clean}" 1>&2
                exit 1
                ;;
esac

exit 0

exit 0
 
Zuletzt bearbeitet:
Seitdem ich eine 'svn update' gemacht habe funktioniert ein 'make' nicht mehr.
dieses SVN will mit "busybox 1.19.2" arbeiten, aber die ist nicht vorhanden....
Was muss ich tun um wieder ein 'make' zu machen?

Mache ich etwas falsch oder ist es ein Fehler in svn?

Code:
freetz@freetz-linux:~/src/freetz-trunk$ svn update
At revision 7676.
freetz@freetz-linux:~/src/freetz-trunk$ make
make: *** Keine Regel vorhanden, um das Target »dl/busybox-1.19.2.tar.bz2«,
  benötigt von »/home/freetz/src/freetz-trunk/source/host-tools/busybox-1.19.2/.unpacked«, zu erstellen.  Schluss.
freetz@freetz-linux:~/src/freetz-trunk$ ls source/host-tools/
busybox-1.18.5   fakeroot-1.16  find-squashfs  lzma443         squashfs3.4  TI-chksum-0.2
fakeroot-1.15.1  fakeroot-1.17  lzma2eva       squashfs2.2-r2  sstrip-1.0
 
Zuletzt bearbeitet:
Danke...
Jetzt geht er wieder.....

Hasst Du mein fwmod_custom angeguckt?
Ist dass die weise wie man dass macht?

Hasst du die Rechten um sudo in SVN zu bekommen?
Und willst du dass?


Ich habe jetzt 8 7270 mit Freetz geflashed aber ein 7390 ist immer zu groß....
Hasst du ein tip womit ich die Größe der Image herunterbringen kann?
 
Zuletzt bearbeitet:
Hasst Du mein fwmod_custom angeguckt?
Ist dass die weise wie man dass macht?
Ich benutze fwmod_custom nicht, d. h. ich kann dir hier nicht helfen.
Hasst du die Rechten um sudo in SVN zu bekommen?
Und willst du dass?
Nein, ich habe keine Rechte für SVN. Du solltest dich an die Freetz Entwickler wenden.
Mir ist es egal ob sudo im trunk ist oder nicht. Um Pakete mit Freetz zu benutzen, müssen diese nicht im trunk sein.
Ich habe jetzt 8 7270 mit Freetz geflashed aber ein 7390 ist immer zu groß....
Hasst du ein tip womit ich die Größe der Image herunterbringen kann?
Removen, externalisieren und/oder auf bestimmte Pakete verzichten.;)
 
Ich sehe im Moment keinen wirklichen Nutzen im dem sudo Paket, zumal die Box normalerweise nicht im Mehrbenutzer Betrieb verwendet wird. Programme unter einem anderen Benutzer ausführen kann man auch mit su.

Das ursprüngliche Problem, ping aufzurufen, läßt sich einfach damit lösen, dass man die Busybox setuid macht. Dafür braucht es keine Busybox Konfigurations-Datei, die in der Standard Konfiguration sowieso nicht gelesen wird, kein su und kein sudo.
 
Was du schreibst stimmt aber die suid setzen ist nicht dasselbe. nicht nur "zabbix" aber auch eventuell andere user haben diese Privilegen.

Die modularen Aufbau bei Freetz macht es dass der Vorteil kein Nachteilen hat fuhr Anderen.

Dasselbe gilt fur Zabbix selbst.
Fur mich war Zabbix der Grund um Freetz zu verwenden.
Wenn man monitoring serieus nimmt ist Zabbix der Weg.

Ich mochte es nur gerne im Freetz haben um es fur Anderen einfager zu machen und vielleicht gibt es auch nog Menschen mit originalen Ideeen.
 
Wenn ich die sudo Konfigurationsdatei im Patch richtig lese, haben damit alle Benutzer alle Privilegien. Dann ist es doch besser, dass alle Benutzer ping ausführen können, das ist auf einem normalen Linux-System auch so.
 
Wenn ich die sudo Konfigurationsdatei im Patch richtig lese, haben damit alle Benutzer alle Privilegien. Dann ist es doch besser, dass alle Benutzer ping ausführen können, das ist auf einem normalen Linux-System auch so.
Nein....
Mit sudo kann man jedes programm und jeder Benutzer Privilegien geben.
Es geht nicht nur um 'ping'

Fuhr 'ping' benutze ich suid. Jeder benutzer kann 'ping' ausführen. So feht es auch of dein normales Linux-System ( ls -l `which ping` )

Code:
root@fritz:/var/mod/root# cat /etc/sudoers.d/zabbix
zabbix ALL=(ALL) NOPASSWD: /bin/netstat
zabbix ALL=(ALL) NOPASSWD: /usr/bin/tcpdump
zabbix ALL=(ALL) NOPASSWD: /bin/grep
zabbix ALL=(ALL) NOPASSWD: /sbin/ifconfig
zabbix ALL=(ALL) NOPASSWD: /bin/ping

Gibt man zabbix alle Privilegien dan ist es einfacher um die Agent als 'root' zu verwenden.

Dass ist sudo...
Nicht zu verwirren mit suid (quick and dirty way):

Die applets in busybox kann man kein 'S' Attribut geben, weil es nur symlinks sind.
Das macht man mit ein /etc/busybox.conf, SUID angeschaltet und ein chmod +S auf /bin/busybox. Das letzte ist auch nötig sonst funktioniert es nicht.
busybox braucht selbst root Privilegien sonst kann er es auch nicht geben (eigentlich Logisch).

Wenn Man SUID-support nicht anschaltest dann können alle Benutzer alle applets mit root Privilegien verwenden.

http://lists.busybox.net/pipermail/busybox/2004-May/011551.html


Es ist nicht gut ein service mit root Privilegien laufen zu lassen....
Wie einfach konnte man vielen Jahren in ein DD-WRT router ohne Kennwort einbrechen.
 
Zuletzt bearbeitet:
Der Link zeigt auf eine Mail, die über 7 Jahre alt ist.

Busybox selbst enthält die Information, welche Applets SUID nutzen und welche nicht. Ich habe es mit strace verfolgt, die Datei /etc/busybox.conf wird nicht angesprochen.
 
Der Link zeigt auf eine Mail, die über 7 Jahre alt ist.

Busybox selbst enthält die Information, welche Applets SUID nutzen und welche nicht. Ich habe es mit strace verfolgt, die Datei /etc/busybox.conf wird nicht angesprochen.
Ich denke dass du zu schnell mit dein Schlussfolgerung bisst...
Did you set these options with make busybox-menuconfig?

Code:
[*] Support writing pidfiles

[*] Support for SUID/SGID handling

[*] Runtime SUID/SGID configuration via /etc/busybox.conf

[*] Suppress warning message if /etc/busybox.conf is not readable
[ ] Support NSA Security Enhanced Linux
 
Zuletzt bearbeitet:
Wir haben aber diese Optionen nicht aktiviert und Busybox Ping funktioniert trotzdem. Was ist also der Grund, diese Option zu aktivieren?
 
Wir haben aber diese Optionen nicht aktiviert und Busybox Ping funktioniert trotzdem. Was ist also der Grund, diese Option zu aktivieren?
Naturlich funktioniert ping fuhr die Benutzer 'root'
Auch funktioniert ping fuhr alle Benutzer wenn man dass SUID-attribut setzt auf busybox.
ping funktionierte nicht für Benutzer 'zabbix'

Vielleicht verdeutlich ich es hiermit:

SUID-attribut on auf busybox + Support for SUID handling on ==> einige applets (/etc/busybox.conf) kann man root privilegen geben an alternativen Benutzer
SUID-attribut off auf busybox + Support for SUID handling on ==> (falsches config) busybox kann kein root privilegen geben an alternativen Benutzer
SUID-attribut on auf busybox + Support for SUID handling off ==> Alle Benutzer haben Alle Privilegen
SUID-attribut off auf busybox + Support for SUID handling off ==> (default) Nur root hat ein funktionierendes 'ping'

Das alles ist schon möglich ohne 'sudo'
Mit sudo kann ich root Privilegen geben an 'zabbix' und nur selektiven Programmen ohne dass an anderen zu geben.
Wie "on need to know basis" kann man so die Integrität verbessern.....
 
Wie integriere ich dass?
Ich sehe es nicht wenn ich ein make menuconfig mache.

Oder ist dass fuhr die Zukunft?
 
Ganz einfach:
- Editiere die Datei ./make/Config.in
- Suche die Zeile 'menu "Testing"'
- füge am ende des Blocks vor 'endmenu' die Zeile 'source make/zabbix_agentd/Config.in' hinzu.

Daraufhin sollte "Zabbix Agent 1.8.15" unter "Package selection" --> "Testing" angezeigt werden.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.