wildlife

Teamspeak 3 – How to Chroot

// December 22nd, 2009 // IT, Tutorials

Viele Dienst sind oft Ziel eines Angriffs. Teamspeak ist einer davon. Gerade bei Diensten, die 24/7 laufen, sollte man entsprechende Sicherheitsmaßnahmen ergreifen, um bei einem erfolgreichen Angriff den Schaden zu minimieren. Dazu empfehle ich, Teamspeak 3 in einer chroot-Umgebung laufen zu lassen.

chroot steht für „change root“ und ist eine Funktion auf Unix-Systemen um das Rootverzeichnis zu ändern. Sie wirkt sich nur auf den aktuellen Prozess und seine Kindprozesse aus. „chroot“ selbst kann sich auf den Systemaufruf chroot(2) als auch das Dienstprogramm chroot(8) beziehen.

Ein Programm, das auf ein Verzeichnis re-rooted wurde, kann nicht mehr auf Dateien außerhalb dieses Verzeichnisses zugreifen. Chrooting bietet somit eine einfache Möglichkeit, nicht vertrauenswürdige, Test- oder sonstwie gefährliche Programme in eine Sandbox zu versetzen. Es ist auch ein einfacher Jail-Mechanismus. (via Wikipedia)

Da der Benutzer direkt nach dem Login in die chroot gesperrt werden soll, verwende ich das Programm chrlogin von Harald Weidner. Der Text dieses Scripts kann einfach in eine Datei kopiert werden (z.B. chrlogin.c). Anschließend ist noch eine Anpassung fällig. Abhängig von dem Verzeichnis, in welchen man den Benutzer chrooten möchte, muss die Zeile 45 angepasst werden (bei unserem Beispiel /home/chroot/ts3 wäre dies also Level 3):

#define CHROOT_LEVEL 3

Nun muss noch der Code kompiliert werden, um eine ausführbare Datei zu erhalten

gcc -Wall -O2 -s chrlogin.c -o chrlogin

Damit das Programm beim Aufruf ohne vollständigen Pfad gefunden wird, sollte man es in ein entsprechendes Verzeichnis kopieren:

cp chrlogin /usr/local/bin/

Jetzt noch die Datei mit den entsprechenden Berechtigungen versehen:

chown root:root /usr/local/bin/chrlogin
chmod 4755 /usr/local/bin/chrlogin

Nun sollte man den benötigten Verzeichnisbaum des Jails aufbauen. Ich habe hierbei /home/chroot/ts3 gewählt:

mkdir -p /home/chroot/ts3
cd /home/chroot/ts3
mkdir bin dev etc home lib usr var tmp
mkdir usr/bin usr/lib var/tmp
chmod 1777 tmp

Anschließend kopiert man die benötigten Binaries in das chroot, damit diese dort zur Verfügung stehen. Damit ein Angreifer im Falle einer Übernahme des Teamspeak Servers möglichst wenig Werkzeuge zur Anwendung vorfindet, kopiere ich nur die Shell selbst (hier /bin/bash) und nohup, mit welchem ich später den Teamspeak-Prozess im Hintergrund starten kann:

cp -p /bin/bash /home/chroot/ts3/bin/
cp -p /usr/bin/nohup /home/chroot/ts3/usr/bin/

Da die Programme / Binaries selbst noch diverse libraries benötigen, müssen wir diese in die /lib bzw. /usr/lib-Verzeichnisse des Chroot-Jails kopieren. Um herauszufinden, welche libs benötigt werden, kann man ldd nutzen. Hierbei muss jedoch der vollständige Pfad zu der Executable angegeben werden (z.B. ldd /bin/bash). Die verschiedenen libs notiert man sich und schaut, dass keine doppelt auftauchen. Anschließend kann man diese einfach an die benötigte Stelle kopieren:

