[Gelöst] ShellInABox als Vordergrundprogramm oder als Daemon

PeterPawn

IPPF-Urgestein
Mitglied seit
10 Mai 2006
Beiträge
15,138
Punkte für Reaktionen
1,703
Punkte
113
Benutzt hier irgendjemand ShellInABox (2.14, vom originalen Github-Account geladen, Patches aus dem Freetz-Paket) im Daemon-Mode (genauer nicht im CGI-Mode)?

Anstelle einer .config-Datei nur die betreffenden Settings, ein "clean build" ausschließlich mit diesem Paket läuft im Moment gerade bei mir ... wenn sich mein Fehler bestätigt, kommt eine ordentliche .config-Datei dazu.
Code:
FREETZ_PACKAGE_SHELLINABOX=y
FREETZ_PACKAGE_SHELLINABOX_STATIC=y
FREETZ_PACKAGE_SHELLINABOX_SSL=y

Auf einer 7490 funktioniert das erst einmal nicht, inzwischen auch auf einer 7390 nicht mehr (hier ging es vorher aus irgendeinem Grund, aber da könnte ich auch die Quellen verändert haben vor einiger Zeit, was leider einem unüberlegten "make distclean" zum Opfer fiel):
Code:
root@FB7490:~ $ cd /var/media/ftp/bin/
root@FB7490:/var/media/ftp/bin $ ls -l ./shellinaboxd;./shellinaboxd -d -t -g 0 -u 0 --service=/:0:0:/:/bin/sh
-rwxr-xr-x    1 root     root       1429460 May 15 14:27 ./shellinaboxd
Command line: ./shellinaboxd -d -t -g 0 -u 0 --service=/:0:0:/:/bin/sh
Listening on port 4200
Accepted connection from 192.168.123.2:55956
Handling "GET" "/"
Compressed response from 4967 to 2124
192.168.123.2 - - [15/May/2015:15:06:32 +0200] "GET / HTTP/1.1" 200 2217
Handling "GET" "/styles.css"
Compressed response from 7286 to 1498
192.168.123.2 - - [15/May/2015:15:06:32 +0200] "GET /styles.css HTTP/1.1" 200 1630
Accepted connection from 192.168.123.2:55957
Handling "GET" "/ShellInABox.js"
Compressed response from 186756 to 41961
192.168.123.2 - - [15/May/2015:15:06:32 +0200] "GET /ShellInABox.js HTTP/1.1" 200 42076
Handling "GET" "/favicon.ico"
Compressed response from 2307 to 1983
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "GET /favicon.ico HTTP/1.1" 200 2079
Handling "GET" "/favicon.ico"
Compressed response from 2307 to 1983
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "GET /favicon.ico HTTP/1.1" 200 2079
Handling "GET" "/favicon.ico"
Compressed response from 2307 to 1983
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "GET /favicon.ico HTTP/1.1" 200 2079
Handling "GET" "/keyboard.png"
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "GET /keyboard.png HTTP/1.1" 200 873
Handling "GET" "/keyboard.html"
Compressed response from 3181 to 801
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "GET /keyboard.html HTTP/1.1" 200 893
Handling "POST" "/?"
Creating a new session: iMQrtZuDmGEVlr9LHl2j6Q
Window size changed to 190x56
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "POST /? HTTP/1.1" 200 157
[COLOR="#FF0000"]Child terminated[/COLOR]
Handling "POST" "/?"
Failed to find session: iMQrtZuDmGEVlr9LHl2j6Q
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "POST /? HTTP/1.1" 400 458
Closing connection to 192.168.123.2:55957
Handling "POST" "/?"
Failed to find session: iMQrtZuDmGEVlr9LHl2j6Q
192.168.123.2 - - [15/May/2015:15:06:33 +0200] "POST /? HTTP/1.1" 400 458
Closing connection to 192.168.123.2:55956
^CShutting down server
Done
root@FB7490:/var/media/ftp/bin $
Ich reduziere gerade die Umgebung auf "minimales Freetz", nur mit diesem einen Paket, um Seiteneffekte an anderen Stellen auszuschließen und baue ausschließlich das ShellInABox-Paket für Vx180 und VR9.

Um einen Anhaltspunkt zu haben, ob irgendetwas an meiner Build-Umgebung nicht stimmt oder ob das ein Problem des Paketes ist (das statische Binary hat wirklich keine weiteren Referenzen auf irgendwelche Libs, ich habe es vor dem Strippen - ab heute auch Rotlicht-Werbung, wenn der Spider das liest? - geprüft), wäre es nützlich zu wissen, ob das bei jemand anderem in der oben gezeigten Art funktioniert.

