setcap 'cap_net_bind_service=+ep' /path/to/program
to bude fungovat pro konkrétní procesy. Chcete-li však konkrétnímu uživateli povolit vazbu na porty pod 1024, budete ho muset přidat do sudoers.
Podívejte se na tuto diskuzi pro více.
(Některé z těchto metod byly zmíněny v jiných odpovědích; uvádím několik možných možností v hrubém pořadí preferencí.)
Nízký port můžete přesměrovat na vysoký port a poslouchat na vysokém portu.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Server můžete spustit jako uživatel root a poté, co začal naslouchat na privilegovaném portu, zahodit oprávnění. Raději než to kódovat sami, spusťte svůj server z obalu, který za vás udělá práci. Pokud váš server spouští jednu instanci na připojení, spusťte jej od inetd
(nebo podobný program jako xinetd
). Pro inetd
, použijte řádek jako tento v /etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Pokud váš server naslouchá v jediné instanci, spusťte jej z programu, jako je authbind
. Buď vytvořte prázdný soubor /etc/authbind/byport/80
a učinit jej spustitelným pro uživatele provozujícího server; nebo vytvořte /etc/authbind/byuid/1234
, kde 1234 je UID, na kterém běží server, obsahující řádek 0.0.0.0/0:80,80
.
Pokud je spustitelný soubor vašeho serveru uložen na souborovém systému, který podporuje funkce, můžete mu přidělit cap_net_bind_service
schopnost. Mějte na paměti, že schopnosti jsou stále relativně nové a stále mají několik zádrhelů.
setcap cap_net_bind_service=ep /path/to/server/executable
Krátká odpověď je, že to není možné z návrhu.
Dlouhá odpověď je, že ve světech open source si spousta lidí hraje s designem a vymýšlí alternativní metody. Obecně je všeobecně uznávanou praxí, že by to nemělo být možné. Skutečnost, že se snažíte, pravděpodobně znamená, že máte ve svém systému další konstrukční chybu a měli byste přehodnotit celou architekturu svého systému ve světle osvědčených postupů *nix a bezpečnostních důsledků.
To znamená, že jeden program pro autorizaci non-root přístupu k nízkým portům je authbind. Jak selinux, tak grsecurity také poskytují rámce pro takto vyladěné ověřování.
A konečně, pokud chcete, aby konkrétní uživatelé spouštěli konkrétní programy jako root a co opravdu potřebujete, je umožnit uživateli restartovat apache nebo něco podobného, sudo
je tvůj přítel!