প্রশ্ন পোর্ট 80 তে লিনাক্সে স্বাভাবিক ব্যবহারকারী হিসাবে সার্ভার কিভাবে চালানো যায়?


আমি বেশ কিছু সময়ের জন্য এটি সম্পর্কে googled আছে, কিন্তু এটি খুঁজে পাচ্ছি না।

আমি উবুন্টু লিনাক্সে আছি এবং পোর্ট 80 তে একটি সার্ভার চালাতে চাই, কিন্তু উবুন্টুর নিরাপত্তা ব্যবস্থার কারণে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

java.net। বিন্দু ব্যতিক্রম: অনুমতি অস্বীকার: 80

আমার মনে হয় এটি এই সুরক্ষা প্রক্রিয়াটিকে অক্ষম করতে যথেষ্ট সহজ হওয়া উচিত যাতে পোর্ট 80 সকল ব্যবহারকারীদের জন্য উপলব্ধ থাকে অথবা পোর্ট 80 অ্যাক্সেস করতে বর্তমান ব্যবহারকারীর প্রয়োজনীয় সুবিধাগুলি বরাদ্দ করতে পারে।


282
2017-11-10 14:31


উত্স


অন্য পোর্টে সার্ভার চালানোর সমস্যা কী? আপনি যে পোর্টে সার্ভার চালানোর জন্য কমপক্ষে গুরুতর কারণ সরবরাহ না করে নিরাপত্তা প্রক্রিয়াটি নিষ্ক্রিয় করার মতো কঠোর কিছু সম্পর্কে চিন্তা করছেন। সার্ভারটি পোর্ট 80 এ বাঁধন কঠিন? যদি তাই হয়, এটা দূরে নিক্ষেপ। - Anonymous
অথবা একটি পাইথন ত্রুটি বার্তা: socket.error: [Errno 13] Permission denied - Kazark
সম্ভাব্য সদৃশ 1024 এর নিচে পোর্ট ব্যবহার করে নিয়মিত ব্যবহারকারী - Roman
তুমি পারবে না 1024 এর নিচে পোর্টগুলি বিশেষাধিকারযুক্ত এবং শুধুমাত্র রুট তাদের শোনা শোনাতে পারে। করার জন্য উপযুক্ত জিনিস এটা খোলা পরে অনুমতি ড্রপ হয়। - Falcon Momot
"বেনামী" - বিশ্বের ব্যবহারকারীদের নির্দিষ্ট পোর্টে কিছু পরিষেবা সন্ধান করার জন্য প্রশিক্ষণ দেওয়া হয়েছে। কিছু ক্ষেত্রে, এটি মানসম্মত করা হয়েছে। উদাহরণস্বরূপ, পোর্ট 443 এবং HTTP 443 এ HTTPS এ HTTP। ব্যবহারকারীদের এবং বিশ্বের মানগুলি পরিবর্তন করার জন্য এটির ধরনের কঠিন। - jww


উত্তর:


সংক্ষিপ্ত উত্তর: আপনি করতে পারেন না। 1024 এর নিচে পোর্ট শুধুমাত্র রুট দ্বারা খোলা যাবে। মন্তব্য অনুযায়ী - ভাল, আপনি ব্যবহার করতে পারেন CAP_NET_BIND_SERVICE, কিন্তু যে পদ্ধতিটি জাভা বিনতে প্রয়োগ করা হবে সেটিকে কোনও জাভা প্রোগ্রামটি এই সেটিং দিয়ে চালানো হবে, যা নিরাপত্তার ঝুঁকি না থাকলে অনিশ্চিত।

দীর্ঘ উত্তর: আপনি স্বাভাবিক ব্যবহারকারী হিসাবে খুলতে পারেন এমন অন্য কোন পোর্টে পোর্ট 80 এ সংযোগগুলি পুনঃনির্দেশ করতে পারেন।

রুট হিসাবে চালান:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

