
Angenommen, beim Booten wird ein Skript als Root ausgeführt. Von diesem Skript aus möchte ich starten tcpsvd -E 0 515 lpd
. Ich möchte es tcpsvd
als nicht privilegierter Benutzer ausführen. Für die Verbindung mit Port 515 sind jedoch Root-Privilegien erforderlich. Wie kann ich dies erreichen?
Weiterhin muss ich verwenden busybox tcpsvd
:
tcpsvd
tcpsvd [-hEv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] IP PORT PROG
Create TCP socket, bind to IP:PORT and listen for incoming connection.
Run PROG for each connection.
IP IP to listen on. '0' = all
PORT Port to listen on
PROG [ARGS] Program to run
-l NAME Local hostname (else looks up local hostname in DNS)
-u USER[:GRP] Change to user/group after bind
-c N Handle up to N connections simultaneously
-b N Allow a backlog of approximately N TCP SYNs
-C N[:MSG] Allow only up to N connections from the same IP
New connections from this IP address are closed
immediately. MSG is written to the peer before close
-h Look up peer's hostname
-E Do not set up environment variables
-v Verbose
Antwort1
Sie müssen das Programm an den Port binden, während Sie es als Root ausführen, und dann zu Ihrem nicht privilegierten Benutzer wechseln. tcpsvd
bietet -u
hierfür folgende Option:
-u user[:group]
drop permissions. Switch user ID to user’s UID, and group ID to
user’s primary GID after creating and binding to the socket. If
user is followed by a colon and a group name, the group ID is
switched to the GID of group instead. All supplementary groups
are removed.