Die Ursache des "Child terminated" ist nach "strace" ein POLLHUP-Signal für einen - meiner Meinung nach unbenutzten - File-Deskriptor im Rahmen eines "poll"-Calls für mehrere Files. Der unten rot markierte Aufruf endet mit einem Fehler für FD 7, der aber (darüber in blau markiert) eigentlich schon geschlossen ist und nur dazu diente, etwas Zufall aus /dev/urandom zu ziehen.
Code:
root@FB7490:~ $ strace ../bin/shellinaboxd -d -t -g 0 -u 0 --service=/:0:0:/:/bin/sh
execve("../bin/shellinaboxd", ["../bin/shellinaboxd", "-d", "-t", "-g", "0", "-u", "0", "--service=/:0:0:/:/bin/sh"], [/* 286 vars */]) = 0
brk(0)                                  = 0x572000
brk(0x572c58)                           = 0x572c58
set_thread_area(0x579440)               = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
prctl(PR_SET_DUMPABLE, 0)               = 0
setrlimit(RLIMIT_CORE, {rlim_cur=0, rlim_max=4195992}) = 0
getrlimit(RLIMIT_CPU, {rlim_cur=9223372034707292159, rlim_max=9223372032564004520}) = 0
getrlimit(RLIMIT_DATA, {rlim_cur=9223372034707292159, rlim_max=9223372032564004520}) = 0
getrlimit(RLIMIT_FSIZE, {rlim_cur=9223372034707292159, rlim_max=9223372032564004520}) = 0
getrlimit(RLIMIT_NPROC, {rlim_cur=4118873637823, rlim_max=9223372032564004520}) = 0
setrlimit(RLIMIT_NPROC, {rlim_cur=4121021120511, rlim_max=9223372032564004576}) = 0
getrlimit(RLIMIT_NPROC, {rlim_cur=4121021120511, rlim_max=9223372032564004588}) = 0
setrlimit(RLIMIT_NPROC, {rlim_cur=9223372034707292159, rlim_max=9223372032564004652}) = 0
brk(0x573c58)                           = 0x573c58
brk(0x574000)                           = 0x574000
brk(0x576000)                           = 0x576000
open("/etc/passwd", O_RDONLY)           = 3
ioctl(3, TIOCNXCL, 0x7fb6fa38)          = -1 ENOTTY (Inappropriate ioctl for device)
brk(0x577000)                           = 0x577000
read(3, "root:x:0:0:root:/var/media/ftp/r"..., 4096) = 545
close(3)                                = 0
open("/etc/group", O_RDONLY)            = 3
ioctl(3, TIOCNXCL, 0x7fb6fa40)          = -1 ENOTTY (Inappropriate ioctl for device)
read(3, "root:x:0:\n", 4096)            = 10
close(3)                                = 0
write(2, "Command line:", 13Command line:)           = 13
write(2, " ../bin/shellinaboxd -d -t -g 0 "..., 62 ../bin/shellinaboxd -d -t -g 0 -u 0 --service=/:0:0:/:/bin/sh) = 62
write(2, "\n", 1
)                       = 1
socketpair(PF_LOCAL, SOCK_STREAM, 0, [3, 4]) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x572068) = 8606
close(4)                                = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
gettimeofday({1431702047, 622609}, NULL) = 0
bind(4, {sa_family=AF_INET, sin_port=htons(4200), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(4, 128)                          = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(4200), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
write(2, "Listening on port ", 18Listening on port )      = 18
write(2, "4200", 44200)                     = 4
write(2, "\n", 1
)                       = 1
getresuid([0], [0], [0])                = 0
getresgid([0], [0], [0])                = 0
setgroups(0, [])                        = 0
getresuid([0], [0], [0])                = 0
setresgid(0, 0, 0)                      = 0
setresuid(0, 0, 0)                      = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 16) = 0
rt_sigaction(SIGHUP, {0x80000008, [], SA_SIGINFO|0x401c44}, NULL, 16) = 0
rt_sigaction(SIGINT, {0x80000008, [], SA_SIGINFO|0x401c44}, NULL, 16) = 0
rt_sigaction(SIGQUIT, {0x80000008, [], SA_SIGINFO|0x401c44}, NULL, 16) = 0
rt_sigaction(SIGTERM, {0x80000008, [], SA_SIGINFO|0x401c44}, NULL, 16) = 0
time([1431702047])                      = 1431702047
poll([{fd=4, events=POLLIN}], 1, -1)    = 1 ([{fd=4, revents=POLLIN}])
time([1431702108])                      = 1431702108
accept(4, {sa_family=AF_INET, sin_port=htons(56612), sin_addr=inet_addr("192.168.123.2")}, [16]) = 5
fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
getpeername(5, {sa_family=AF_INET, sin_port=htons(56612), sin_addr=inet_addr("192.168.123.2")}, [16]) = 0
open("/etc/hosts", O_RDONLY)            = 6
ioctl(6, TIOCNXCL, 0x7fb6f580)          = -1 ENOTTY (Inappropriate ioctl for device)
read(6, "127.0.0.1 localhost\n", 4096)  = 20
read(6, "", 4096)                       = 0
close(6)                                = 0
stat64("/etc/resolv.conf", {st_mode=S_IFREG|0777, st_size=21, ...}) = 0
open("/etc/resolv.conf", O_RDONLY)      = 6
ioctl(6, TIOCNXCL, 0x7fb6f278)          = -1 ENOTTY (Inappropriate ioctl for device)
read(6, "nameserver 127.0.0.1\n", 4096) = 21
read(6, "", 4096)                       = 0
close(6)                                = 0
uname({sys="Linux", node="FB7490", ...}) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 6
connect(6, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 28) = 0
send(6, "\0\2\1\0\0\1\0\0\0\0\0\0\0012\003130\003168\003192\7in-ad"..., 44, 0) = 44
poll([{fd=6, events=POLLIN}], 1, 5000)  = 1 ([{fd=6, revents=POLLIN}])
recv(6, "\0\2\201\3\0\1\0\0\0\0\0\0\0012\003130\003168\003192\7in-ad"..., 512, MSG_DONTWAIT) = 44
close(6)                                = 0
write(2, "Accepted connection from ", 25Accepted connection from ) = 25
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, ":", 1:)                        = 1
write(2, "56612", 556612)                    = 5
write(2, "\n", 1
)                       = 1
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}], 2, 601000) = 1 ([{fd=5, revents=POLLIN}])
time([1431702108])                      = 1431702108
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, "GET / HTTP/1.1\r\nHost: 192.168.13"..., 4096) = 305
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/", 1/)                        = 1
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x578000)                           = 0x578000
brk(0x579000)                           = 0x579000
brk(0x57b000)                           = 0x57b000
brk(0x57c000)                           = 0x57c000
brk(0x58c000)                           = 0x58c000
brk(0x59c000)                           = 0x59c000
brk(0x5ac000)                           = 0x5ac000
brk(0x5bc000)                           = 0x5bc000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "4967", 44967)                     = 4
write(2, " to ", 4 to )                     = 4
write(2, "2124", 42124)                     = 4
write(2, "\n", 1
)                       = 1
brk(0x57c000)                           = 0x57c000
time(NULL)                              = 1431702108
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:48 +0200]", 28[15/May/2015:17:01:48 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/", 1/)                        = 1
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "2217", 42217)                     = 4
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(5, "HTTP/1.1 200 OK\r\nContent-Type: t"..., 2217) = 2217
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}], 2, 601000) = 1 ([{fd=5, revents=POLLIN}])
time([1431702108])                      = 1431702108
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, "GET /styles.css HTTP/1.1\r\nHost: "..., 4096) = 307
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/styles.css", 11/styles.css)             = 11
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x58c000)                           = 0x58c000
brk(0x59c000)                           = 0x59c000
brk(0x5ac000)                           = 0x5ac000
brk(0x5bc000)                           = 0x5bc000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "7286", 47286)                     = 4
write(2, " to ", 4 to )                     = 4
write(2, "1498", 41498)                     = 4
write(2, "\n", 1
)                       = 1
brk(0x57c000)                           = 0x57c000
time(NULL)                              = 1431702108
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:48 +0200]", 28[15/May/2015:17:01:48 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/styles.css", 11/styles.css)             = 11
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "1630", 41630)                     = 4
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(5, "HTTP/1.1 200 OK\r\nContent-Type: t"..., 1630) = 1630
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}], 2, 601000) = 1 ([{fd=4, revents=POLLIN}])
time([1431702108])                      = 1431702108
accept(4, {sa_family=AF_INET, sin_port=htons(56613), sin_addr=inet_addr("192.168.123.2")}, [16]) = 6
fcntl64(6, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
getpeername(6, {sa_family=AF_INET, sin_port=htons(56613), sin_addr=inet_addr("192.168.123.2")}, [16]) = 0
open("/etc/hosts", O_RDONLY)            = 7
ioctl(7, TIOCNXCL, 0x7fb6f580)          = -1 ENOTTY (Inappropriate ioctl for device)
read(7, "127.0.0.1 localhost\n", 4096)  = 20
read(7, "", 4096)                       = 0
close(7)                                = 0
stat64("/etc/resolv.conf", {st_mode=S_IFREG|0777, st_size=21, ...}) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 7
connect(7, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 28) = 0
send(7, "\0\3\1\0\0\1\0\0\0\0\0\0\0012\003130\003168\003192\7in-ad"..., 44, 0) = 44
poll([{fd=7, events=POLLIN}], 1, 5000)  = 1 ([{fd=7, revents=POLLIN}])
recv(7, "\0\3\201\3\0\1\0\0\0\0\0\0\0012\003130\003168\003192\7in-ad"..., 512, MSG_DONTWAIT) = 44
close(7)                                = 0
write(2, "Accepted connection from ", 25Accepted connection from ) = 25
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, ":", 1:)                        = 1
write(2, "56613", 556613)                    = 5
write(2, "\n", 1
)                       = 1
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 3, 601000) = 2 ([{fd=5, revents=POLLIN}, {fd=6, revents=POLLIN}])
time([1431702108])                      = 1431702108
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, "GET /favicon.ico HTTP/1.1\r\nHost:"..., 4096) = 316
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/favicon.ico", 12/favicon.ico)            = 12
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x589000)                           = 0x589000
brk(0x599000)                           = 0x599000
brk(0x5a9000)                           = 0x5a9000
brk(0x5b9000)                           = 0x5b9000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "2307", 42307)                     = 4
write(2, " to ", 4 to )                     = 4
write(2, "1983", 41983)                     = 4
write(2, "\n", 1
)                       = 1
brk(0x579000)                           = 0x579000
time(NULL)                              = 1431702108
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:48 +0200]", 28[15/May/2015:17:01:48 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/favicon.ico", 12/favicon.ico)            = 12
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "2079", 42079)                     = 4
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(5, "HTTP/1.1 200 OK\r\nContent-Type: i"..., 2079) = 2079
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, "GET /ShellInABox.js HTTP/1.1\r\nHo"..., 4096) = 296
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/ShellInABox.js", 15/ShellInABox.js)         = 15
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x5a5000)                           = 0x5a5000
brk(0x5d2000)                           = 0x5d2000
brk(0x5d4000)                           = 0x5d4000
brk(0x5e4000)                           = 0x5e4000
brk(0x5f4000)                           = 0x5f4000
brk(0x604000)                           = 0x604000
brk(0x614000)                           = 0x614000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "186756", 6186756)                   = 6
write(2, " to ", 4 to )                     = 4
write(2, "41961", 541961)                    = 5
write(2, "\n", 1
)                       = 1
brk(0x5d4000)                           = 0x5d4000
brk(0x581000)                           = 0x581000
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:48 +0200]", 28[15/May/2015:17:01:48 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/ShellInABox.js", 15/ShellInABox.js)         = 15
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "42076", 542076)                    = 5
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(6, "HTTP/1.1 200 OK\r\nContent-Type: t"..., 42076) = 36500
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(6, "\7\374;\340\177\2\376'\340\177\2\376'\340\177\2\376'\340\177\2\376'\340\177\2\376'\340\177\2\376"..., 5576) = 5576
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 3, 601000) = 1 ([{fd=5, revents=POLLIN}])
time([1431702109])                      = 1431702109
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, "GET /favicon.ico HTTP/1.1\r\nHost:"..., 4096) = 316
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/favicon.ico", 12/favicon.ico)            = 12
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x589000)                           = 0x589000
brk(0x599000)                           = 0x599000
brk(0x5a9000)                           = 0x5a9000
brk(0x5b9000)                           = 0x5b9000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "2307", 42307)                     = 4
write(2, " to ", 4 to )                     = 4
write(2, "1983", 41983)                     = 4
write(2, "\n", 1
)                       = 1
brk(0x579000)                           = 0x579000
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/favicon.ico", 12/favicon.ico)            = 12
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "2079", 42079)                     = 4
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(5, "HTTP/1.1 200 OK\r\nContent-Type: i"..., 2079) = 2079
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 3, 600000) = 1 ([{fd=6, revents=POLLIN}])
time([1431702109])                      = 1431702109
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, "GET /favicon.ico HTTP/1.1\r\nHost:"..., 4096) = 286
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/favicon.ico", 12/favicon.ico)            = 12
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x589000)                           = 0x589000
brk(0x599000)                           = 0x599000
brk(0x5a9000)                           = 0x5a9000
brk(0x5b9000)                           = 0x5b9000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "2307", 42307)                     = 4
write(2, " to ", 4 to )                     = 4
write(2, "1983", 41983)                     = 4
write(2, "\n", 1
)                       = 1
brk(0x579000)                           = 0x579000
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/favicon.ico", 12/favicon.ico)            = 12
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "2079", 42079)                     = 4
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(6, "HTTP/1.1 200 OK\r\nContent-Type: i"..., 2079) = 2079
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 3, 601000) = 2 ([{fd=5, revents=POLLIN}, {fd=6, revents=POLLIN}])
time([1431702109])                      = 1431702109
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, "GET /keyboard.html HTTP/1.1\r\nHos"..., 4096) = 355
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/keyboard.html", 14/keyboard.html)          = 14
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
brk(0x589000)                           = 0x589000
brk(0x599000)                           = 0x599000
brk(0x5a9000)                           = 0x5a9000
brk(0x5b9000)                           = 0x5b9000
write(2, "Compressed response from ", 25Compressed response from ) = 25
write(2, "3181", 43181)                     = 4
write(2, " to ", 4 to )                     = 4
write(2, "801", 3801)                      = 3
write(2, "\n", 1
)                       = 1
brk(0x579000)                           = 0x579000
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/keyboard.html", 14/keyboard.html)          = 14
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "893", 3893)                      = 3
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(5, "HTTP/1.1 200 OK\r\nContent-Type: t"..., 893) = 893
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, "GET /keyboard.png HTTP/1.1\r\nHost"..., 4096) = 324
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "GET", 3GET)                      = 3
write(2, "\" \"", 3" ")                    = 3
write(2, "/keyboard.png", 13/keyboard.png)           = 13
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "GET", 3GET)                      = 3
write(2, " ", 1 )                        = 1
write(2, "/keyboard.png", 13/keyboard.png)           = 13
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "873", 3873)                      = 3
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(6, "HTTP/1.1 200 OK\r\nContent-Type: i"..., 873) = 873
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 3, 601000) = 1 ([{fd=6, revents=POLLIN}])
time([1431702109])                      = 1431702109
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, "POST /? HTTP/1.1\r\nHost: 192.168."..., 4096) = 535
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "POST", 4POST)                     = 4
write(2, "\" \"", 3" ")                    = 3
write(2, "/?", 2/?)                       = 2
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
[COLOR="#0000FF"]open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 7
read(7, "\200\367\320\260b6?cr\225\217\303\261v\31\274", 16) = 16
close(7)     [/COLOR]                           = 0
write(2, "Creating a new session: ", 24Creating a new session: ) = 24
write(2, "gPfQsGI2P2NylY/DsXYZvA", 22gPfQsGI2P2NylY/DsXYZvA)  = 22
write(2, "\n", 1
)                       = 1
write(3, "\0\0\0\0\0\0\0\276\0\0\0008192.168.123.2\0\0\0\0\0\0\0"..., 171) = 171
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\0\0$j", 4}], msg_controllen=16, {cmsg_len=16, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, {7}}, msg_flags=0}, 0) = 4
write(2, "Window size changed to ", 23Window size changed to ) = 23
write(2, "190", 3190)                      = 3
write(2, "x", 1x)                        = 1
write(2, "56", 256)                       = 2
write(2, "\n", 1
)                       = 1
ioctl(7, 0x40087468, 0x7fb6ea30)        = 0
ioctl(7, 0x80087467, 0x7fb6ea30)        = 0
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "POST", 4POST)                     = 4
write(2, " ", 1 )                        = 1
write(2, "/?", 2/?)                       = 2
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "200", 3200)                      = 3
write(2, " ", 1 )                        = 1
write(2, "157", 3157)                      = 3
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(6, "HTTP/1.1 200 OK\r\nContent-Type: a"..., 157) = 157
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, 0x7fb6eb28, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
[COLOR="#FF0000"]poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}], 4, 46000) = 1 ([{fd=7, revents=POLLHUP}])[/COLOR]
time([1431702109])                      = 1431702109
write(2, "Child terminated", 16Child terminated)        = 16
write(2, "\n", 1
)                       = 1
time(NULL)                              = 1431702109
close(7)                                = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 3, 601000) = 1 ([{fd=6, revents=POLLIN}])
time([1431702109])                      = 1431702109
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(6, "POST /? HTTP/1.1\r\nHost: 192.168."..., 4096) = 523
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "POST", 4POST)                     = 4
write(2, "\" \"", 3" ")                    = 3
write(2, "/?", 2/?)                       = 2
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
time(NULL)                              = 1431702109
write(2, "Failed to find session: ", 24Failed to find session: ) = 24
write(2, "gPfQsGI2P2NylY/DsXYZvA", 22gPfQsGI2P2NylY/DsXYZvA)  = 22
write(2, "\n", 1
)                       = 1
shutdown(6, SHUT_RD)                    = 0
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "POST", 4POST)                     = 4
write(2, " ", 1 )                        = 1
write(2, "/?", 2/?)                       = 2
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "400", 3400)                      = 3
write(2, " ", 1 )                        = 1
write(2, "458", 3458)                      = 3
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(6, "HTTP/1.1 400 Bad Request\r\nConnec"..., 458) = 458
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Closing connection to ", 22Closing connection to )  = 22
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, ":", 1:)                        = 1
write(2, "56613", 556613)                    = 5
write(2, "\n", 1
)                       = 1
shutdown(6, SHUT_WR)                    = 0
close(6)                                = 0
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}], 2, 601000) = 1 ([{fd=5, revents=POLLIN}])
time([1431702109])                      = 1431702109
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
read(5, "POST /? HTTP/1.1\r\nHost: 192.168."..., 4096) = 529
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Handling \"", 10Handling ")             = 10
write(2, "POST", 4POST)                     = 4
write(2, "\" \"", 3" ")                    = 3
write(2, "/?", 2/?)                       = 2
write(2, "\"", 1")                       = 1
write(2, "\n", 1
)                       = 1
time(NULL)                              = 1431702109
write(2, "Failed to find session: ", 24Failed to find session: ) = 24
write(2, "gPfQsGI2P2NylY/DsXYZvA", 22gPfQsGI2P2NylY/DsXYZvA)  = 22
write(2, "\n", 1
)                       = 1
shutdown(5, SHUT_RD)                    = 0
time(NULL)                              = 1431702109
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, " - - ", 5 - - )                    = 5
write(2, "[15/May/2015:17:01:49 +0200]", 28[15/May/2015:17:01:49 +0200]) = 28
write(2, " \"", 2 ")                      = 2
write(2, "POST", 4POST)                     = 4
write(2, " ", 1 )                        = 1
write(2, "/?", 2/?)                       = 2
write(2, " ", 1 )                        = 1
write(2, "HTTP/1.1", 8HTTP/1.1)                 = 8
write(2, "\" ", 2" )                      = 2
write(2, "400", 3400)                      = 3
write(2, " ", 1 )                        = 1
write(2, "458", 3458)                      = 3
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_BLOCK, [PIPE], NULL, 16) = 0
write(5, "HTTP/1.1 400 Bad Request\r\nConnec"..., 458) = 458
rt_sigpending([])                       = 0
rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 16) = 0
write(2, "Closing connection to ", 22Closing connection to )  = 22
write(2, "192.168.123.2", 13192.168.123.2)           = 13
write(2, ":", 1:)                        = 1
write(2, "56612", 556612)                    = 5
write(2, "\n", 1
)                       = 1
shutdown(5, SHUT_WR)                    = 0
close(5)                                = 0
poll([{fd=4, events=POLLIN}], 1, -1^CProcess 8605 detached
 <detached ...>
Shutting down server
Done
root@FB7490:~ $
Entweder ich übersehe einen früheren Abbruch des Childs oder verstehe da (noch habe ich nicht in die Quellen gesehen, jedenfalls nicht richtig) etwas fundamental falsch, wenn ich in FD7 erst einmal die Pipe zwischen der Shell und dem Parent-Prozess sehe.

Eigentlich kann es ja nicht so sehr viele Gründe geben, wenn ein Kindsprozess beendet wird (wenn es am Ende nicht am FD 7 liegt). Da aber UID/GID 0 verwendet werden und auch /bin/sh mit ziemlicher Sicherheit ausgeführt werden kann (utmp/wtmp,PAM, eigentlich alles mit potentiellen Zugriffsproblemen, sollte beim make disabled sein für die Ausführung auf der Box), bin ich im Moment etwas ratlos, was da am Ende tatsächlich schief geht. Nun ist der Quelltext auch nicht unbedingt der übersichtlichste ... aber das wird schon, wenn ich mir sicher sein kann, da kein Phantom zu jagen.

Auf der anderen Seite gibt es schon unzählige Forks (selten so viele nicht weiter gepflegte Forks gesehen) des originalen Repositories (das Freetz-Paket nutzt das originale Paket und 4 Patches aus irgendeiner anderen Quelle), vielleicht enthält ja einer davon tatsächlich schon die funktionierende Lösung?

Es gibt eine entsprechende Fehlermeldung (Issue 248) im Feed, aber der Fork, der von sich behauptet, diesen Fehler beseitigt zu haben, enthält nicht einmal die PAM-Teile, womit für mich ein früheres Forken mit nachfolgenden Änderungen am "Original" logisch wäre.

Soviel zur Erklärung ... ich suche also nicht unbedingt Hilfe bei der Fehlersuche (auch wenn ich mich gerne mit jemandem austausche, der mitsuchen will), sondern eher die Erfahrungen anderer (in vergleichbarer Konfiguration), die mich vielleicht auf einen funktionierenden Fork stoßen können, ohne daß ich selbst suchen muß.

Ich brauche überhaupt erst einmal eine funktionierende SIAB-Version, bevor ich da die Benutzung des Box-Zertifikats ranstricken kann.

Ach ja, auch wenn die auf der 7390 mal lief, machte sie mit diversen Sonderzeichen eigentlich nur Späne (damit war schon mein Kennwort nicht eingebbar) ... kriegt jemand damit "*", "#", "+", "<" und "ß" (inkl. der Modifikationen auf den jeweiligen Tasten) eingegeben? Dann läge es wieder an meiner speziellen Konfiguration des Notebooks mit irgendwelchen unbekannten Make-/Break-Codes, aber das kann ich mir fast nicht vorstellen - wird ja alles auf der Javascript-Ebene "übersetzt" und da funktionieren die Keys.
 
Zuletzt bearbeitet:
Funktioniert das (habs nicht getestet) denn sonst mit dem service "/bin/sh"?!?
Mit dem sieht es bei mir genauso aus, ohne das (also mit dem "Standard-Service" /bin/login) kommt wie erwartet die login Aufforderung und ich kann mich anmelden...
 
Als es auf der 7390 lief, klappte es auch mit /bin/sh ... mit /bin/login habe ich nicht getestet, aber mit /sbin/ar7login ist es dasselbe Problem.

Inzwischen weiß ich auch, daß es im Child nach dem Fork irgendwann ein Lesen der /etc/passwd gibt und unmittelbar nach dem erfolgreichen read dafür (also ohne weiteren Call, den strace sehen würde) gibt es ein SIGSEGV.

Also wohl irgendwo beim Parsen der /etc/passwd ... nehme ich jedenfalls an und bin gerade in der Datei "launcher.c" am Suchen, habe aber nur noch 5 Minuten, dann höre ich auf bis heute spät abends.

EDIT: Grade noch mal mit /bin/login geprüft ... identischer Fehler (SEGV). "Standard-Service" meint explizite Angabe von "/bin/login" oder auslassen des Parameters?

EDIT2: Ok, ohne Angabe des Binaries in einer Service-Definition wird "/bin/login" ausgeführt ... Login scheitert bei mir an Sonderzeichen. Aber ein Anhaltspunkt ist es allemal ... nur nicht mehr jetzt.

Danke
 
Zuletzt bearbeitet:
Das "auf die Schnelle" mit Freetz erzeugte statische Binary (ohne service) funktioniert bei auf der 7270 mit dem Testuser "bla" und seinem Passwort "§$%&" im Firefox (36.0.4) und im Chromium (41.0.2272.76).
Für die Sonderzeichen (im Firefox) wurde in http://freetz.org/changeset/10395 ein Patch eingespielt

EDIT: Auch dieses "erschwerte" PW geht bei mir (mit mipsel):
Code:
!"§$%&/()=?#
 
Zuletzt bearbeitet:
Danke für den Test.

Der Patch ist drin, ich baue ja mit aktuellem Freetz-Trunk.

Ohne funktionierendes Binary ist es im Moment natürlich schwer zu sagen, aber das für die 7390 gebaute konnte - als es funktionierte - die erwähnten Sondertasten nicht und der Patch müßte trotzdem drin gewesen sein. Kann aber eben auch an der Notebook-Tastatur liegen, da schaue ich später drauf ...

Im Moment habe ich es wahrscheinlich irgendwo auf getpwuid_r eingegrenzt ... eigentlich sollte die µClibc ja eines enthalten, damit sollte es da nicht klemmen. Mein Problem ist halt, daß ein ltrace auf das statische Binary nicht so richtig schlau ist. ;)