লুপব্যাক ডিভাইসগুলি (স্থানীয় লোহাস্টেটের মতো) পূর্ববর্তী নিয়মগুলি ব্যবহার করে না, যদি আপনি স্থানীয় হোস্ট ব্যবহার করতে চান, ইত্যাদি, এই নিয়মটিও যোগ করুন (ধন্যবাদ @ ফ্রান্সসকো):

# iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

উল্লেখ্য: উপরের সমাধান এটি না মাল্টি-ইউজার সিস্টেমের জন্য উপযুক্ত, কোনও ব্যবহারকারী পোর্ট 8080 (অথবা আপনি যে কোনও উচ্চ পোর্ট ব্যবহার করার সিদ্ধান্ত নিচ্ছেন) খুলতে পারেন, এইভাবে ট্রাফিককে আটকাতে পারে। (ক্রেডিট CesarB)।

সম্পাদনা করুন: মন্তব্যের প্রশ্ন অনুসারে - উপরের নিয়মটি মুছে ফেলতে:

# iptables -t nat --line-numbers -n -L

এই মত কিছু আউটপুট হবে:

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 redir ports 8088
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 8080

আপনি আগ্রহী শাসন এনআর হয়। 2, তাই এটি মুছে ফেলতে:

# iptables -t nat -D PREROUTING 2

331
2017-11-10 14:41



@ সুনি: পশ্চিমে দ্রুততম বন্দুকের জন্য আপভোটগুলি নেই, তবে সেরা প্রতিক্রিয়ার জন্য। আপনার এখন পর্যন্ত সেরা (আমি কেবল iptables উল্লেখ করেছি; আপনি আসলে সম্পূর্ণ কমান্ড লাইন সরবরাহ করেছেন)। আমার একমাত্র জিনিসটি আপনার কাছে নেই, এটি অন্যান্য ব্যবহারকারীদের পোর্ট 8080 এ বাঁধতে সক্ষম। - CesarB
উল্লেখ্য যে এটি IPv6 এর সাথে কাজ করে না। - Emmanuel Bourg
আমি কি চাইলে আমি এই নিয়মটি মুছে ফেলতে পারি? এটি চালানোর পরে, এটি কাজ করে, কিন্তু দৃশ্যত এটি একটি "নিয়ম" নয় কারণ এটি যখন দেখায় না তখন এটি প্রদর্শিত হয় না sudo iptables --list। আমি জানি iptables কি এবং কি, কিন্তু আমি এটা আগে সত্যিই এটি ব্যবহার না। - Encoderer
আপনার উত্তরের জন্য ধন্যবাদ ... যখনই আমি উবুন্টু পুনরায় বুট করি, এই নিয়মটি অদৃশ্য হয়ে যায় এবং আমাকে আবার এটি চালাতে হবে। এটা চিরতরে সংরক্ষণ করার একটি উপায় আছে কি? - Coderji
@ কোডারজি: কমিউনিটি ডকুমেন্টেশনে "সংরক্ষণ করুন" বিভাগটি চেক করুন: help.ubuntu.com/community/IptablesHowTo - Sunny


ব্যবহার authbind

আপনি জাভা এর আইপিভি 4-স্ট্যাক সক্ষম করলেও এটি জাভা দিয়ে কাজ করে। আমি ব্যবহার করি:

authbind --deep $JAVA_HOME/bin/java -Djava.net.preferIPv4Stack=true …

77
2017-11-14 13:12



