Assume a script runs on boot as root. From this script I want to start tcpsvd -E 0 515 lpd. I want tcpsvd to run as an unprivileged user. But it requires root privileges to bind to the port 515. How can I achieve this?
Further I have to use 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
$BUSY/busybox tcpsvd -u manuel:manuel -E 0 515 $BUSY/busybox lpd /var/spool zenity --error --text "$DATAFILE"returns nothing. $DATAFILE is set by lpd. lpd is run as manuel but the environment is root. How do I change this behaviour?$DATAFILEwhen you type that command, not whenlpdexecuteszenity. You need to put thezenitycommand into a shell script, and havelpdcall that script. Then$DATADIRwill be expanded at the right time.