Also baue ich nun wieder ein dynamisches, erst mal sehen, ob das funktioniert. Ein auf die Schnelle gestricktes C-Programm mit getpwuid und getpwuid_r hatte jedenfalls keine Probleme, auch nicht statisch gelinkt. Ist schon etwas merkwürdig ... vor allem die Frage, warum das /bin/login als impliziter Service tatsächlich funktioniert (oder zumindest ordentlich startet), aber bei der Angabe des Services auf der Kommandozeile macht es Späne. Wenn da nicht schon vorher mal die /etc/passwd geparsed wäre (beim setuid/setgid auf 0, weil ich "nogroup" nicht im File habe), würde ich ja auf einen Syntaxfehler in der /etc/passwd tippen ... aber das ist auf der 7490, wo ich das Home-Verzeichnis von root verändere und der 7390, wo das Original erhalten bleibt, derselbe Fehler.

EDIT: Doch noch eine Nachfrage ... "(ohne Service)" meint immer noch ohne Angabe des Service im Rahmen der Parameter für shellinaboxd, oder?
Wenn ich das richtig sehe, stürzt der Child-Prozess auch noch vor dem Start des Services ab ... damit ist es offenbar Bummi, was man angibt. Ich suche jetzt nach dem Unterschied zwischen implizitem /bin/login und expliziter Angabe des Dienstes.
 
Zuletzt bearbeitet:
Ja, ich hab es ohne "--service ..." gestartet. Mit kommt es auch bei mir zu den Abbrüchen, auch z.B. mit "--service=/:0:0:/:/bin/login"
 
Moins

Ich interessiere mich auch für eine funktionierende SSL MIPS Version.

Hab mal eine funktionierende Version auf dem RasPi "beobachtet".

Auf dem RasPi wird das Zertifikat hier gesucht/installiert: /var/lib/shellinabox
...und mit dieser Option liesse sich das ändern: --cert=/var/tmp
Dabei muss der Name des Zertifikats so lauten: certificate.pem
Das ist in der Pi Version...
Code:
Shell In A Box version 2.10 (revision 239)
Copyright 2008-2010 by Markus Gutschke
For more information check http://shellinabox.com

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)

This product includes cryptographic software written by Eric Young
([email protected])
...alles hardkodiert.

Da funktioniert auch: --service=/:0:0:/:/bin/login
...oder: --service=/:1000:1000:/:/bin/bash
 
@koy:
Das dürfte aber im o.a. Fall nichts mit den Zertifikaten zu tun haben. Wenn die Option "-t" angegeben ist, verwendet SIAB kein SSL ... darum kümmere ich mich dann im Anschluß, ich will ja das Boxzertifikat für SIAB zugänglich machen.