সার্ভার যদি টম্যাট হয় তবে আপনি সেটআপ করে স্বয়ংক্রিয়ভাবে অথিবিন্ড ব্যবহার করতে পারেন AUTHBIND=yes / etc / ডিফল্ট / tomcat6 মধ্যে - Emmanuel Bourg
ডিফল্ট জাভা প্যাকেজ সহ উবুন্টু সার্ভারে কাজ করার জন্য আমি এটি পেতে পারিনি ... - Ashley Steel
আমি না, কোন পরিচিত সমাধান? - mark
আপনি কনফিগার করা আবশ্যক মনে রাখবেন authbind আসলে এই ঘটতে অনুমতি। ম্যান পৃষ্ঠা থেকে: "/ etc / authbind / byport / port পরীক্ষা করা হয়। যদি এই ফাইলটি কলিং ব্যবহারকারীর অ্যাক্সেসের জন্য অ্যাক্সেসযোগ্য হয় তবে অ্যাক্সেসের (2) অনুসারে, পোর্টে বাঁধাই অনুমোদিত।", যেমন পোর্ট 80 জন্য, sudo touch /etc/authbind/byport/80 ; sudo chmod 777 /etc/authbind/byport/80। প্রাথমিক ইনস্টলেশনের authbind সাধারণত কোন প্রাক কনফিগারেশন অনুমোদন নেই। - Jason C
ওহ নননননননও, কখনো 777 কিছু না! - Johannes


যদি আপনার সিস্টেম এটি সমর্থন করে তবে আপনি সম্ভবত ক্ষমতা ব্যবহার করতে পারে। মানুষের ক্ষমতা দেখুন, আপনার যা দরকার তা CAP_NET_BIND_SERVICE হবে।

নতুন ডেবিয়ান / উবুন্টুতে আপনি চালাতে পারেন:

sudo apt-get install libcap2-bin 
sudo setcap 'cap_net_bind_service=+ep' /path/to/program

46
2018-05-30 20:32



এই নোডজ জন্য কাজ করে: setcap 'cap_net_bind_service = + ep' / usr / bin / nodejs - JasonS
এই. আমি এই উত্তর আরো upvotes না কেন আশ্চর্য। Iptables বিকল্পের চেয়ে অনেক সহজ imho। - Dominik R
এটি সঠিক এবং সর্বাধিক কার্যকর উত্তর, অন্য সকল উত্তরগুলি একটি কর্মক্ষমতা আঘাত বা শুধুমাত্র iffy / অনিরাপদ কারণ করে। - OneOfOne


আরেকটি সমাধান হল আপনার অ্যাপ সেটুড তৈরি করা যাতে এটি পোর্ট 80 দিয়ে বাঁধতে পারে। রুট হিসেবে, নিচেরটি করুন

chown root ./myapp
chmod +S ./myapp

মনে রাখবেন যে এটি করা, যদি না একেবারে সঠিক না হয় তবে এটি আপনাকে সম্ভাব্য সুরক্ষা গর্তে প্রকাশ করবে, কারণ আপনার অ্যাপ্লিকেশনটি নেটওয়ার্কটিতে কথা বলবে এবং সম্পূর্ণ রুট ব্যক্তিগতকৃতদের সাথে চলবে। আপনি যদি এই সমাধানটি গ্রহণ করেন তবে আপনাকে অ্যাপাচি বা লাইটটপডের জন্য সোর্স কোডটি দেখতে বা একইরকম কিছু দেখতে হবে যেখানে তারা রুট সুবিধাগুলি পোর্টটি খুলতে ব্যবহার করে, কিন্তু তারপরে তা অবিলম্বে সেই গোপনীয়তাগুলি ছেড়ে দেয় এবং একটি নিম্ন বিশেষাধিকারী ব্যবহারকারী হয়ে যায় যাতে একটি হাইজ্যেকের আপনার পুরো কম্পিউটার গ্রহণ করা যাবে না।

আপডেট: হিসাবে দেখা এই প্রশ্ন, এটি প্রদর্শিত হয়েছে যে 2.6.24 এর পরে লিনাক্স কার্নেলগুলির একটি নতুন ক্ষমতা রয়েছে যা আপনাকে এক্সিকিউটেবল চিহ্নিত করতে দেয় (অবশ্যই একটি স্ক্রিপ্ট নয়) হিসাবে "CAP_NET_BIND_SERVICE"ক্ষমতা। আপনি যদি" ​​libcap2-bin "ডেবিয়ান প্যাকেজ ইনস্টল করেন, তবে আপনি কমান্ডটি দিয়ে এটি করতে পারেন

