|
| Når et ssh-login dør. Fra : Jacob Jensen |
Dato : 05-02-06 11:55 |
|
Jeg har lige været logget ind som root over ssh til min linuxbox. Nu skete
der det at PC'en som jeg loggede ind fra døde. Efter genstart loggede jeg
ind igen på samme måde og en "w" gav mig information om at der nu var logget
to brugere ind (2 gange root). "w" sagde også at den ene bruger kørte
"-bash" og at TTY var pts/0.
Jeg fandt bash-processen med "ps -e" og dræbte den med "kill -9 pid". "w"
viser nu kun en bruger.
Spørgsmål:
1 - Er brugeren nu korrekt "logget ud" eller er der mere jeg skal gøre?
2 - Hvad er TTY for noget?
Jacob
| |
Kent Friis (05-02-2006)
| Kommentar Fra : Kent Friis |
Dato : 05-02-06 12:39 |
|
Den Sun, 5 Feb 2006 11:55:23 +0100 skrev Jacob Jensen:
> Jeg har lige været logget ind som root over ssh til min linuxbox. Nu skete
> der det at PC'en som jeg loggede ind fra døde. Efter genstart loggede jeg
> ind igen på samme måde og en "w" gav mig information om at der nu var logget
> to brugere ind (2 gange root). "w" sagde også at den ene bruger kørte
> "-bash" og at TTY var pts/0.
>
> Jeg fandt bash-processen med "ps -e" og dræbte den med "kill -9 pid". "w"
> viser nu kun en bruger.
Hvorfor -9? Brug kun -9 når det er absolut nødvendigt - den giver ikke
programmer tid til at rydde op efter sig, lukke filer, osv. Den svarer
faktisk lidt til at tage strømmen, bare for en enkelt process.
Brug enten kill uden parametre (samme som -15), eller kill -1 - den
sidste fortæller programmet at det har mistet forbindelsen, det samme
som når sshd selv opdager at forbindelsen er røget.
> Spørgsmål:
> 1 - Er brugeren nu korrekt "logget ud" eller er der mere jeg skal gøre?
Når den forsvinder fra "w", så må brugeren være korrekt logget ud.
> 2 - Hvad er TTY for noget?
TeleTYpe - det er terminalen. I gamle dage[1] havde man terminaler,
som var en skærm og et tastatur man tilsluttede en serielport. På den
måde kunne man have mange brugere på den samme computer. Alle kommando-
linie baserede programmer er lavet til en terminal, og derfor bruger
man stadig samme system selvom det nu er xterm og SSH-forbindelser.
Nu er det bare virtuelle terminaler (pseudo tty, /dev/pty* eller
/dev/pts/*).
Mvh
Kent
[1] Nå ja, nogen af os har et par stykker endnu.
--
Hard work may pay off in the long run, but laziness pays off right now.
| |
Jacob Jensen (05-02-2006)
| Kommentar Fra : Jacob Jensen |
Dato : 05-02-06 12:44 |
|
> Hvorfor -9? Brug kun -9 når det er absolut nødvendigt - den giver ikke
> programmer tid til at rydde op efter sig, lukke filer, osv. Den svarer
> faktisk lidt til at tage strømmen, bare for en enkelt process.
Ok
> Brug enten kill uden parametre (samme som -15), eller kill -1 - den
> sidste fortæller programmet at det har mistet forbindelsen, det samme
> som når sshd selv opdager at forbindelsen er røget.
Kill uden parametre gav ikke noget. Jeg er ikke så meget inde i det. Hvordan
fungerer det egentligt? Programmerne skal vel være skrevet til at modtage de
signaler? Måske bortset fra -9.
> Når den forsvinder fra "w", så må brugeren være korrekt logget ud.
Det var også min overbevisning :)
> TeleTYpe - det er terminalen. I gamle dage[1] havde man terminaler,
> som var en skærm og et tastatur man tilsluttede en serielport. På den
> måde kunne man have mange brugere på den samme computer. Alle kommando-
> linie baserede programmer er lavet til en terminal, og derfor bruger
> man stadig samme system selvom det nu er xterm og SSH-forbindelser.
> Nu er det bare virtuelle terminaler (pseudo tty, /dev/pty* eller
> /dev/pts/*).
Ok, det gav mig mulighed for at identificere den bash som hørte til den
rigtige root-bruger. Der var jo to. Noget kunne tyde på at jeg har gjort
noget i den rigtige retning :)
Jacob
| |
Kent Friis (05-02-2006)
| Kommentar Fra : Kent Friis |
Dato : 05-02-06 13:18 |
|
Den Sun, 5 Feb 2006 12:43:42 +0100 skrev Jacob Jensen:
>> Hvorfor -9? Brug kun -9 når det er absolut nødvendigt - den giver ikke
>> programmer tid til at rydde op efter sig, lukke filer, osv. Den svarer
>> faktisk lidt til at tage strømmen, bare for en enkelt process.
>
> Ok
>
>> Brug enten kill uden parametre (samme som -15), eller kill -1 - den
>> sidste fortæller programmet at det har mistet forbindelsen, det samme
>> som når sshd selv opdager at forbindelsen er røget.
>
> Kill uden parametre gav ikke noget.
Den skal stadig have en process-id. Men det var vel ikke det du mente.
Nogen gange virker -1 bedre, jeg ved ikke lige hvorfor, for en process
bør ikke ignorere en normal kill, og da slet ikke bash.
> Jeg er ikke så meget inde i det. Hvordan
> fungerer det egentligt? Programmerne skal vel være skrevet til at modtage de
> signaler? Måske bortset fra -9.
Nej, lige omvendt. Som default vil alle signaler slå process'en ned
(ikke helt korrekt, der er også signaler der har andre formål). Men
en process kan bede om at få kaldt en funktion i stedet for, og det
er denne funktion der sørger for oprydning. Med undtagelse af -9,
hvor processen intet får at vide, den holder bare op med at eksistere.
>> Når den forsvinder fra "w", så må brugeren være korrekt logget ud.
>
> Det var også min overbevisning :)
>
>> TeleTYpe - det er terminalen. I gamle dage[1] havde man terminaler,
>> som var en skærm og et tastatur man tilsluttede en serielport. På den
>> måde kunne man have mange brugere på den samme computer. Alle kommando-
>> linie baserede programmer er lavet til en terminal, og derfor bruger
>> man stadig samme system selvom det nu er xterm og SSH-forbindelser.
>> Nu er det bare virtuelle terminaler (pseudo tty, /dev/pty* eller
>> /dev/pts/*).
>
> Ok, det gav mig mulighed for at identificere den bash som hørte til den
> rigtige root-bruger. Der var jo to. Noget kunne tyde på at jeg har gjort
> noget i den rigtige retning :)
Hvis man er i tvivl, kan man lige i det tilfælde (mistet forbindelse)
provokere sshd til selv at logge brugeren ud ved at skrive til ham
med write-kommandoen. Fx:
# write root /dev/pts/0
Er du der?
<ctrl-d>
#
Det vil nemlig blive sendt til brugerens skærm, og derved opdager
sshd at forbindelsen er røget, og så ordner den resten. Og skulle
det vise sig at det er den forkerte man har ramt, så sker der ikke
andet end at teksten kommer på skærmen.
Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.
| |
Jacob Jensen (05-02-2006)
| Kommentar Fra : Jacob Jensen |
Dato : 05-02-06 14:01 |
|
> Den skal stadig have en process-id. Men det var vel ikke det du mente.
> Nogen gange virker -1 bedre, jeg ved ikke lige hvorfor, for en process
> bør ikke ignorere en normal kill, og da slet ikke bash.
Nej, den fik et process id.
> Nej, lige omvendt. Som default vil alle signaler slå process'en ned
> (ikke helt korrekt, der er også signaler der har andre formål). Men
> en process kan bede om at få kaldt en funktion i stedet for, og det
> er denne funktion der sørger for oprydning. Med undtagelse af -9,
> hvor processen intet får at vide, den holder bare op med at eksistere.
Så hvis processen ikke har bedt om at modtage signalerne, bliver den bare
dræbt på brutal vis? Lidt ala "end task" i windows?
> Hvis man er i tvivl, kan man lige i det tilfælde (mistet forbindelse)
> provokere sshd til selv at logge brugeren ud ved at skrive til ham
> med write-kommandoen. Fx:
>
> # write root /dev/pts/0
> Er du der?
> <ctrl-d>
> #
>
> Det vil nemlig blive sendt til brugerens skærm, og derved opdager
> sshd at forbindelsen er røget, og så ordner den resten. Og skulle
> det vise sig at det er den forkerte man har ramt, så sker der ikke
> andet end at teksten kommer på skærmen.
Smart.
Jacob
| |
Kent Friis (05-02-2006)
| Kommentar Fra : Kent Friis |
Dato : 05-02-06 15:55 |
|
Den Sun, 5 Feb 2006 14:01:05 +0100 skrev Jacob Jensen:
>> Den skal stadig have en process-id. Men det var vel ikke det du mente.
>> Nogen gange virker -1 bedre, jeg ved ikke lige hvorfor, for en process
>> bør ikke ignorere en normal kill, og da slet ikke bash.
>
> Nej, den fik et process id.
>
>> Nej, lige omvendt. Som default vil alle signaler slå process'en ned
>> (ikke helt korrekt, der er også signaler der har andre formål). Men
>> en process kan bede om at få kaldt en funktion i stedet for, og det
>> er denne funktion der sørger for oprydning. Med undtagelse af -9,
>> hvor processen intet får at vide, den holder bare op med at eksistere.
>
> Så hvis processen ikke har bedt om at modtage signalerne, bliver den bare
> dræbt på brutal vis? Lidt ala "end task" i windows?
Hvis den ikke har bedt om at der skal ske noget specielt når den får
et signal, er der vist ikke den store forskel. Men fidusen er jo at
hvis et program har brug for at blive lukket korrekt ned, så kan den
sørge for at blive det. Fx en database-server der lige skal have
flushet data til disk for at undgå en corrupt database.
Det gælder iøvrigt ikke kun signaler sendt med kill. Segmentation
fault (svarer lidt til general protection fault i windows) er også
bare et signal der kan fanges. Det bruges faktisk i en del tekst-
editors, så hvis programmet crasher, gemmer den lige først (i en
backup-fil).
Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.
| |
Michael Rasmussen (05-02-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 05-02-06 13:29 |
|
"Jacob Jensen" <omo@adslhome.dk> wrote:
>Jeg fandt bash-processen med "ps -e" og dræbte den med "kill -9 pid". "w"
>viser nu kun en bruger.
Sæt passende værdier af ClientAliveInterval og ClientAliveCountMax i din
sshd_config fil. Så slipper du for problemet med 'hængende' forbindelser
fremover...
http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config
<mlr>
--
Af alle seksuelle afvigelser er afholdenhed dog den mest besynderlige..
| |
Jacob Jensen (05-02-2006)
| Kommentar Fra : Jacob Jensen |
Dato : 05-02-06 14:02 |
| | |
|
|