Bağlantı noktası 80'e bağlanan bir web hizmetini çalıştırmak genellikle sudoer ayrıcalıklarına ihtiyaç duymaz.
80/443 portları sistem portları olduğu için, sadece imtiyazlı kullanıcılar tarafından kullanılabilirler, bu hizmetler bu portlara nasıl bağlanabiliyor?
Temel olarak iki farklı yaklaşım vardır:
-
Başlangıçta root olarak çalışmaya başlayın, ayrıcalıklı bağlantı noktasına bağlanın ve ardından ayrıcalıklı olmayan bir kullanıcıya bırakın.
-
inetd veya xinetd ayrıcalıklı olarak çalışır ve istekleri web sunucusuna ayrıcalıksız olarak iletir.
80/443 numaralı bağlantı noktası sistem bağlantı noktaları olduğundan, yalnızca ayrıcalıklı kullanıcılar tarafından kullanılabilirler.
Sanırım yanlış anladın. Bu portları herkes kullanabilir. bağlayıcı Onlara ayrıcalıklı bir işlemdir.
Buradaki mantık, bazı kullanıcıların Joe'nun kötü niyetli bir web sunucusu yazamayacağı ve daha sonra herhangi bir yönetici haklarına sahip olmadığı bir ev sahibi yapamaması gerektiğidir. Elbette bu oldukça zayıf bir modeldir, genellikle Joe'nun kendi bilgisayarını ağa koymasını engelleyen hiçbir şey yoktur ve fiziksel erişimi olan herhangi bir makinenin yönetim haklarına sahip olabilir.
Netcat ile bir gösteri yapacağım.
Sıradan bir kullanıcı olarak 80 numaralı bağlantı noktasına bağlanamıyorum:
$ nc -l -p 80
Can't grab 0.0.0.0:80 with bind : Permission denied
8080 numaralı bağlantı noktasına bağlanabilirim:
$ nc -l -p 8080
Bu arada başka bir terminalde 80 numaralı bağlantı noktasına bağlanabilir ve bazı veri gönderebilirim ve yeni başladığım sunucu ucunda görünebilir:
$ nc 127.0.0.1 8080 <<<"Hello world"
Eğer 80 numaralı bağlantı noktasına bağlanmak istersem kök olmalısın:
$ sudo nc -l -p 80
Ya da ben atayabilirim
CAP_NET_BIND_SERVICE yeteneği
nc ikili:
$ cp `which nc` .
$ sudo setcap 'cap_net_bind_service=+ep' ./nc
$ ./nc -l -p 80
Başka bir seçenek, sunucu programını çağırdıktan sonra yazmaktır.
listen() root ayrıcalıklarına düşer. Bu oldukça yaygın bir çözümdür ve onu çoğu daemon ile göreceksiniz. Apache, örneğin, init'ten root olarak başlatılır ve daha sonra root ayrıcalıklarını düşürür ve kullanıcı olur.
www-data ya da 80 numaralı bağlantı noktasına bağlı olduğunda benzer bir şey.
/etc/init.d/apache start Kök değil ve Apache muhtemelen başlayamaz.