AVM verwendet das ja auch in den Entwicklerversionen, wie wir anhand der mal versehentlich veröffentlichten Labor-Version mit SIAB "gelernt" haben, da ist ein Parameter "cert-pw" zusätzlich eingebaut, der vom "shellinabox-launcher" mit dem Kennwort für das Boxzertifikat "gefüttert" wird, wenn für das "luacgi" die Verbindung von außen kommt und daher SSL aktiviert wird => box.frominternet == true. Aber bei AVM ist das eben auch CGI-Modus, da ist das mit dem Forken von Childs schon mal anders ... es gibt eben keinen "Master-Service", sondern wohl pro Client mit aktiver CGI-"Verbindung" eine Instanz - vermute ich jedenfalls, so genau habe ich mir das nicht angesehen, da ich die andere Variante haben will.

Ich suche heute im Laufe des Tages weiter nach der Ursache, liegt irgendwo in launcher.c ... ich mußte Samstag dann abbrechen.

Wenn ich das richtig in Erinnerung habe, könnte ein SSH-Service sogar funktionieren (ebenso könnte es auf einer Plattform mit aktivem PAM funktionieren, vielleicht klappt es deshalb auf dem RasPi), da das alles unterschiedliche Zweige an der vermuteten Stelle der SEGV sind (habe den Namen der Funktion nicht mehr auf dem Schirm und kann daher gerade nicht konkret schreiben/nachsehen, weil ich erst meinen Rechner mit Freetz und den SIAB-Quellen hochfahren muß).

Die Lösung mit /bin/login ist jedenfalls keine, mit der ich leben kann, weil sie entweder das Login mit den "echten" Linux-Benutzern (boxusrXX) anstelle der FRITZ!Box-Namen erzwingt oder man vorher die /etc/passwd selbst anpassen müßte. Das kommt in meinem Szenario (Start eines Terminals über Pseudo-Image bei ausgebautem/ausgeschaltetem Telnet) beides nicht in Frage ... am besten wäre es eben sogar, wenn die Shell direkt starten würde ohne weitere Anmeldung (die beim Upload des Images schon erforderlich war, mein "Benutzer" hat schon eine gültige Websession mit einer entsprechenden SID). Braucht halt nur eine SIAB-Instanz, bei der das auch funktioniert ... aber dank Eurer Hilfe weiß ich nun wenigstens definitiv, daß es nicht an meiner Box/Build-Umgebung liegt und sich die Suche in SIAB auch lohnt.
 
Ok, die Ursache ist erst einmal gefunden ... der Patch 110-... zum Ersetzen von "getgrouplist" durch eine interne Implementierung ist fehlerhaft und/oder unvollständig.

Die "nachgeschobene" Variante behandelt den NULL-Pointer als drittes Argument falsch, genau auf diese Art wird sie aber unmittelbar nach der gepatchten Stelle aufgerufen.

Inzwischen enthält die Standard-C-Library (uClibc) aber eine eigene Implementierung von "getgrouplist" und es gibt gar keine Notwendigkeit mehr, diesen Patch anzuwenden.

Läßt man ihn weg, funktioniert auch "shellinaboxd" mit eigener Service-Definition (wie in #1 gezeigt) wieder problemlos ... das ist sicherlich auch der Grund, warum das Problem nicht weiter verbreitet ist; ohne Patch taucht das Problem erst gar nicht auf.

Die Sache mit den Keycodes ist jetzt das nächste und dann widme ich mich der Zertifikat-Nachnutzung.

EDIT:
Ok, die Sache mit den Keycodes hat sich erledigt ... wahrscheinlich war das bei diesem Fehler eine alte und/oder ungepatchte Version. Es funktionieren alle Tasten ohne Probleme.
 
Zuletzt bearbeitet:
Moins

Das fritz.box Zertifikat ist kürzer als das von shellinabox.
...aber auf der Pi Seite funktioniert das...
/var/lib/shellinabox
Code:
-rw------- 1 shellinabox shellinabox 2798 Mai 18 12:33 certificate-openelec.pem
-rw-r--r-- 1 root        root        1342 Mai 18 12:32 certificate.pem
-rw-r--r-- 1 root        root        1342 Mai 18 11:42 fb.pem
...darf nur kein Softlink sein, dann wird daraus (certificate.pem) das certificate-openelec.pem erzeugt.
Dauert deswegen auch länger, der erste Connect/Kontakt, also Geduld. ;)

Von Pi Seite klappt Service SSH auf einen auf der Fritz!Box laufenden dropbear auf Port 22 so...
/etc/default/shellinabox
Code:
# Should shellinaboxd start automatically
SHELLINABOX_DAEMON_START=1

# TCP port that shellinboxd's webserver listens on
SHELLINABOX_PORT=81

# Parameters that are managed by the system and usually should not need
# changing:
# SHELLINABOX_DATADIR=/var/lib/shellinabox
# SHELLINABOX_USER=shellinabox
# SHELLINABOX_GROUP=shellinabox

# Any optional arguments (e.g. extra service definitions).  Make sure
# that that argument is quoted.
#
#   Beeps are disabled because of reports of the VLC plugin crashing
#   Firefox on Linux/x86_64.
# SHELLINABOX_ARGS="--no-beep --service=/:1000:1000:/home/pi:/home/pi/rexx/cmd.rx"
SHELLINABOX_ARGS="--no-beep --service=/:SSH:fritz.box"

Für einen User auf der Fritz!Box bräuchtest du, wie in der AVM LUA, aber ohne CGI, etwa sowas...
Code:
--service=/:0:0:/:/sbin/ar7login
 
Zuletzt bearbeitet:
@koy:
Ich will ja das in die FRITZ!Box importierte User-Zertifikat benutzen. Wie lang das am Ende ist (ich vermute mal, Du meinst die Keysize), ist ja Sache des Erzeugenden/Importierenden ... die FRITZ!Box akzeptiert auch 4096-Bit-Keys.