setcap 'cap_net_bind_service=+ep' /path/to/program

39
2017-11-10 14:44



এটি রুট হিসাবে চলমান হিসাবে একই, অ্যাপ্লিকেশন priviledges ড্রপ কিভাবে জানেন না। - CesarB
এটা বিপজ্জনক. এর মানে হল যে কোনও রুট হিসাবে চালানো হবে। এটি এমন একটি কারণ যা এমনকি অ্যাপাচিটি রুট হিসাবে শুরু হয় এবং তারপর অন্য ব্যবহারকারীর কাছে সুবিধাগুলিকে ছেড়ে দেয়। - Sunny
পল: iptables এত বিপজ্জনক নয়, কারণ অ্যাপটি আপোস করা হলেও, এটি সিস্টেমকে ক্ষতিকারকভাবে প্রকাশ করবে না, অন্তত রুট সুবিধাগুলির সাথে নয়। রুট হিসাবে অ্যাপ্লিকেশন চলমান অন্য গল্প। - Sunny
IPtables এর জন্য বিপদ শুধুমাত্র যদি এটি একটি বহু-ব্যবহারকারী সিস্টেম হয়, যেমন সেজারব বলেছে যে, যেহেতু কেউ 8080 এর সাথে সংযুক্ত হতে পারে এবং ট্রাফিকটি আটকাতে পারে। - Sunny
Lol, গ্রহণযোগ্য উত্তর একটি -15 কিভাবে প্রেম - Evan Teran


সানি এবং সিজারবি প্রস্তাবিত পদ্ধতি:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

জরিমানা কাজ করে কিন্তু এটি একটি ক্ষয়ক্ষতি রয়েছে - এটি ব্যবহারকারীকে 80 এর পরিবর্তে পোর্ট 8080 এ সরাসরি সংযোগ করতে বাধা দেয় না।

এই সমস্যা হতে পারে যখন নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন।

চলুন বলি আমাদের একটি সার্ভার রয়েছে যা পোর্ট 8080 এ HTTP সংযোগ গ্রহণ করে এবং পোর্ট 8181 এ HTTPS সংযোগগুলি গ্রহণ করে।

আমরা নিম্নলিখিত পুনঃনির্দেশগুলি স্থাপন করতে iptables ব্যবহার করি:

80  ---> 8080
443 ---> 8181

এখন, ধরুন আমাদের সার্ভারটি HTTP পৃষ্ঠা থেকে একটি HTTPS পৃষ্ঠাতে ব্যবহারকারীকে পুনঃনির্দেশিত করার সিদ্ধান্ত নিয়েছে। আমরা সাবধানে প্রতিক্রিয়া পুনর্লিখন না হওয়া পর্যন্ত, এটা পুনঃনির্দেশিত করা হবে https://host:8181/। এই সময়ে, আমরা মাতাল হয়:

  • কিছু ব্যবহারকারীর বুকমার্ক হবে https://host:8181/ ইউআরএল এবং আমাদের বুকমার্কগুলি এড়াতে এ URL টি বজায় রাখতে হবে।
  • অন্যান্য ব্যবহারকারীরা সংযোগ করতে সক্ষম হবেন না কারণ তাদের প্রক্সি সার্ভারগুলি অ-স্ট্যান্ডার্ড SSL পোর্টগুলিকে সমর্থন করে না।

আমি নিম্নলিখিত পদ্ধতি ব্যবহার করি:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8181
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -m mark --mark 1 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8181 -m mark --mark 1 -j ACCEPT

INPUT শৃঙ্খলে ডিফল্ট REJECT রুলের সাথে যুক্ত এই পদ্ধতিটি ব্যবহারকারীদের সরাসরি পোর্টে সংযোগ করতে বাধা দেয় 8080, 8181


35
2018-02-20 16:19



এটি ভাল, তবে কেন ডিমনটিকে স্থানীয় হোস্টে আটকে দেবেন না: 8080 পরিবর্তে 8080:8080? আমি এটা করতে চাই, কিন্তু আমার জন্য iptables প্রয়োজন। - Amala
এটা সত্যিই শান্ত কাজ করে। - xtian


আমি কেবল সামনে Nginx ব্যবহার করুন। এটা খুব localhost চালাতে পারেন।

  • apt-get install nginx

.. অথবা ..

  • pkg_add -r nginx 

.. অথবা কি কখনও আপনার ওএস উপযুক্ত।

যদি আপনি localhost এ চলমান, তাহলে nginx.conf তে সবই প্রয়োজন:

সার্ভার {
        শুনতে 80;
        সার্ভার_নাম some.domain.org;
        অবস্থান / {
            proxy_set_header হোস্ট $ হোস্ট;
            proxy_set_header এক্স-রিয়েল-আইপি $ remote_addr;
            proxy_set_header এক্স-ফরোয়ার্ড- $ proxy_add_x_forwarded_for জন্য;
            proxy_pass http://127.0.0.1:8081;
        }
}

35
2017-11-20 14:30



আমি সত্যিই এই সমাধান পছন্দ। - thomasfedb
JFrog থেকে এটি প্রস্তাবিত সমাধানটি হল: jfrog.com/confluence/display/RTF/nginx - stolsvik


ঐতিহ্যগতভাবে ইউনিক্সে, শুধুমাত্র রুট কম পোর্টে (<1024) বাঁধতে পারে।

এই কাজ করতে সবচেয়ে সহজ উপায় একটি আপনার সার্ভার চালানোর হয় উচ্চ পোর্ট (উদাহরণস্বরূপ, 8080) এবং পোর্ট 80 থেকে পোর্ট 8080 এ সংযোগগুলিকে ফরওয়ার্ড করার জন্য একটি সহজ iptables নিয়ম ব্যবহার করুন। এটি লক্ষ্য করুন যে আপনি নিম্ন পোর্ট থেকে অতিরিক্ত সুরক্ষা হারাবেন; আপনার মেশিনে যেকোনো ব্যবহারকারী পোর্ট 8080 এ বাঁধতে পারে।


29
2017-11-10 14:36





যদি আপনার সিস্টেম এটি সমর্থন করে তবে আপনি সম্ভবত ক্ষমতা ব্যবহার করতে পারে। দেখ man capabilities, আপনি প্রয়োজন হবে CAP_NET_BIND_SERVICE। না, আমি কখনো তাদের ব্যবহার করি নি এবং তারা আসলেই কাজ করে না আমি জানি না :-)


23
2017-11-10 16:27



তারা কাজ করে, আমি সাধারণ ব্যবহারকারী হিসাবে tcpdump মত সরঞ্জাম চালানোর জন্য CAP_NET_RAW ব্যবহার করি। - Justin


আপনার অ্যাপ্লিকেশন সার্ভারগুলির সামনে একটি বিপরীত প্রক্সি (nginx, apache + mod_proxy) বা একটি ক্যাশিং বিপরীত প্রক্সি (স্কুইড, বার্নিশ) ব্যবহার করুন!

বিপরীত প্রক্সি দিয়ে আপনি অনেকগুলি আকর্ষণীয় জিনিস যেমনটি অর্জন করতে পারেন:

  • লোড-ব্যালেন্সিং
  • একটি ফ্যান্সি ত্রুটি পৃষ্ঠা প্রাপ্ত ব্যবহারকারীদের সাথে আপনার অ্যাপ্লিকেশন সার্ভার পুনরায় আরম্ভ
  • ক্যাশে সঙ্গে জিনিষ গতি
  • আপনি সাধারণত একটি বিপরীত-প্রক্সি দিয়ে এবং কোনও অ্যাপ্লিকেশন সার্ভারের সাথে নয় এমন সূক্ষ্ম-গোষ্ঠী সেটিংস

11
2017-10-18 15:36