Wie kann ein Benutzer daran gehindert werden, Befehlszeilenargumente anzuzeigen?

1

Wir haben eine CI-Server-Anwendung als buildBenutzer ausgeführt. Jeder Befehl mit Argumenten, die vom CI-Server ausgeführt werden, ist über sichtbar ps. Benutzer ohne Administratorrechte haben zwar keinen Zugriff auf das Laden einer Shell auf dem CI-Server, sie haben jedoch Zugriff auf das Ausführen von Unix-Befehlen über eine Task.

Meine Sorge ist; Benutzer A kann möglicherweise die Aufgabe von Benutzer B mit Befehlszeilenargumenten (die möglicherweise vertrauliche Informationen enthalten können) anzeigen, indem Sie einfach Folgendes ausführen: a ps.

Beachten Sie, dass alle Aufgaben auf dem CI-Server als buildBenutzer ausgeführt werden. Benutzer können nicht zu anderen wechseln user.

Ich könnte den psBefehl möglicherweise so blockieren, dass ein Benutzer ihn innerhalb einer Aufgabe nicht ausführen kann. Dies pssollte mein Problem lösen, aber ich bin gespannt, ob ich Folgendes weiß:

  1. Gibt es andere Befehle, die ausgeführt werden können, um Befehlszeilenargumente ohne rootBerechtigungen anzuzeigen?
  2. Gibt es angesichts des Zusammenhangs dieses Problems eine bessere / sichere Möglichkeit, es zu verwalten?
kaizenCoder
quelle
Das Blockieren von ps ist keine gute Idee, und dann kann sich ein entschlossener Benutzer direkt an proc wenden. Werfen Sie
Rui F Ribeiro
Alle diese Befehle werden also ausgeführt als build? Wenn sie als unterschiedliche Benutzer ausgeführt würden, könnte dies durchgeführt werden.
muru
@RuiFRibeiro: Das Blockieren psfür alle Benutzer ist wahrscheinlich nicht das, wonach ich suche, da es für die Verwaltung des Systems von entscheidender Bedeutung ist. procKann vielleicht auch deaktiviert werden? aber wenn es noch andere Mittel gibt, ist es vielleicht kein effizienter Weg, dies zu tun.
KaizenCoder
@muru: Ich fürchte, alle Befehle werden als buildBenutzer ausgeführt.
KaizenCoder
1
@aspiringCodeArtisan Blockiert nicht für Root- / Sudo-Vorgänge.
Rui F Ribeiro

Antworten:

3

Ich fürchte, alle Befehle werden als Build-Benutzer ausgeführt.

Dann kann jeder, der einen Build einreicht, die Jobs eines anderen Benutzers sehen und sogar stören. Das Ausführen eines Builds kann beliebigen Code ausführen. Dies ermöglicht jedem, der einen Build einreicht, nicht nur das Ausführen, pssondern auch das Lesen und Schreiben von Dateien, die zu anderen Jobs gehören. Wenn Sie nicht die Benutzer vertrauen können , die einreichen baut dann Sie müssen laufen die als separate Benutzer aufbaut.

Wenn Sie sich nur mit Benutzern befassen, die ein Konto auf diesem CI-Server haben, aber keine Builds senden dürfen, kann diehidepid Option hilfreich sein. Alternativ können Sie Build-Übermittler anweisen, vertrauliche Informationen in Dateien oder Umgebungsvariablen anstelle von Befehlszeilenargumenten zu übergeben. Beachten Sie, dass der psBefehl nicht das ist, worum Sie sich kümmern müssen, sondern nur ein hübscher Drucker für Informationen im proc-Dateisystem . Die Befehlszeile des Prozesses 1234 kann mit gedruckt werden cat /proc/1234/cmdline.

Wenn Sie Bedenken hinsichtlich der Vertraulichkeit von Builds haben, sollten Sie nicht versuchen, jeweils ein potenzielles Informationsleck zu schließen, sondern alle Builds in einem Container oder einer virtuellen Maschine ausführen .

Gilles
quelle
4

überprüfen Sie die hidepidOption für die Montage / proc

On multi-user systems, it is often useful to secure the process directories stored in /proc/ so that they can be viewed only by the root user. You can restrict the access to these directories with the use of the hidepid option.
To change the file system parameters, you can use the mount command with the -o remount option. As root, type:

mount -o remount,hidepid=value /proc

Here, value passed to hidepid is one of:

    0 (default) — every user can read all world-readable files stored in a process directory.
    1 — users can access only their own process directories. This protects the sensitive files like cmdline, sched, or status from access by non-root users. This setting does not affect the actual file permissions.
    2 — process files are invisible to non-root users. The existence of a process can be learned by other means, but its effective UID and GID is hidden. Hiding these IDs complicates an intruder's task of gathering information about running processes. 

link für mehr info -

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/ch-proc.html
jai_s
quelle
Leider werden alle Prozesse als derselbe Benutzer ausgeführt.
muru
als @Rui F Ribeiro darauf hingewiesen Parameter 2ist möglicherweise eine Option.
KaizenCoder
1

Anstatt Informationen in der Befehlszeile zu übergeben, können Sie Ihr Programm so ändern, dass es die Informationen in der Standardeingabe liest und über einen Unterprozess ausführt, der es mit popen(einer Pipe) startet . Stellen Sie sicher, dass Sie das Rohr mit schließen, pclosewenn Sie fertig sind.

Weitere Lektüre:

Thomas Dickey
quelle
1
Vielen Dank für die Antwort, aber da dies ein CI-Server mit vielen Benutzern ist, wäre es nicht praktisch, diese Leitplanke aufzuerlegen.
KaizenCoder