Wenn ich shellinaboxd als Daemon laufen lasse mit initialisiertem SSL-Stack, dann ist der zeitliche Unterschied ziemlich gering - ich würde fast sagen, er fällt unter die Grenze der Meßungenauigkeit zurück.

Wo und wie der "Anwender" dann am Ende das Login auf der Box machen will (ar7login -> FRITZ!Box-Benutzer, /bin/login -> /etc/passwd-Benutzer (boxusrXX) oder auch ohne Login -> /bin/sh), kann er ja selbst entscheiden. Ich will nur das o.a. Box-Zertifikat "nachnutzbar" machen (also /var/flash/websrv_ssl_(cert,key).pem verwenden) und damit die Notwendigkeit der doppelten Speicherung von Key+Cert (also noch einmal gesondert für SIAB oder Apache2 o.ä.) "abschaffen" bzw. SIAB ohne große Konfiguration - einfach nach dem Laden auf /var/media/ftp/irgendwas - zum Laufen zu bringen.

Das ansonsten von SIAB vorgenommene Generieren eines eigenen Zertifikats patche ich gleich mit raus bzw. schalte es bei Auswahl meiner neuen Option beim Aufruf von SIAB gleich mit ab. Dann läuft SIAB auch problemlos in einem IFRAME (in einer SSL-Session über das FRITZ!OS-GUI), was ansonsten Probleme bereitet, weil die meisten Browser es nicht so spannend finden, wenn ein Server auf unterschiedlichen Ports auch unterschiedliche Zertifikate verwendet.

BTW: Wo hast Du denn das Beispiel mit SIAB und dem Aufruf eines REXX-Interpreters her? REXX habe ich inzwischen seit bestimmt 20 Jahren nicht mehr in Aktion erlebt (seit VM/CMS bzw. irgendwann mal als "regina" unter *nix) ... auch wenn es auf MacOS noch eine Weile verwendet wurde als Automatisierungssprache. Da bekommt man ja nostalgische Gedanken ... :)
 
REXX Shell

Eben, aus nostalgischen Gründen.
Hab ich selber gebastelt.
Das Herzstück ist eine Endlosschleife simpelsten Aufbaus...
Code:
#!/usr/bin/env rexx
do forever
call charout ,userid()" "directory()" # "
parse lower pull input
interpret input
end
...aber die Fehlerbehandlung macht das Skript natürlich wesentlich grösser. ;)

Ach so, auf dem Pi einfach: apt-get install regina-rexx

PS: Ausserdem kann in der Rexxkonsole sofort Mathematik betrieben werden:
Code:
f=100
say (f*f+f)/2
5050
Da hätte Carl Friedrich Gauß (Im Alter von sieben Jahren) seine wahre Freude mit gehabt.

EDIT: Nostalgisch gesehen hatte ich meinen ersten Kontakt mit REXX auf dem Amiga...
amiga_ks3.0_wb3.0_01.png
...das waren noch Zeiten. :D
Die alte Virenschleuder.
 
Zuletzt bearbeitet:
So, die geplante Erweiterung von ShellInABox zur Benutzung des Box-Zertifikates ist jetzt verfügbar.

Nochmal mein Dank an MaxMuster und koy für den Test, der mir die Gewißheit brachte, daß es am ShellInABox-Paket für Freetz liegen mußte, daß es am Beginn nicht so wollte, wie ich es mir vorstellte.
 
Eins noch...

<iframe> Ist doch, wie heisst das nochmal? DEPRECATED?
...auf jedenfall meckert das Worldwidewebkonsortium, wenn mans benutzt.

Viel hübscher sind doch die <object> Elemente. :mrgreen:
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<base target="content4" />
<meta name="author" content="koyaanisqatsi">
<title>Shanghai Fenster</title>
</head>
<body class="centered">
<object id="content1" name="content1" data="http://fritz.box" type="application/xhtml+xml" style="width:800px;height:200px;">
</object>
<object id="content2" name="content2" data="http://fritz.nas" type="text/xml" style="width:800px;height:200px;">
</object>
<object id="content3" name="content3" data="http://myfritz.box" type="text/plain" style="width:800px;height:200px;">
</object>
<object id="content4" name="content4" data="http://fritz.box/flash.html" type="text/html" style="width:800px;height:200px;">
</object>
</body>
</html>
...W3C konform, und verhält sich exakt wie ein: <iframe>
 
Zuletzt bearbeitet:
...auf jedenfall meckert das Worldwidewebkonsortium, wenn mans benutzt.
1. Meines Wissens nicht, das gilt höchstens für FRAMESET und FRAME ... siehe hier: http://www.w3.org/TR/html5/embedded-content-0.html#the-iframe-element und hier: http://www.w3.org/TR/html5/obsolete.html - im Gegensatz zum "IFRAME" sind Frames ein "non-conforming feature" (Punkt 11.2).

2. Noch lange nicht jeder Browser, mit dem die Leute heutzutage unterwegs sind, versteht auch schon HTML5 (und dann auch noch komplett). Wenn wir in zwei Jahren darüber reden, sieht es vielleicht schon wieder anders aus.

3. Schreib das mal an AVM, die Startseite ist (bei der immer noch aktuellen Oberfläche) ein FRAMESET (das nervt beim Aktualisieren) ... aber auch 2. oben berücksichtigen.
 
Moins

Stimmt, hast Recht, meckert nicht (mehr), komisch, denn ich erinnere mich, dass es mal anders war.
Wahrscheinlich mit XHTML Namespace und STRICT.
...benutz ich aber nicht mehr seit dem "easygoing" mit HTML5.

Naja, dann eben nicht Absolete oder Deprecated.
...hat sowieso keiner verstanden. ;)

Hey, hat sich die Attributliste erweitert?
Code:
Attributes for element [URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#the-iframe-element"]iframe[/URL]:
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#global-attributes"]Global attributes[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-iframe-src"]src[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-iframe-srcdoc"]srcdoc[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-iframe-name"]name[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-iframe-sandbox"]sandbox[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-iframe-seamless"]seamless[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-iframe-allowfullscreen"]allowfullscreen[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-dim-width"]width[/URL]
[URL="http://www.w3.org/html/wg/drafts/html/master/single-page.html#attr-dim-height"]height[/URL]
 
Zuletzt bearbeitet:
@PeterPawn: Danke fürs Fehlersuchen und -finden.
Hab für die älteren uClibC-Versionen in Changeset 13108 einen Mini-Patch eingestellt.
So klappt es auch bei mir (mit eigenem getgrouplist in uClibC [noparse]0.9.28[/noparse]) mit
Code:
shellinaboxd -d -t -g 0 -u 0 --service=/:0:0:/:/bin/sh
 
@MaxMuster:
Ja, habe ich schon gesehen (habe Freetz-Changes abonniert).

Danke für die gemeinsamen Bemühungen auch an Eugene und an Dich ... ich hatte (mal wieder ;)) nur den "Entwicklerblick" auf den Patch und es gab so viele verschiedene Lösungen, daß ich erst einmal nur die naheliegendste für den Trunk berücksichtigt habe und mich die älteren Systeme (also alles vor 06.xx) nicht so sehr interessierten.

Ich (persönlich) hätte es auch beim Patch von er13 belassen bzw. habe bei mir noch weitere Änderungen an dieser Stelle vorgenommen ... ob da nun Platz für 129 GIDs reserviert wird (also (128 + 1) * 4 Byte = 516 Byte im malloc, besser wäre also vielleicht auch ein "ngroups=127;" als "Vorbelegung" wegen Alignments) oder die korrekte Anzahl schon vorher bekannt ist, weil man zweimal zählt, fand ich nun wieder nicht so wichtig bzw. die Lösung mit einmaligem Aufruf von getgrouplist() sogar besser.

Beim zweiten Aufruf mit entsprechend angefordertem Speicher für die GID-Liste geht ja dann ohnehin wieder alles glatt ... es war ja nur das vorherige 'Zählen', was nicht klappte.

Aber nun ist es rund auch für Versionen vor 0.9.30 ... ob es am Ende auch schneller und/oder ressourcenschonender ist, glaube ich jedoch eher nicht (gilt aber auch für >= 0.9.30, war mir nur den Patch nicht wert, weil es nicht so häufig durchlaufen wird).

Der angeforderte Speicher für die 129 GIDs wird ja noch innerhalb der Funktion wieder freigegeben, nachdem die tatsächlichen GIDs kopiert/gesetzt wurden (mit setgroups()).

Da ist der zusätzliche "Durchlauf" durch getgrouplist() auf einer FRITZ!Box für mich tatsächlich unnötig (es ist natürlich guter Stil, erst einmal die tatsächlich benötigte Größe zu ermitteln, das bestreite ich im Allgemeinen gar nicht) und schon deshalb habe ich es bei mir zusätzlich so gelöst, daß ich das "#if defined (__linux__)" durch ein simples "#if 0" ersetzt habe.

Man darf sicherlich zu Recht annehmen, daß auf einer FRITZ!Box nicht mehr als 128 "supplementary groups" für einen Benutzer verwendet werden und selbst das würde ja beim tatsächlichen Auslesen (mit Returncode -1) richtig abgefangen. Wenn wirklich jemand einen User auf seiner FRITZ!Box hat, der in 129 Gruppen Mitglied ist, dann sorgt schon das "check(getgrouplist(...) >= 0)" für den fälligen Abbruch.
 
Moin

Wäre damit auch eine statische SIAB Version, für Pseudofirmwareupdates die keinen Reboot machen, denkbar/möglich?

So ungefähr...
siab.tar
/var/tmp/shellinaboxd
/var/install
Code:
#!/bin/sh

# start ctlmgr if stopped
$(ps |  grep -v grep | grep -q ctlmgr) ||  ctlmgr 

/var/tmp/shellinaboxd -b -t

# kill firmwarecfg or box will reboot after about one minute 
killall firmwarecfg


exit 0
Natürlich geht das Login über SIAB so nicht, aber wird gestartet und horcht auf Port 4200.
Weil der Pseudoupdateflash keinen Neustart auslöst.
...bin mir bewusst, dass das auch "moderner" gehen würde. :D
 
Zuletzt bearbeitet:
@koy:
Ja, das funktioniert (jedenfalls bis zur 84.06.23 getestet) problemlos - in der korrigierten Fassung auch mit der passenden Service-Definition (gleich mit /bin/sh), denn da ist der Benutzer (der Browser, von dem das Pseudo-Image kommt) ja schon identifiziert/autorisiert und ein zusätzliches Login macht nur bedingt Sinn (bzw. in meinem Anwendungsfall gar keinen).

Bei der 7490 klappt beim Pseudo-Update irgendwas im Moment nicht (ansonsten dieselben Skripte wie bei der 7390, natürlich ein passendes SIAB-Binary für das jeweilige Modell), da kommt immer irgendein Update-Fehler ... ob das ein Unterschied zur 7390 in der Behandlung solcher Images durch "frimwarecfg" ist oder nicht, muß ich erst noch untersuchen. Ich will das ja eigentlich auf der 7490 zum Laufen bringen ...

Ansonsten ist es ziemlich simpel ... ein passendes "install"-Skript, das den aktiven Restartprozess des "firmwarecfg" beendet (dessen PID steht irgendwo in /var/tmp/delayed_restart.pid) und anschließend einen weiteren - etwas verzögerten - Dienst (bzw. ein Skript) startet. Das install-Skript muß erst einmal einen ordentlichen Return-Code an den aktiven firmwarecfg (der den Upload gemacht hat und dann das Skript startet, wenn man die "nicht freigegeben"-Meldung abnickt) liefern, damit das sich alles wieder einkriegen kann. Ich ersetze bei der Gelegenheit gleich noch die "reboot"-Seite der Box (dahin wird der Browser nach dem Ende von "install" erst einmal weitergeleitet) durch eine andere (mit bind-Mount), auf der ein Countdown läuft (damit die Box sich wieder beruhigen kann), bevor dann wieder auf die Startseite (oder gleich auf eine neue Seite, auf der bei mir dann die SIAB-Console angezeigt wird) weitergeleitet wird.

In dem dann asynchron gestarteten Skript muß man erst mal "normale" Zustände wiederherstellen, indem man das Netz startet (rc.net start), sowie weitere notwendige Dienste und auch das USB-Subsystem erst mal wieder auf Vordermann bringt, wenn man es in der Folge noch benutzen will. Die Box stoppt eben beim Upload eines Images erst einmal viele Dienste (über prepare_fwupgrade), das muß man erst einmal rückgängig machen (möglichst komplett), wenn man nun doch nicht neu starten lassen will.

Hat sich dann wieder alles beruhigt (sogar der Start von aha könnte eine gute Idee sein, wenn einem die Box das Log mit irgendwelchen Meldungen zu "ahalua" vollschmiert, egal ob man aha nutzt oder nicht), kann man ganz normal weiterarbeiten. Ich jedenfalls, denn ich will ja eigentlich in nicht allzu ferner Zukunft nach dem Pseudo-Update dann auch mal einen Neustart machen lassen. Ob das "prepare_fwupgrade" am Ende spurlos beseitigt ist (auch was die Watchdogs der verschiedenen Komponenten angeht, denn der wird ja auch erst mal komplett abgeschaltet), habe ich noch nie bis zum Ende getestet ... ist halt nicht mein Tisch.
 
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.