80/443 numaralı bağlantı noktası sistem bağlantı noktaları olduğundan, bunlar yalnızca ayrıcalıklı kullanıcılar tarafından kullanılabilir
Bence yanlış anladın. Herkes bu bağlantı noktalarını kullanabilir. Onlara bağlanmak ayrıcalıklı bir işlemdir.
Buradaki mantık, bazı Joe kullanıcılarının kötü amaçlı bir web sunucusu yazamaması ve ardından herhangi bir yönetici haklarına sahip olmadığı bir ana bilgisayar yapmaması gerektiğidir. Tabii ki bu oldukça zayıf bir model, genellikle Joe'nun kendi bilgisayarını ağa koymasını engelleyen hiçbir şey yoktur ve fiziksel erişimi olan herhangi bir makineye yönetici haklarına sahip olabilir.
Netcat ile bir gösteri yapacağım.
Sıradan bir kullanıcı olarak, bağlantı noktası 80'e 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ı veriler gönderebilirim ve yeni başladığım sunucu sonunda görüyorum:
$ nc 127.0.0.1 8080 <<<"Hello world"
Bağlantı noktası 80'e bağlanmak istiyorsanız, kök olmalıyım:
$ sudo nc -l -p 80
Ya da ben ikiliğe CAP_NET_BIND_SERVICE
yeteneği atayabilir nc
:
$ cp `which nc` .
$ sudo setcap 'cap_net_bind_service=+ep' ./nc
$ ./nc -l -p 80
Başka bir seçenek, sunucu programını, çağrıldıktan sonra listen()
kök ayrıcalıklarını düşürecek şekilde yazmaktır . Bu oldukça yaygın bir çözümdür ve bunu pek çok cin ile göreceksiniz. Örneğin Apache, init'ten root olarak başlar ve daha sonra root ayrıcalıklarını bırakır ve www-data
80 numaralı bağlantı noktasına bağlandıktan sonra kullanıcı veya benzeri bir şey haline gelir /etc/init.d/apache start
.