cp -p /lib/libreadline.so.5 /home/chroot/ts3/lib/
cp -p /lib/libdl.so.2 /home/chroot/ts3/lib/
cp -p /lib/libc.so.6 /home/chroot/ts3/lib/
cp -p /lib/libncurses.so.5 /home/chroot/ts3/lib/
cp -p /lib/ld-linux.so.2 /home/chroot/ts3/lib/
cp -p /lib/librt.so.1 /home/chroot/ts3/lib/
cp -p /lib/libpthread.so.0 /home/chroot/ts3/lib/
cp -p /usr/lib/libstdc++.so.6 /home/chroot/ts3/usr/lib/
cp -p /lib/libm.so.6 /home/chroot/ts3/lib/
cp -p /lib/libgcc_s.so.1 /home/chroot/ts3/lib/
cp -p /lib/libresolv.so.2 /home/chroot/ts3/lib
cp -p /lib/libnss_dns.so.2 /home/chroot/ts3/lib

Danach sollte man noch ein paar Dateien aus /etc kopieren, die ggf. benötigt werden, um Hostnamen und ähnliches aufzulösen:

cp -p /etc/HOSTNAME /home/chroot/ts3/etc/
cp -p /etc/resolv.conf /home/chroot/ts3/etc/
cp -p /etc/hosts /home/chroot/ts3/etc/
cp -p /etc/fstab /home/chroot/ts3/etc/

Nun benötige ich noch einen Benutzer und eine Gruppe, mit welchen ich in dem Chroot-Jail Teamspeak 3 starten werde. Das Passwort kann und sollte natürlich geändert werden:

groupadd ts3
useradd -g ts3 -d /home/chroot/ts3/home/ts3 -m -s /usr/local/bin/chrlogin -p testpasswort ts3

Damit der Benutzer, das Passwort, die Gruppe, etc. auch im Chroot-Jail bekannt sind, muss ich die entsprechenden Einträge dort hin bringen. Dazu nutze ich grep, um nur die einzelnen Einträge zu kopieren:

grep ts3 /etc/passwd >> /home/chroot/ts3/etc/passwd
grep ts3 /etc/group >> /home/chroot/ts3/etc/group

In /home/chroot/ts3/etc/passwd muss ich noch das Home-Verzeichnis und die Shell von /home/chroot/ts3/home/ts3:/usr/local/bin/chrlogin auf /home/ts3:/bin/bash ändern. Nach der Benutzer und die Gruppe bekannt ist, kann ich dem Benutzer den Besitz auf die tmp-Verzeichnisse übertragen:

chown ts3:ts3 /home/chroot/ts3/tmp
chown ts3:ts3 /home/chroot/ts3/var/tmp

Nun benötige ich noch die null-, zero-, random- und urandom-Devices. /dev/null und /dev/zero lege ich mit mknod an, /dev/random und /dev/urandom mounte ich auf die Originalverzeichnisse:

mknod /home/chroot/ts3/dev/null c 1 3
chmod 666 /home/chroot/ts3/dev/null
mknod /home/chroot/ts3/dev/zero c 1 5
chmod 666 /home/chroot/ts3/dev/zero
mount -o bind /dev/random /home/chroot/ts3/dev/random
mount -o bind /dev/urandom /home/chroot/ts3/dev/urandom

Wenn Teamspeak 3 nicht als root gestartet wird (was es definitv nicht sollte), muss noch das shm-Device angelegt und als tempfs gemounted werden:

mkdir /home/chroot/ts3/dev/shm
mount -t tmpfs tmpfs /home/chroot/ts3/dev/shm

Danach kann man Teamspeak 3 in das neue Home-Verzeichnis des Benutzers kopieren und die Berechtigungen setzen:

cp -R ~/downloads/teamspeak3-server_linux-x86 /home/chroot/ts3/home/ts3
chown -R ts3:ts3 /home/chroot/ts3/home/ts3

