Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Prozesse eines Benutzers verstecken

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 22. Mai 2007 16:44   Titel: Prozesse eines Benutzers verstecken

Hallo,

ich würde gerne folgendes unter Linux realisieren:

Das Programm ps soll alle Prozesse eines bestimmten Benutzers bzw. einer bestimmten Benutzer-ID nicht anzeigen.

Um dies zu realisieren, sollte man nur die Source(Header)-Dateien des Kernels modifizieren, damit man anschließend den Kernel übersetzen und installieren kann.

Ich wäre sehr froh, wenn mir jemand helfen könnte. Auch nur ein Tipp, wo man z.B ansetzen müsste, wäre sehr hilfreich.

Grüße
wedge
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 22. Mai 2007 23:34   Titel:

Was denn nun, die Sourcen oder die Header? Neu kompilieren musst du auf jeden Fall.


Guck dir mal die struct task_struct in /usr/src/linux/include/linux/sched.h an. Da ist unter anderem die uid drin. In kernel/pid.c gibt es eine Funktion get_pid_task(), die eine struct task_struct zu einer PID zurückliefert. Existiert kein Prozess mit dieser PID, liefert sie NULL zurück.

Diese Funktion wird in fs/proc/internal.h get_proc_task() aufgerufen, um zu einer inode in /proc die passende struct task_struct zurückzubekommen. Prüft man nun das Feld uid der struct task_struct, kann man bei einem Treffer NULL zurückgeben, und der Eintrag in /proc wird für diesen Prozess nicht erzeugt. Damit listet ihn das übliche ps auch nicht.

Das ich glaube, dass das ein Contest ist: Ich habe noch eine wichtige Sache weggelassen. Welche?

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 23. Mai 2007 9:57   Titel:

Vielen Dank für die schnelle und hilfreiche Antwort!!!!!
Ich werde mich heute abend gleich mal dransetzen und es versuchen hinzubekommen.

PS: Dies soll wirklich kein Contest darstellen Smile Es ist eine Praktikumsaufgabe, die ich zu erledigen habe.
 
Benutzer-Profile anzeigen Private Nachricht senden

komsomolze



Anmeldungsdatum: 03.03.2006
Beiträge: 429

BeitragVerfasst am: 11. Jun 2007 20:30   Titel:

Ich habe die Prozessliste mal mit dem openwall-Patch (owl) gesäubert:
http://www.openwall.com/linux/ (Kernel 2.4)

http://www.grsecurity.net/download.php
http://www.grsecurity.net/features.php :
Zitat:
...
Option to hide kernel processes
...
No viewing of any process outside of chroot, even if /proc is mounted
...
/proc restrictions that don't leak information about process owners

Die jeweiligen Teile der Patches kannst Du ja als Vorlage mal anschauen.
_________________
mfg komsomolze
 
Benutzer-Profile anzeigen Private Nachricht senden

wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 14. Jun 2007 1:46   Titel:

@komsomolze
Auch dir vielen Dank!

@Janka
Ich hab die Funktion get_proc_task in /usr/src/linux/fs/proc/internal.h foldendermaßen abgeändert:

static inline struct task_struct *get_proc_task(struct inode *inode)
{
struct task_struct *ergebnis;
ergebnis = get_pid_task(proc_pid(inode), PIDTYPE_PID);
if ( ergebnis->uid == 1001 )
return NULL;
else
return get_pid_task(proc_pid(inode), PIDTYPE_PID);
}

Jetzt kann ich aber ps erst garnicht mehr aufrufen, wenn ich mich mit dem Benutzer, der die uid 1001 besitzt, eingeloggt habe.
Ich hatte auch mal versucht, der uid, nen anderen Wert zuzuweißen:

static inline struct task_struct *get_proc_task(struct inode *inode)
{
struct task_struct *ergebnis;
ergebnis = get_pid_task(proc_pid(inode), PIDTYPE_PID);
if ( ergebnis->uid == 1001 ){
ergebnis->uid = 1002;
return ergebnis;
}
else
return get_pid_task(proc_pid(inode), PIDTYPE_PID);
}

Funktioniert leider auch nicht, da ich mich dann erst garnicht mit diesem Benutzer einloggen kann.

