
Предположим, что скрипт запускается при загрузке как root. Из этого скрипта я хочу запустить tcpsvd -E 0 515 lpd
. Я хочу tcpsvd
запустить как непривилегированный пользователь. Но для привязки к порту 515 требуются привилегии root. Как этого добиться?
Далее мне придется использовать 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
решение1
Вам необходимо привязать программу к порту, работая от имени root, а затем переключиться на непривилегированного пользователя. tcpsvd
предлагает -u
возможность сделать это:
-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.