Nun wechselt man mit su - ts3 in den neu angelegten Benutzeraccount und kann feststellen, dass man sich bereits im Chroot-Jail befindet. Da ich mehrere IP-Adresse auf meinem Server habe, muss ich diese in der ini-Datei für Teamspeak 3 angeben. Um diese ini-Datei zu erstellen, welchselt man in das teamspeak-Verzeichnis und startet die Executable mit dem Parameter createinifile=1:

cd teamspeak3-server_linux-x86/
./ts3server_linux_x86 createinifile=1

Die Datei kann nun z.B. über den root-Account angepasst werden. Im Chroot-Jail ist dies nicht möglich, da ich keinen Editor rüber kopiert habe. Nach dem Anpassen kann der Server nun mit dem Parameter inifile=<namederinidatei> gestartet werden:

./ts3server_linux_x86 inifile=server.ini

Hierbei läuft der Teamspeak 3 Server jedoch nur so lange, bis die Konsole geschlossen wird. Aus diesem Grund sollte man den Dienst mit nohup und dem Parameter >/dev/null 2>&1 & starten, um diesen auch bei geschlossener Session im Hintergrund laufen zu lassen:

nohup ./ts3server_linux_x86 inifile=server.ini >/dev/null 2>&1 &

Viel Spaß mit Eurem sicheren Teamspeak 3 Server.

Dank geht an

PS: In Kürze wird es wohl auch ein Script geben, mit welchem die oben gezeigten Aufgaben automatisch durchgeführt werden können. Dieses werde ich dann hier zur Verfügung stellen.

UPDATE 22.12.2009 1855 Uhr
Nachdem ich meine Non-Profit-Lizenz bekommen habe und der Teamspeak 3 Server bei der Lizenzüberprüfung zu den Aktivierungsservern verbindet, trat ein Fehler auf. Grund waren hierfür folgende fehlende Dateien:

cp -p /lib/libresolv.so.2 /home/chroot/ts3/lib
cp -p /lib/libnss_dns.so.2 /home/chroot/ts3/lib

Ich habe diese oben ergänzt, so dass die Anleitung auch bei Nutzung einer Lizenz funktioniert.

Ähnliche Beiträge:


34 Responses to “Teamspeak 3 – How to Chroot”

  1. Jetzt fehlen nur noch ein paar Screenshots. Nein Scherz bei Seite. Werd es mal bei Gelegenheit auf meinem Testserver testen. ;) Danke für die Inspiration.

    Gruß,
    Adrian

  2. Uli says:

    Dachte mir schon beim lesen des Titels "Irgendwoher kennste das doch ..." ;) Wusste doch, ich hatte mal drüber geschrieben für die alte Version.

    • Torsten says:

      Hehe... habe mich auch gewundert, als ich nach Teamspeak und Chroot gesucht habe und Deinen Artikel ganz oben fand. :D Aber der Trackback ist scheinbar nicht angekommen oder haste ihn nur noch nicht freigeschaltet?

  3. Uli says:

    Kam keiner an, WordPress versendet nicht immer gleich alle. Musst nur den Artikel ein paar mal aktualisieren, bis alle versendet wurden ;)

  4. Torsten says:

    Ich schnall jedoch noch nicht ganz, wie ich jetzt ein Startscript erstellen kann, welches Teamspeak auch wirklich in dem chroot startet.

    Weil eigentlich müsste das Script ja erst in die 'gechrootete Shell' wechseln, um dort Teamspeak zu starten.

    • Uli says:

      Schau dir mal in meinem Beitrag unten das Init-Script an ;) der start-stop-daemon kann das bereits ;)
      Vg,
      Uli

      • Torsten says:

        Ich traue dem ganzen zwar noch nicht so 100%ig, aber ich werd's mal so umsetzen. ;)

        Danke Dir! :) Schöne Festtage noch.

        • Uli says:

          Sagen wirs mal so, ich wüsste jetzt nicht, wie ich es sonst "praktikabel" umsetzen würde. Wünsch dir ebenfalls schöne Feiertage!
          Vg,
          Uli

        • Torsten says:

          hmm... wollte mir gerade nochmal Dein Script anschauen, aber bekomme vom FF ein Downloadfenster für "application/octet-stream", wenn ich versuche die Seite zu öffnen.

        • Uli says:

          Ich fummel momentan am Webserver rum, jetzt sollte es grad wieder gehen^^ Mein nginx spielt noch nicht ganz so wie ich will ;)

  5. Chris says:

    Ist es möglich aus der chroot umgebung TS3 auch mit MySQL zu betreiben ?

    • Torsten says:

      Versuch mal mittels "mount -o" das Verzeichnis /var/lib/mysql aus dem 'Non-Chroot' in das Chroot zu mounten. Danach sollte eigentlich Teamspeak 3 auch auf MySQL-Server zugreifen können.

      • Chris says:

        Danke für den Tip
        habe es jetzt aber anders gelöst.

        einfach folgende libraries noch in's chroot kopieren

        cp -p /usr/lib/libmysqlclient.so.15 /home/chroot/ts3/lib/
        cp -p /usr/lib/libstdc++.so.6 /home/chroot/ts3/usr/lib/
        cp -p /lib/libm.so.6 /home/chroot/ts3/lib/
        cp -p /lib/libgcc_s.so.1 /home/chroot/ts3/lib/
        cp -p /lib/libc.so.6 /home/chroot/ts3/lib/
        cp -p /lib/libpthread.so.0 /home/chroot/ts3/lib/
        cp -p /lib/libcrypt.so.1 /home/chroot/ts3/lib/
        cp -p /lib/libnsl.so.1 /home/chroot/ts3/lib/
        cp -p /usr/lib/libz.so.1 /home/chroot/ts3/usr/lib/

        und in der ts3db_mysql.ini "locahlhost" durch die IP des Servers ersetzten (scheint anders nicht zu gehen)

        den rest wie gehabt (die Anleitung ist spitze) und Teamspeak läuft mit MySQL im chroot

        Randnotiz:
        aus welchem Grund auch immer, sind alle Versuche Fehlgeschlagen "random & urandom" zu mounten da sie aber zur Erstellung der ID's benötigt werden habe ich einfach neue "Generiert"
        mknod -m 444 /home/chroot/ts3/dev c 1 10
        mknod -m 444 /home/chroot/ts3/dev c 1 11

        • Torsten says:

          Super, vielen Dank für die Informationen. Werde den Beitrag um Deine Infos sobald wie möglich ergänzen.
          Viel Spaß noch mit TeamSpeak 3 ;)

  6. MHJ says:

    Leider bekomme ich bei den beiden mounts eine Fehlermeldung das die betreffende Datei nicht existiert.
    mount -o bind /dev/random /home/chroot/TS3ROB/dev/random
    mount: mount point /home/chroot/TS3ROB/dev/random does not exist

    Versuche ich dann
    mknod -m 444 /home/chroot/ts3/dev c 1 10
    mknod -m 444 /home/chroot/ts3/dev c 1 11

    kommt die Fehlermeldung File exist

    v32381:~# mknod -m 444 /home/chroot/TS3ROB/dev c 1 10
    mknod: `/home/chroot/TS3ROB/dev': File exists

    kann mir da wer weiterhelfen?

    LG

    MHJ

  7. Chris says:

    Hallo Torsten,
    danke für die gute Anleitung! Woher hast du das Programm "chrlogin". Ich konnte es leider nicht finden. Als Distro benutze ich Debian Lenny.

    Auch habe ich versucht das Skript von Uli habe ich schon versucht anzupassen, doch leider will das nicht so richtig funktionieren. In diesem Skript war die chroot Funktion ja schon integriert.

  8. Hallo
    Ich bekomme immer folgenden fehler !
    Was mache ich falsch ?

    chrlogin: Could not chdir to new home directory /home/chroot/ts3/home/ts3 for user #10002:
    No such file or directory

    MFG

    • neji says:

      hast du in der /home/chroot/ts3/etc/passwd auch den pfad von '/home/chroot/ts3/home/ts3' auf '/home/ts3' geaendert?

  9. Hallo
    Ich bekomme immer folgenden fehler !
    was ist das ?

    chrlogin: Could not chdir to new home directory /home/chroot/ts3/home/ts3 for user #10002:
    No such file or directory

  10. Polygon says:

    Hi,
    ich habe vor, meinen Ts3 Server auch in einem chroot Modus zu betreiben, habe aber grad erst mit Linux angefangen. Muss ich nur dein Tut abarbeiten oder muss ich auch die Schritte in der Installationsanleitung vom Script befolgen?
    (http://wiki.ubuntuusers.de/chroot/chrlogin)

    Danke schon mal für das Tut

    MfG

  11. René says:

    Hi,

    super Anleitung. Leider bekomme ich random und urandom weder gemountet noch mit mknod angelegt.

    Betriebssystem: Debian Lenny
    Könntet Ihr mir da bitte weiterhelfen??

    Danke
    René

    • René says:

      Hat sich grad erledigt.

      Unter Debian Lenny muss man

      mknod -m 444 /home/chroot/ts3/dev/random c 1 8
      mknod -m 444 /home/chroot/ts3/dev/urandom c 1 9

      verwenden

  12. Robin says:

    Hi!

    ich würd gerne auch meinen ts3 server chroot'en. leider ist das script aber down... gibt es eine möglichkeit das script noch wo anders zu laden oder es ganz weg zu lassen? hab zwar bei google mal nach dem script gegooglet aber das sah anders aus und war fast immer nen direct link und das war mir dann doch zu gefährlich^^

  13. Joost says:

    You can use the start/stopscript supplied by Teamspeak (with a small adjustment of the BINARYPATH variable) and run it from your own session in a single command.

    $ sudo su - teamspeak ./path-inside-chroot/ts3server_startscript.sh start

    And this seems to work pretty nicely in an init.d script, see http://pastebin.com/xedjJJWk for an example. You can have i started on server-boot and keep it running without nohup (or similar apps).

  14. Sebi says:

    Hallo Zusammen

    Ich bringe leider das jailroot nicht zum laufen.
    Ich erhalte wie RadioAdmin die Fehlermeldung "-su: Could not chdir to new home directory /home/chroot/ts3/home/ts3 for user #1000:" beim Versuch mich als jailrooted user anzumelden.

    chrlogin.c hab ich mit CHROOT_LEVEL 3 kompiliert und die Verzeichnisstruktur wie von Torsten im Artikel abgebildet.

    Anbei die beiden passwd Files:
    /etc/passwd
    ts3:x:1000:109::/home/chroot/ts3/home/ts3:/usr/local/bin/chrlogin

    /home/chroot/ts3/etc/passwd
    ts3:x:1000:109::/home/ts3:/bin/bash

    Kann mir jemand helfen oder sagen was ich noch an Informationen bereitstellen soll?

    Gruess Sebi

    • Torsten says:

      Ich denke, das wird an der uid 1000 liegen. Die 1000 ist normalerweise die UID für den root-Benutzer und den willst Du ja nicht chrooten.

    • Marcel says:

      Nein, das liegt nicht an der UID.
      Bei meinem Debian squeeze wurde für den Benutzer und die Gruppe ebenfalls 1000 vergeben (root hat 0).

      Ich hatte ebenfalls das Problem und habe hier eine die Problemursache und Lösung gefunden:
      http://www.linuxforen.de/forums/showthread.php?t=215987

      In /etc/nscd.conf folgende Einträge auf "no" setzen:
      enable-cache passwd no
      enable-cache group no

      Anschliessend daemon neustarten (für debian):
      srv:~# invoke-rc.d nscd restart

  15. Alex says:

    Hallo,
    ich hab dieses chroot genau nach der obigen Anleitung durchgeführt ..allerdings ging bei mir dieses: mount -o bind /dev/random /home/chroot/ts3/dev/random
    mount -o bind /dev/urandom /home/chroot/ts3/dev/urandom nicht! Weshalb ich es wie mein Serveranbieter empfohlen hat mit: mknod -m 644 /home/chroot/ts3/dev/random c 1 8
    chown root:root /home/chroot/ts3/dev/random zu machen. Sonst hat alles funktioniert. Wenn ich das Jail betrete mit "su - ts3" kommt immer die Meldung: su - ts3
    bash: dircolors: command not found
    I have no name!@xyz:~$
    Wenn ich jetzt versuche TS3 zu starten erhalte ich folgende Meldungen:
    ./ts3server_minimal_runscript.sh
    bash: ./ts3server_minimal_runscript.sh: /bin/sh: bad interpreter: No such file or directory
    I have no name!@xyz:~/teamspeak3-server_linux-x86$
    oder:
    ./ts3server_linux_x86 inifile=server.ini
    TeamSpeak Server 3.0.0-beta29 [Build: 12473]
    (c)TeamSpeak Systems GmbH

    Logging started
    2010-11-20 01:07:53.246710|INFO |ServerLibPriv | | Server Version: 3.0.0-beta29 [Build: 12473], Linux
    2010-11-20 01:07:53.246942|INFO |DatabaseQuery | | Please make sure you use the supplied ts3server_minimal_runscript.sh to run the server, or set LD_LIBRARY_PATH yourself
    2010-11-20 01:07:53.246982|CRITICAL|DatabaseQuery | | unable to load database plugin library "libts3db_sqlite3.so", halting!
    I have no name!@xyz:~/teamspeak3-server_linux-x86$

    Weiter komme ich nicht... Bitte um Hilfe !!!

  16. Alex says:

    ...ok hat sich erledigt.
    Mir fehlte die /bin/sh im chroot
    Jetzt funktioniert es, frage mich nur warum andere das Problem nicht haben/hatten?

  17. Apropo says:

    Ich bekomme beim Kompilieren leider folgende Masse an Fehlern. Kann da vielleicht jemand was mit anfangen? Der Server läuft mit Debian Squeeze.

    chrlogin.c:46: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CHROOT_LEVEL'
    In file included from /usr/include/stdio.h:75,
    from chrlogin.c:52:
    /usr/include/libio.h:332: error: expected specifier-qualifier-list before 'size_t'
    /usr/include/libio.h:364: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/libio.h:373: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/libio.h:495: error: expected '=', ',', ';', 'asm' or '__attribute__' before '_IO_sgetn'
    In file included from chrlogin.c:52:
    /usr/include/stdio.h:296: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:302: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:314: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:321: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:363: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:365: error: format string argument not a string type
    /usr/include/stdio.h:367: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:369: error: format string argument not a string type
    /usr/include/stdio.h:639: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:642: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:652: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdio.h:682: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'fread'
    /usr/include/stdio.h:688: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'fwrite'
    /usr/include/stdio.h:710: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'fread_unlocked'
    /usr/include/stdio.h:712: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'fwrite_unlocked'
    In file included from chrlogin.c:53:
    /usr/include/unistd.h:357: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:363: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:507: error: expected declaration specifiers or '...' before 'size_t'
    In file included from chrlogin.c:53:
    /usr/include/unistd.h:618: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'confstr'
    /usr/include/unistd.h:790: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:826: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:837: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:873: error: expected declaration specifiers or '...' before 'size_t'
    In file included from chrlogin.c:53:
    /usr/include/unistd.h:895: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:902: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:913: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:915: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:933: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/unistd.h:934: error: expected declaration specifiers or '...' before 'size_t'
    In file included from chrlogin.c:54:
    /usr/include/stdlib.h:140: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__ctype_get_mb_cur_max'
    In file included from chrlogin.c:54:
    /usr/include/stdlib.h:337: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:367: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:369: error: nonnull argument with out-of-range operand number (argument 1, operand 4)
    /usr/include/stdlib.h:471: error: expected ')' before '__size'
    /usr/include/stdlib.h:473: error: expected ')' before '__nmemb'
    /usr/include/stdlib.h:485: error: expected declaration specifiers or '...' before 'size_t'
    In file included from /usr/include/stdlib.h:497,
    from chrlogin.c:54:
    /usr/include/alloca.h:33: error: expected ')' before '__size'
    In file included from chrlogin.c:54:
    /usr/include/stdlib.h:502: error: expected ')' before '__size'
    /usr/include/stdlib.h:507: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:507: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:751: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:751: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:752: error: nonnull argument with out-of-range operand number (argument 1, operand 5)
    /usr/include/stdlib.h:756: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:756: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:757: error: nonnull argument with out-of-range operand number (argument 1, operand 4)
    /usr/include/stdlib.h:834: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:837: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:841: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:845: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:854: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:858: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/stdlib.h:865: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mbstowcs'
    /usr/include/stdlib.h:868: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'wcstombs'
    In file included from chrlogin.c:56:
    /usr/include/string.h:44: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:48: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:57: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:64: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:67: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:94: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:131: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:139: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:145: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:152: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'strxfrm'
    In file included from chrlogin.c:56:
    /usr/include/string.h:167: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'strxfrm_l'
    /usr/include/string.h:181: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:282: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'strcspn'
    /usr/include/string.h:286: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'strspn'
    /usr/include/string.h:397: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'strlen'
    /usr/include/string.h:404: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'strnlen'
    /usr/include/string.h:425: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:449: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:453: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:457: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:460: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:538: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:575: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/string.h:578: error: expected declaration specifiers or '...' before 'size_t'
    In file included from /usr/include/string.h:635,
    from chrlogin.c:56:
    /usr/include/bits/string2.h:969: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strcspn_c1'
    /usr/include/bits/string2.h:971: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strcspn_c1'
    /usr/include/bits/string2.h:979: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strcspn_c2'
    /usr/include/bits/string2.h:982: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strcspn_c2'
    /usr/include/bits/string2.h:991: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strcspn_c3'
    /usr/include/bits/string2.h:994: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strcspn_c3'
    /usr/include/bits/string2.h:1045: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strspn_c1'
    /usr/include/bits/string2.h:1047: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strspn_c1'
    /usr/include/bits/string2.h:1056: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strspn_c2'
    /usr/include/bits/string2.h:1059: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strspn_c2'
    /usr/include/bits/string2.h:1068: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strspn_c3'
    /usr/include/bits/string2.h:1071: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__strspn_c3'
    /usr/include/bits/string2.h: In function '__strpbrk_c2':
    /usr/include/bits/string2.h:1129: error: 'size_t' undeclared (first use in this function)
    /usr/include/bits/string2.h:1129: error: (Each undeclared identifier is reported only once
    /usr/include/bits/string2.h:1129: error: for each function it appears in.)
    /usr/include/bits/string2.h:1129: error: expected ';' before '__s'
    /usr/include/bits/string2.h: In function '__strpbrk_c3':
    /usr/include/bits/string2.h:1142: error: 'size_t' undeclared (first use in this function)
    /usr/include/bits/string2.h:1142: error: expected ';' before '__s'
    /usr/include/bits/string2.h: At top level:
    /usr/include/bits/string2.h:1322: error: expected declaration specifiers or '...' before 'size_t'
    In file included from chrlogin.c:57:
    /usr/include/pwd.h:141: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/pwd.h:147: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/pwd.h:152: error: expected declaration specifiers or '...' before 'size_t'
    /usr/include/pwd.h:166: error: expected declaration specifiers or '...' before 'size_t'
    chrlogin.c: In function 'main':
    chrlogin.c:119: error: 'CHROOT_LEVEL' undeclared (first use in this function)
    chrlogin.c:136: warning: implicit declaration of function 'strlen'
    chrlogin.c:136: warning: incompatible implicit declaration of built-in function 'strlen'

Leave a Reply