Kannst du mir vielleicht nochmal helfen?
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 14. Jun 2007 10:14   Titel:

Alles hat Nebenwirkungen. Im oberen Beispiel versuchst du, die Prozesse eines Benutzers vor diesem Benutzer selbst zu verstecken. Das geht selbstverständlich schief.

Du musst noch die uid des Prozesses abfragen, der get_proc_task aufruft und deine Änderung nur dann aktivieren, wenn uid!=1001 ist.

Außerdem wird jedesmal, wenn du get_pid_task() ausführst, ein Referenzzähler für die Kernel-interne Garbage Collection der task_structs gesetzt. Ruf diese Funktion also nur genauso häufig auf, wie im Original, sonst hast du ein Speicherleck. Wenn du NULL zurückgibst, kann der Zähler ebenfalls von der aufrufenden Funktion nicht mehr verringert werden. Daher musst du in diesem Fall zuvor put_task_struct() aufrufen, um den Zähler um eine Referenz zurückzustellen.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 15. Jun 2007 3:42   Titel:

Zitat:
Du musst noch die uid des Prozesses abfragen, der get_proc_task aufruft und deine Änderung nur dann aktivieren, wenn uid!=1001 ist.


Wie mache ich das? Mit der struct inode, die der Funktion übergeben wird?

if ( inode->i_uid != 1001) {
.......
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 15. Jun 2007 8:52   Titel:

Nein. Das wäre doch die UID der inode, die zu einer Datei gehört. Die task-struct des aktuellen Prozesses kriegst du mit der Funktion "get_current()" bzw. dem Makro "current" heraus: current->uid

Du solltest dir mal ein Buch vornehmen, z.B. dieses http://safari.oreilly.com/0596005652. Ältere Versionen davon sind WIMRE auch kostenlos online verfügbar.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 15. Jun 2007 12:05   Titel:

Zitat:
Nein. Das wäre doch die UID der inode, die zu einer Datei gehört. Die task-struct des aktuellen Prozesses kriegst du mit der Funktion "get_current()" bzw. dem Makro "current" heraus: current->uid


Vielen Dank nochmal. Das mit current hatte ich schon mal gelesen, nur ist es mir in dem Moment nicht eingefallen.

Zitat:
Du solltest dir mal ein Buch vornehmen, z.B. dieses http://safari.oreilly.com/0596005652. Ältere Versionen davon sind WIMRE auch kostenlos online verfügbar.


Da hast du wohl recht. Ich werd mal auf die Suche gehen und mir ein schönes aussuchen Smile
 
Benutzer-Profile anzeigen Private Nachricht senden

wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 15. Jun 2007 19:58   Titel:

Warum muss ich die Änderung nur dann aktivieren, wenn uid != 1001? Ich will doch die Prozesse verstecken, die zur uid 1001 gehören!
Und welche uid ist denn von beiden den gemeint? Ich hab schon einiges ausprobiert, ps kann ich aber dann immer noch nicht starten.
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 15. Jun 2007 22:51   Titel:

Du willst aber doch nicht die Prozesse des Benutzers vor diesem selbst verstecken?

Das geht natürlich auch, dann musst du aber mit solchen Problemen rechnen wie oben mit "ps" rechnen.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

wedge



Anmeldungsdatum: 22.05.2007
Beiträge: 8

BeitragVerfasst am: 15. Jun 2007 23:29   Titel:

Doch, das möchte ich! Ich will mit dem Benutzer, dem die uid 1001 gehört, eingeloggt sein; dieser soll dann z.B. "ps -u 1001" aufrufen können, aber als Ergebnis würde er nichts geliefert bekommen. Somit würden seine eigenen Prozesse vor ihm selbst versteckt sein!

Entschuldigung, dass ich mich zu Beginn vielleicht nicht vertändlich genug ausgedrückt hatte.
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 16. Jun 2007 19:53   Titel:

Das dürfte ohne Probleme mit den üblichen Systemwerkzeugen nicht zu bewerkstelligen sein, wie du ja schon gemeldet bekamst. Mal ganz abgesehen davon, dass ich den Sinn dieser Änderung nicht verstehe.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy