সেটেল ক্যাপ_নেট_বাইন্ড_সার্ভিস + এপি সহ কীভাবে ওরাকল জাভা 7 পাবেন


11

আমি জাভা এক্সিকিউটেবলকে লিনাক্সে 1024 এর নীচে বন্দরগুলি খোলার অধিকার দেওয়ার চেষ্টা করছি। এখানে সেটআপ দেওয়া আছে

  • /home/test/java ওরাকল সার্ভার জেআরই 7.0.25 রয়েছে
  • CentOS 6.4

গেটক্যাপটি কী ফেরত দেয় তা এখানে

[test@centos6 java]$ pwd
/home/test/java

[test@centos6 java]$ getcap bin/java
bin/java = cap_net_bind_service+ep

[test@centos6 java]$ getcap jre/bin/java
jre/bin/java = cap_net_bind_service+ep

জাভা কার্যকর করার চেষ্টা করা নিম্নলিখিত ত্রুটি দেয়।

[test@centos6 java]$ bin/java
bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
[test@centos6 java]$ jre/bin/java
jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

যখন বাইনারিটিকে সেটক্যাপ দিয়ে উন্নততর সুযোগ দেওয়া হয়েছে তখন জাভা 7_u25 চালানো কি সম্ভব?

JDK-6919633: রানটাইম পসিক্স ফাইল সক্ষমতার সমর্থন করে না (একে একে লিনাক্স সক্ষমতা) বলেছেন যে

Note: when using the setcap the libraries needed by the java launcher
should be present in /usr/lib or any other "trusted" location that the
runtime loader (rtld) uses to find shared libraries.

আমি কীভাবে ভাগ করা লাইব্রেরিগুলিকে বিশ্বস্ত করতে পারি?

উত্তর:


14

আপনি প্রশ্ন জিজ্ঞাসা না করা অবধি আমি ইউনিক্সে (ফাইলের ক্ষমতা) এই সুবিধাটি সম্পর্কে কখনও শুনিনি। Ld.so কীভাবে আপনার ভাগ করা লাইব্রেরিগুলিকে বিশ্বাস করতে হয় তার সমাধান রয়েছে বলে মনে হচ্ছে এই লিঙ্কটি আমি পেয়েছি:

পোস্ট থেকে উদ্ধৃতি

যখন কেউ এক্সিকিউটেবল, রানটাইম লোডার (আরটিএলডি) এর সুবিধাগুলি বাড়িয়ে দেয়, তখন ld.so হিসাবে ভাল জানুন so তাই অবিশ্বস্ত পাথগুলিতে লাইব্রেরির সাথে লিঙ্ক করবেন না। এইভাবে ld.so (1) ডিজাইন করা হয়েছে। যদি এইরকম এক্সিকিউটেবল চালনার প্রয়োজন হয়, তবে আপনাকে ld.so এর বিশ্বস্ত পাথগুলিতে সেই পাথটি যুক্ত করতে হবে, কীভাবে এটি করতে হবে তা নীচে বর্ণনা করে:

Fedora 11:
% uname -a
Linux localhost.localdomain 2.6.29.4-167.fc11.i686.PAE #1 SMP Wed May 27 17:28:22 EDT 2009 i686 i686 i386 GNU/Linux

% sudo setcap cap_net_raw+epi ./jdk1.7.0_04/bin/java

% ./jdk1.7.0_04/bin/java -version
./jdk1.7.0_04/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

এর কাপুট, ঠিক আছে আমরা এখন একই পৃষ্ঠায় রয়েছি, এটি ঠিক করতে, libjli.so এর পথ ধরে একটি ফাইল>> এটি তৈরি করুন

% cat /etc/ld.so.conf.d/java.conf
/home/someuser/jdk1.7.0_04/jre/lib/i386/jli

এটি বিশ্বস্ত ব্যবহারকারীর পাথের নামটি যুক্ত করবে, এটি রানডটাইম ক্যাশে তৈরি করতে ld.so ব্যবহার করবে, এটি যাচাই করে ld.so এটি দেখতে পাচ্ছে কিনা তা যাচাই করে নিন, এটি রুট হিসাবে চালানো দরকার, এবং একটি রিবুট প্রয়োজনীয় হতে পারে ।

% ldconfig | grep libjli
libjli.so -> libjli.so
.......

এবার জাভা পরীক্ষা করুন:

% ./jdk1.7.0_04/bin/java -version
java version "1.7.0_04-ea"
Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b18)

এবং সেখানে আপনি এটা আছে.....

তথ্যসূত্র


1
এই পদ্ধতিটি সিস্টেম ব্যাপী পরিবর্তনের মতো বলে মনে হচ্ছে, সেখানে প্রতি ব্যবহারকারী ভিত্তিতে বিশ্বাসকে সীমাবদ্ধ করার উপায় রয়েছে যাতে ব্যবহারকারী foo এবং বার দ্বন্দ্বের মধ্যে না গিয়েই libjli.so এর বিভিন্ন সংস্করণ সহ জাভা এর নিজস্ব বিভিন্ন সংস্করণ রাখতে পারে।
এমএস

1
@ জেমস: আপনি ব্যবহারকারীদের এমন ক্ষমতা অর্জনের জন্য কোনও প্রোগ্রামকে বিশ্বাস করছেন যা তাদের সাধারণত হয় না। এটি গুরুত্বপূর্ণ: আপনি সেই ক্ষমতাটির অপব্যবহার না করার জন্য (বা অন্যকে অপব্যবহার করতে দিতে) প্রোগ্রামের কোডকে বিশ্বাস করছেন। এজন্য আপনাকে সিস্টেম-প্রশস্ত স্তরে এই লাইব্রেরিগুলিতে বিশ্বাস রাখতে হবে।
নিনজালজ

@ams আপনি প্রাইস -ভিত্তিক ভিত্তিতে এটি করতে সক্ষম হতে প্রাইভবাইন্ড ইউটিলিটিটি ব্যবহার করতে পারেন, নির্বাহী ভিত্তিতে নয়।
mighq
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.