অ্যান্ড্রয়েড (v30) সেলিনাক্স নীতি পরীক্ষা করুন


12

আমি সেলিনাক্স ব্যবহার করে আমার ফোনে আসলে নীতিটি প্রয়োগ করা হয় তা সন্ধান করার চেষ্টা করছি। আপনি মনে করেন এটি সহজ হবে। সর্বোপরি, সুরক্ষার জন্য আপনার নীতি প্রত্যাশার সাথে মেলে তা যাচাই করা ভাল। দুর্ভাগ্যক্রমে, আমি এটি করণীয়ভাবে কঠোরভাবে পেয়েছি, কারণ এ) অ্যান্ড্রয়েডের কাছে একটি কাঁটাযুক্ত নীতি সংস্করণ 30 এবং বি ব্যবহার করা আছে বলে মনে হয়) পলিসি সরঞ্জামচঞ্চটিতে খুব নিম্নমানের বিল্ড প্রক্রিয়া আছে (প্রচুর হার্ড-কোডেড পথ ইত্যাদি) seems ।)।

এখানে দুটি জিনিস চেষ্টা করেছি যা কার্যকর হয়নি। আমি যদি অফ-দ্য শেল্ফ সেটুলস সরঞ্জামগুলি ব্যবহার করার চেষ্টা করি (যেমন ফেডোরার জন্য প্যাকেজড আসা, বা আর্ক লিনাক্স সহ এআর থেকে ইনস্টল করা যেতে পারে), তবে আমি নিম্নলিখিতগুলি পেয়েছি ( /sepolicyফোনের রুট ডিরেক্টরি বা কারখানার চিত্র দ্বারা টানা পরে ):

$ sedispol sepolicy 
Reading policy...
libsepol.policydb_read: policydb version 30 does not match my version range 15-29
sedispol:  error(s) encountered while parsing configuration
$ sesearch --all sepolicy 
ERROR: policydb version 30 does not match my version range 15-29
ERROR: Unable to open policy sepolicy.
ERROR: Success
$

ঠিক আছে, যাতে পরামর্শ দেয় যে আমাকে সেলিনাক্স লাইব্রেরির অ্যান্ড্রয়েড সংস্করণ তৈরি করতে হবে। এওএসপি উত্স ট্রিটি কয়েকটি সরঞ্জামের প্রাকম্পম্পিত সংস্করণ সহ আসে তবে এগুলি পুরানো ভাগ করা লাইব্রেরিগুলিতে নির্ভর করে যা আমার নেই (যেমন libpcre3)। যাইহোক, আপনার সুরক্ষা নীতিটি যাচাই করার একমাত্র উপায় হ'ল কিছু বাইনারি শেয়ার করা লাইব্রেরিটি আপনি নেট থেকে নামা trust

তাই এখানে অ্যান্ড্রয়েড সেলিনাক্স লাইব্রেরিগুলি তৈরি করতে আমি যা করেছি তা এখানে। ustr-selinuxখিলানীতে , আমাকে এআর থেকে ইনস্টল করতে হয়েছিল, কারণ ustr inlineএখন যেখানে এটি ব্যবহার করা দরকার সেখানে ব্যবহার করে static inline। ঠিক আছে, এতক্ষণ ভাল। দুর্ভাগ্যক্রমে, বিল্ড প্রক্রিয়াটি সত্যই স্থূল, তবে আমি নিম্নলিখিতটি সংকলন এবং ইনস্টল করার জন্য যথেষ্ট পরিমাণে পেতে সক্ষম হয়েছি:

git clone https://android.googlesource.com/platform/external/selinux \
    android/external/selinux
export ANDROID_BUILD_TOP=$PWD/android
DESTDIR=$HOME/android_selinux
export LD_LIBRARY_PATH="$DESTDIR/lib:$DESTDIR/usr/lib"
cd android/external/selinux
sed -ie '/^LDLIBS.*(LIBDIR)/s/$/ ..\/lex.yy.o/' checkpolicy/test/Makefile
make install DESTDIR="$DESTDIR" \
     PREFIX='$(DESTDIR)/usr' \
     CFLAGS='-I$(PREFIX)/include' \
     -j20 -k
cp checkpolicy/test/dispol "$DESTDIR/usr/sbin/sedispol"
cp checkpolicy/test/dismod "$DESTDIR/usr/sbin/sedismod"

এই মুহুর্তে, sedispolএকটি সাধারণ সেলিনাক্স নীতি কাজ করে (ফেডোরার 29 সংস্করণের মতো policy.29) তবে এখনও অ্যান্ড্রয়েডের সাথে কী চলছে তা আমাকে দেখায় না:

$ ~/android_selinux/usr/sbin/sedispol sepolicy 
Reading policy...
libsepol.avtab_read_item: more than one specifier
libsepol.avtab_read: failed on entry 457 of 5582
/home/user/android_selinux/usr/sbin/dispol:  error(s) encountered while parsing configuration
$ 

আমি setools3অ্যান্ড্রয়েড লাইব্রেরির বিরুদ্ধে ভ্যানিলা সরঞ্জামগুলি সংকলনের চেষ্টাও করেছি । আবার, এত সহজ নয়, তবে আমি এটির সাথে কাজ করতে পেরেছি:

DESTDIR=$HOME/android_selinux
export LD_LIBRARY_PATH="$DESTDIR/lib:$DESTDIR/usr/lib"
git clone https://github.com/TresysTechnology/setools3.git
cd setools3
./configure --prefix=$DESTDIR/usr --with-sepol-devel=$DESTDIR/usr CPPFLAGS="-I$DESTDIR/usr/include -L$DESTDIR/usr/lib"
make -k -j20

এটি সম্পূর্ণরূপে তৈরি করে না, তবে উত্স গাছের যথেষ্ট পরিমাণে তৈরি করে যা আমি কার্যকর করতে পারি secmds/sesearch। একটি ভ্যানিলা উপর কাজ করে এই ধরনের policy.29ফাইল (আমি অনুসন্ধান করতে পারেন -Aএবং -T, কিন্তু --allআমাকে দেয় operation not supported)। তবে, কোনও অ্যান্ড্রয়েড সংস্করণ 30 ফাইল পরীক্ষা করার চেষ্টা করার সময় এটি সম্পূর্ণ একই ধরণের ত্রুটির সাথে ব্যর্থ হয়:

$ ./secmds/sesearch -A sepolicy 
ERROR: more than one specifier
ERROR: failed on entry 457 of 5582
ERROR: Unable to open policy sepolicy.
ERROR: Success
$ 

এই মুহুর্তে আমার মন একধরনের বকবক যা সিস্টেম সুরক্ষা নীতি হিসাবে গুরুত্বপূর্ণ হিসাবে কিছু জটিল সরঞ্জাম প্রায় এটি নির্মাণ করা সত্যিই এই কঠিন। অবশ্যই আমি কিছু ভুল করছি। বাহ্যিকভাবে বিতরণ করা বাইনারি ভাগ করা লাইব্রেরিগুলিতে নির্ভর না করে কেউ কি আসলেই অ্যান্ড্রয়েড সুরক্ষা নীতি পরীক্ষা করতে পেরেছে?

আমার যুক্ত করা উচিত যে আমি সমস্ত প্রাক বিল্ট সরঞ্জাম ( ndk/build/tools/download-toolchain-sources.shএবং ndk/build/tools/rebuild-all-prebuilt.sh) পুনর্নির্মাণের জন্য প্রস্তাবিত কৌশলগুলিও চেষ্টা করেছিলাম । তবে download-toolchain-sources.shস্ক্রিপ্টটি বর্তমানে ভেঙে গেছে। এটি পুরাতন সংস্করণ ডিরেক্টরিগুলি যা পুনরায় সংগ্রহস্থলগুলিতে নেই তা যাচাই করার চেষ্টা করে এবং prebuilts/pythonসেলিনাক্স সম্পর্কিত কোড থাকা সত্ত্বেও এটি সেলিনাক্স সম্পর্কিত কোনও সরঞ্জাম ডাউনলোড করতে দেখা যায় না । আবার, আমি এই বিল্ড সিস্টেমগুলি কীভাবে ক্রুফাই করে আছি তা নিয়ে আমি হতবাক হয়েছি এবং মনে করি এর থেকে সহজতর কোনও উপায় থাকতে হবে। প্রশ্নটি কীভাবে আমি এমন সরঞ্জামগুলি পেতে পারি যা আমাকে আমার অ্যান্ড্রয়েড সেলিনাক্স নীতি পরীক্ষা করতে দেয়?

উত্তর:


8

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

যেমনটি আপনি বলেছেন, দুটি নিজস্ব কারণ আপনার নিজের সেলইনক্স টুলসেটটি সংকলন করা দরকার:

  • সিস্টেম সরবরাহিত সরঞ্জামসেটটি সাধারণত একটি পিছনে সংস্করণ থাকে। অ্যান্ড্রয়েডের সেলইনাক্স নীতি ডিবি সংস্করণ 30 এর উপর নির্ভর করে, বর্তমান লিনাক্স বাক্সগুলি সাধারণত 29 সংস্করণ পর্যন্ত পরিচালনা করে।
  • এমনকি এটি সাম্প্রতিক হলেও এটি সাহায্য করবে না, বাস্তবে আপস্ট্র্যাম কোড থেকে সেলইনাক্স তৈরি করা (যা সহজলভ্য, কমপক্ষে ফেডোরা মেশিনে প্রবাহের সুপারিশ অনুসরণ করে) কার্যকরভাবে সিস্টেমকে নীতি ডিবি সংস্করণ 30 পরিচালনা করতে সক্ষম করে, তবে অ্যান্ড্রয়েডের সেলিনাক্স হয়েছে হেভিলি সংশোধিত ( গুগল ডকুমেন্টেশন কয়েকটি পরিবর্তন হাইলাইট করে) তাই সিনট্যাক্স এবং পার্সিং ত্রুটির কারণে অ্যান্ড্রয়েডের সেলইনাক্স হ্যান্ডেল করার চেষ্টা ব্যর্থ হয়।

সুতরাং, অ্যান্ড্রয়েডের সেলিনাক্স বিশ্লেষণ অনুসন্ধান চালিয়ে যেতে, আমাদের হাতকে ময়লাতে হবে ... সবচেয়ে পরিষ্কার পদ্ধতিতে:

  • প্রথমে আমরা একটি বুদ্ধিমান পরিবেশ স্থাপন করব,
  • এটি শেষ হয়ে গেলে আমরা অ্যান্ড্রয়েডের সেলইনাক্স লাইব্রেরি এবং প্রথম সরঞ্জামগুলি সংকলন করব,
  • তার উপরে আমরা সেলইনক্স সরঞ্জামগুলি তৈরি করব,
  • আমরা কয়েকটি পরিপূরক ইউটিলিটি যুক্ত করে শেষ করব।

একটি উপযুক্ত পরিবেশ সেটআপ করুন

পরিবেশগত বৈশিষ্ট্য

সবচেয়ে পরিষ্কার প্রস্তাবিত, সম্ভবত সম্ভবত নির্ভরযোগ্যভাবে কাজ করার উপায়টি হল আপনার অ্যান্ড্রয়েড কাজের জন্য একটি পরিবেশ উত্সর্গ করা:

  • ভার্চুয়াল মেশিন পুরোপুরি ভাল (যদি সেরা বিকল্প না হয়)। কোনও ভিএমওয়্যার ব্যবহার করতে পছন্দ করুন যেহেতু আপনাকে আপনার ফোনটি অতিথি সিস্টেমে ইউএসবির মাধ্যমে সংযুক্ত করতে হবে। বিনামূল্যে বিকল্প কিমু এ জাতীয় কাজটি খুব ভালভাবে পরিচালনা করবে বলে মনে হয় না। আমি অন্যান্য ভার্চুয়ালাইজেশন সফ্টওয়্যার দিয়ে চেষ্টা করি নি।

  • এটি একটি 64 বিট সিস্টেমের প্রয়োজন হবে, অন্যথায় কোডটি সঠিকভাবে পূর্ণ আকারের কারণে সংকলন করবে না।

  • এটা তোলে হয় জোরালোভাবে সুপারিশ করা, সম্ভবত বাধ্যতামূলক, একটি উবুন্টু সিস্টেম ব্যবহার করতে। আপনি যদি XFCE এর হালকা ডেস্কটপ পরিবেশ পছন্দ করেন তবে পরিবর্তে Xubuntu ব্যবহার করতে দ্বিধা বোধ করুন, এটি সিস্টেমের মূল এবং উপলভ্য প্যাকেজটির কোনও পরিবর্তন করে না এবং আপনার অ্যান্ড্রয়েড সম্পর্কিত কাজগুলিতে কোনও প্রভাব ফেলবে না (এই পদ্ধতিতে উবুন্টু সম্পর্কে আমি যা কিছু বলি তাও জুবুন্টুর ক্ষেত্রে প্রযোজ্য)। অ্যান্ড্রয়েডের সেলইনাক্স উত্স ট্রিতে আপনি ফেডোরার পরিবর্তে প্রস্তাবিত কিছু রিডএম ফাইলগুলি খুঁজে পেতে পারেন, এই ফাইলগুলি উজানের এনএসএ'র সেলইনাক্স প্রকল্প থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং তাদের সামগ্রীগুলি গুগলের অ্যান্ড্রয়েডের সাথে মেলে না।

  • আনবুন্টু ব্যবহারের সঠিক সংস্করণটি আপনি যে Android তৈরি করতে চান তার উপর নির্ভর করে। অ্যান্ড্রয়েড 6.0 এর জন্য উবুন্টু 14.04 (বিশ্বাসযোগ্য) বাঞ্ছনীয়। আরও তথ্যের জন্য গুগল প্রয়োজনীয়তা পৃষ্ঠা পরীক্ষা করুন।

  • আপনার প্রচুর ডিস্ক স্পেসের প্রয়োজন হবে (আপনি যদি কেবল সেলইনাক্স সম্পর্কিত তদন্তের পরিকল্পনা করেন তবে কমপক্ষে 50 গিগাবাইট, অ্যান্ড্রয়েডের সম্পূর্ণ বিল্ডিংয়ের পরিকল্পনা করলে কমপক্ষে 100 গিগাবাইট)। সিপিইউ এবং মেমরিটি কম প্রাসঙ্গিক, তারা কেবলমাত্র একটি সম্পূর্ণ বিল্ডিংয়ের জন্য সময়কে প্রভাবিত করে এবং সেলইনাক্স সম্পর্কিত কাজের জন্য কোনও সত্যিকারের প্রভাব ফেলবে না।

উবুন্টু ব্যবহারের দুটি প্রধান সুবিধা রয়েছে:

  • প্রস্তাবিত সিস্টেমটি ব্যবহার করে, আপনি একটি সুপরিচিত এবং পরীক্ষিত পরিবেশে কাজ করছেন: সিস্টেম লাইব্রেরি, সরঞ্জাম এবং প্যাকেজগুলি প্রকল্পের দ্বারা প্রত্যাশিত সংস্করণ এবং অবস্থান রয়েছে।

  • এবং আরও সুনির্দিষ্টভাবে আমাদের বর্তমান ক্ষেত্রে: উবুন্টু নিজেই অ্যাপআর্মার উপর নির্ভর করে যা একটি সেলিনাক্স বিকল্প, এটি সেলইনাক্স ব্যবহার করে না। সুসংবাদটি হ'ল আপনি সিস্টেমের নির্ভরযোগ্যতা পরিবর্তনের ঝুঁকি না নিয়েই Android এর সেলিনাক্স সরঞ্জাম এবং বাইনারি সিস্টেম-ওয়াইড ইনস্টল করতে সক্ষম হবেন।

পরিবেশ ইনস্টলেশন পদ্ধতি

আপনি একটি পূর্ণাঙ্গ লাইভ-ডিভিডি থেকে শুরু করে উবুন্টু theতিহ্যগত উপায়ে ইনস্টল করতে পারেন তবে দ্রুত বিকল্প হ'ল নেটবूट ইনস্টল (টেক্সটমোড ইনস্টল) ব্যবহার করা এবং শেষে আপনি যে ডেস্কটপ পরিবেশটি পছন্দ করেন তা নির্বাচন করুন। এটি করার ফলে প্রথমে অপ্রচলিত ইনস্টল না করে সরাসরি আপ-টু-ডেট প্যাকেজ সংস্করণ ইনস্টল করার পরে প্রথম বুটটিতে 389 টি মুলতুবি থাকা আপডেটগুলি প্রয়োগ করতে বলার মাধ্যমে প্রাথমিক আপডেটের সময় সাশ্রয় হবে।

উবুন্টু / জুবুন্টু 14.04 (একই আইএসও) নেটবুট ইনস্টলারটির জন্য আইএসও এখানে উপলব্ধ

ভিএমওয়্যারের সমস্যাজনক "সহজ ইনস্টল" বৈশিষ্ট্যটি এড়ানোর জন্য, "আমি পরে অপারেটিং সিস্টেমটি ইনস্টল করব" বিকল্পটি নির্বাচন করে শুরু করা ভাল অভ্যাস ।

লিনাক্স নির্বাচন করতে ভুলবেন না , তবে উবুন্টু 64 বিট গেস্ট ওএস হিসাবে বেছে নিন ।

ভিএম এর নিম্নলিখিত রিসোর্সগুলির প্রয়োজন হবে:

  • বাধ্যতামূলক: ডিস্কের স্থানটি অবশ্যই খুব কমপক্ষে 40 গিগাবাইটে থাকতে হবে (ডিফল্ট 20 গিগাবাইট যথেষ্ট হবে না , উত্স কোডটি এককভাবে তার চেয়ে বেশি স্থান নেয়), উচ্চতর প্রস্তাবিত recommended একটি পূর্ণ বিল্ডের জন্য 100 গিগাবাইট ডিস্কের ন্যূনতম প্রয়োজন, এটি হ'ল আমি সাধারণত গ্রহণ করি। ভুলে যাবেন না যে এই সেটিংটি কেবলমাত্র সর্বাধিক সীমা: ভিএম দ্বারা নেওয়া প্রকৃত আকার অতিথির অনুরোধের সাথে গতিশীলভাবে বৃদ্ধি পায়।
  • সুসংগঠিত: 1024 থেকে কমপক্ষে 2048 বা উচ্চতর র‌্যাম বাড়ান (আপনার হোস্টের ক্ষমতার উপর নির্ভর করে আমি 4096 ব্যবহার করি),
  • সুন্দরী: প্রসেসরের কোরগুলির সংখ্যা 1 থেকে 2 বা তার বেশি (আপনার হোস্টের ক্ষমতার উপর নির্ভর করে, আমি 3 ব্যবহার করি)।
  • সিডি-রম অবশ্যই ইনস্টলেশন আইএসও ফাইলের দিকে নির্দেশ করবে।
  • আপনি ডিভাইসটি সংযোগ করার সময় পূর্বের সতর্কতা দিতে পারে কারণ আপনি ডিফল্ট 1.1 থেকে 2.0 তে ইউএসবি স্যুইচ করতে চাইতে পারেন। আপনার ব্যবহারের উপর নির্ভর করে আপনি নিরাপদে "নতুন ইউএসবি ডিভাইসগুলি স্বয়ংক্রিয়ভাবে সংযুক্ত করুন " এবং "ভার্চুয়াল মেশিনের সাথে ব্লুটুথ ডিভাইসগুলি ভাগ করে নিতে" অন্বেষণ করতে পারেন
  • আপনার পরিবেশের উপর নির্ভর করে, আপনাকে ডিসপ্লে সেটিংস (ত্রিমাত্রিক অক্ষম করুন, একটি পর্দার আকার প্রয়োগ করুন) টুইঙ্ক করতেও পারে।

মনোযোগ:

  • আপনি যদি নেটবूट ইনস্টলটি বেছে নিয়ে থাকেন তবে সফ্টওয়্যার নির্বাচন স্ক্রিনে পৌঁছানোর সময় আপনার ডেস্কটপ পরিবেশ ( উবুন্টু ডেস্কটপ বা জুবুন্টু ডেস্কটপ ) নির্বাচন করতে ভুলবেন না বা আপনি কেবলমাত্র একটি ন্যূনতম পাঠ্য পরিবেশের সাথে শেষ করবেন!
  • প্রথম বুট করার পরে, সর্বশেষ প্রকাশে আপগ্রেড করতে অস্বীকার করুন : পুরো পয়েন্টটি এখানে 14.04 এ থাকবে!

প্রথম বুট করার পরে, আপনি প্রথমে যেটি করতে চান তা হ'ল লিনাক্স অতিথি সরঞ্জাম ইনস্টল করুন:

sudo apt-get install open-vm-tools

এই প্যাকেটটি বুট-টাইম ট্রিগারগুলি রাখে, অতএব কোনও অতিথি পুনরায় চালু হওয়ার পরে এর ইনস্টলেশনটি সম্পূর্ণ হবে।

অ্যান্ড্রয়েড উত্স কোড আনুন

অনুরূপ হিসাবে, পদ্ধতির বিশদটি নির্বাচিত রমের উপর নির্ভর করে:

এটি লক্ষণীয় যে সায়ানোজমড এর উত্স ট্রিতে একটি সরঞ্জাম আপনাকে boot.imgফাইলগুলি আনপ্যাক করার অনুমতি দেয় bu এটি অন্যভাবে বলতে, সায়ানোজেনমড আপনাকে একটি সরঞ্জাম সরবরাহ করে যা আপনাকে sepolicyডিভাইস এবং রম সংরক্ষণাগারগুলিতে সঞ্চিত ফাইল অ্যাক্সেস করার অনুমতি দেবে । গুগলের এওএসপি এ জাতীয় সরঞ্জাম সরবরাহ করে না, সুতরাং সায়ানোজেনমডের উত্স গাছ ব্যবহার করা আপনার যদি অন্য কোনও আবশ্যক নাও হতে পারে তবে অন্যথায় আপনাকে এটি অ্যাপার্ট ইনস্টল করতে হবে (যা দ্রুত এবং সহজ কাজ, সুতরাং এখানে কোনও উদ্বেগ নয়)।

এখানে আমি সায়ানোজেনমড ১৩.০ (অ্যান্ড্রয়েড .0.০) পদ্ধতি অনুসরণ করছি। ব্যবহৃত আদেশগুলি সম্পর্কে ব্যাখ্যা উপরের লিঙ্ক করা পৃষ্ঠাগুলিতে উপলভ্য। দয়া করে সেগুলি পড়ুন, নীচের টাইপস্ক্রিপ্টটি কেবলমাত্র রেফারেন্সের উদ্দেশ্যে দেওয়া হয়েছে।

টিপ: আমিapt-getসর্বনিম্ন সাধারণ ডিনোমিনেটরটির সাথেaptitudeলেগেথাকতে এবং সবাইকে সুখী রাখতে এই পোস্টে ব্যবহারকরার সময়আপনি তারপরিবর্তেব্যবহার করতে পছন্দ করতে পারেনকারণ এটি নির্ভরতার আরও ভালভাবে যত্ন নেবে (কোনও প্যাকেজ অপসারণ করার সময় যা কিছু নির্ভরশীলতার ইনস্টলেশন প্রয়োজন required , আপনার সিস্টেম পরিষ্কার রেখে এই নির্ভরতাগুলিও মুছে ফেলা হবে)। আমি যতদূর জানিaptitudeকমান্ড উবুন্টু ইনস্টল করতে হবে কিন্তু Xubuntu ডিফল্টরূপে পাওয়া যায়।

sudo apt-get install bison build-essential curl flex git gnupg gperf \
libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 \
libxml2-utils lzop maven openjdk-7-jdk pngcrush schedtool squashfs-tools \
xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev \
lib32readline-gplv2-dev lib32z1-dev
mkdir -p ~/bin
mkdir -p ~/android/system
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod u+x ~/bin/repo
cd ~/android/system/
git config --global user.name "Your Name"
git config --global user.email "you@example.com
repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0
repo sync
# Coffee time: around 20GB are being downloaded, this may take several hours.
source ./build/envsetup.sh
breakfast

এখন আপনার কাছে একটি পরিষ্কার এবং প্রায় সম্পূর্ণ উত্স গাছ রয়েছে। মালিকানা ব্লবগুলি অনুপস্থিত, তবে সেলইনাক্স সম্পর্কিত কাজের জন্য আপনার সেগুলির দরকার নেই।

টিপ: উত্সগুলি আনা একটি ক্লান্তিকর প্রক্রিয়া, এখন আপনার ভিএম এর স্ন্যাপশট বা ব্যাকআপ করা ভাল।

Android এর SELinux সরঞ্জামসেট এবং লাইব্রেরিগুলি সংকলন এবং ইনস্টল করুন

এখন ভ্রমণের মজার অংশ শুরু;)!

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

গুগলের সংস্করণগুলির মধ্যে গুগল অ্যান্ড্রয়েডের উত্স কোডে গভীর পরিবর্তনগুলি প্রয়োগ করতে দ্বিধা করবেন না, অতএব সঠিক সংকলন পদক্ষেপগুলি অবশ্যই সংস্করণ নির্ভর করবে (উদাহরণস্বরূপ এওএসপি মাস্টার দেখায় যে sepolicy/ডিরেক্টরিটি সরানো হবে ))

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

ধাপে ধাপে পদ্ধতি

অ্যান্ড্রয়েডের সেলইনাক্স গ্রন্থাগারগুলি বিমূর্ত স্তর সরবরাহ করে যা উপরের স্তর সফ্টওয়্যারকে অ্যান্ড্রয়েড-নির্দিষ্ট এসইএলিনাক্স নীতি ফাইলগুলির সাথে ডিল করার অনুমতি দেয়। অতএব আমাদের প্রথমে তাদের সংকলন এবং ইনস্টল করতে হবে (যা নিজেই এখানে সমস্যাগুলি যদি মূলত উপস্থাপন করে তবে আপনি নিজের পথ খুঁজে না পাওয়া পর্যন্ত)।

এরপরে আমরা সেলইনাক্স সরঞ্জামগুলি তৈরি এবং ইনস্টল করতে সক্ষম হব। আমরা দেখতে পাব, ভাগ্যক্রমে এগুলি অ্যান্ড্রয়েড নির্দিষ্ট হওয়ার দরকার নেই, তাদের কেবল এসইএলিনাক্স লাইব্রেরি সংস্করণটি মেলাতে হবে।

এই পদ্ধতিটি সায়ানোজেনমড এবং এওএসপি উত্স কোড ট্রি ব্যবহার করে উভয়ই পরীক্ষা করা হয়েছে।

Android SELinux গ্রন্থাগার এবং প্রথম সরঞ্জামগুলি সংকলন এবং ইনস্টল করুন

প্রথমে নির্ভরতা ইনস্টল করুন:

sudo apt-get install libapol-dev libaudit-dev libdbus-glib-1-dev libgtk2.0-dev \
libustr-dev python-dev python-networkx swig xmlto

এই পোস্টে ভেরিয়েবল $ANDROID_BUILD_TOPআপনার উত্সের অবস্থান (ডিরেক্টরিটি যেখানে আপনি repo syncআদেশটি দিয়েছেন) সংরক্ষণ করে। আপনার পছন্দ মত নাম পরিবর্তন করতে নির্দ্বিধায়।

ANDROID_BUILD_TOP=~/android/system
cd $ANDROID_BUILD_TOP
source ./build/envsetup.sh

restorecondমেকফিল কিছু লাইব্রেরি সনাক্ত করতে অক্ষম হওয়ার কারণে ডিফল্টরূপে নীতি কোর ব্যবহারের সংকলন ব্যর্থ হয় unable pkg-configহার্ডকোডযুক্ত পরিবর্তে গতিশীলভাবে উত্পন্ন পাথগুলি ব্যবহার করার জন্য আপনাকে এই মেকফিলটি সম্পাদনা করতে হবে (একক উদ্ধৃতি দিয়ে ব্যাকটিক্স গুলিয়ে ফেলবেন না!):

sed -i 's/^CFLAGS ?= -g -Werror -Wall -W$/& `pkg-config --cflags --libs dbus-1 gtk+-2.0`/' \
$ANDROID_BUILD_TOP/external/selinux/policycoreutils/restorecond/Makefile

পরিবর্তনটি সঠিকভাবে বিবেচনায় নেওয়া হয়েছে তা নিশ্চিত করার জন্য কিছু পাঠ্য সম্পাদক দিয়ে মেকফিলটি নির্দ্বিধায় খুলুন।

এবং এখন সংকলন এবং ইনস্টল করুন:

cd $ANDROID_BUILD_TOP/external/bzip2/
make -f Makefile-libbz2_so
sudo make install
cd $ANDROID_BUILD_TOP/external/libcap-ng/libcap-ng-0.7/
./configure
make
sudo make install
cd $ANDROID_BUILD_TOP/external/selinux/
make -C ./libsepol/
sudo make -C /libsepol/ install
EMFLAGS=-fPIC make -C ./libselinux/
sudo make -C ./libselinux/ install
make -C ./libsemanage/
sudo make -C ./libsemanage/ install
make
sudo make install
make swigify
sudo make install-pywrap
sudo cp ./checkpolicy/test/{dispol,dismod} /usr/bin/

মনোযোগ:EMFLAGS=-fPIC নির্মাণের সময় পরিবেশের পরিবর্তনশীল সেটিংটিমিস করবেন নাlibselinux। এটি এখনও কোনও ত্রুটি উত্পন্ন করবে না, তবে পরবর্তী পদক্ষেপে আপনি SETools তৈরি করতে অক্ষম হবেন। আপনি যদি এটি মিস করেন বা অন্য কোনও ভুল করেন তবে কেবল একটি জারি করুনmake cleanএবং আপনার সংকলন পুনরায় চালু করুন।

সেলইনাক্স সরঞ্জামগুলি সংকলন এবং ইনস্টল করুন

সেলইনক্স সরঞ্জামগুলি একটি পূর্বনির্মাণ আকারে সরবরাহ করা হয় যার মধ্যে রয়েছে:

  • পাইথন স্ক্রিপ্টস (এবং তাদের শেল স্ক্রিপ্ট মোড়ক) $ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/ডিরেক্টরিতে
  • পাইথন প্যাকেজগুলি ( *.oসংকলিত ফাইল সহ ) নীচে $ANDROID_BUILD_TOP/prebuilts/python/linux-x86/2.7.5/lib/python2.7/site-packages/

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

সরঞ্জামগুলি সেগুলি পাইথন স্ক্রিপ্টস, এটি SETools 4 থেকে একটি নতুন বিবর্তন (SETools 3 তে, কমান্ডগুলির মতো sesearchবাইনারি এক্সিকিউটেবল কোড সিডে ছিল)। তবে, সরঞ্জামগুলি এখনও তাদের 3.3.8 সংস্করণ দেখায়:

$ $ANDROID_BUILD_TOP/external/selinux/prebuilts/bin/sesearch --version
3.3.8

সুতরাং আমার অনুমান যে গুগল SETools 4 থেকে কিছু প্রাথমিক বিকাশ স্ন্যাপশট নিয়েছে 4.০.০.০ পর্যন্ত বিটা এসইটুলগুলি libsepolভার্সন ২.৪ এর উপর নির্ভর করেছিল, ৪.০.০ প্রকাশের সাথে সাথে তারা গ্রন্থাগারের ২.২ সংস্করণে নির্ভর করতে শুরু করেছে যা সংস্করণের সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয় সেলইনাক্স অ্যান্ড্রয়েড .0.০ এ বান্ডিল হয়েছে (আপনি এটি সংকলনের চেষ্টা করতে পারেন, এটি কেবল ব্যর্থ হবে)।

সুতরাং বুদ্ধিমান পছন্দটি SETools 4.0.0 বিটাতে চলেছে বলে মনে হচ্ছে।

পরিপূরক নির্ভরতা ইনস্টল করুন:

sudo apt-get install python-setuptools

উত্স কোডটি ডাউনলোড করুন এবং নিষ্কাশন করুন:

cd ~/android/
wget https://github.com/TresysTechnology/setools/archive/4.0.0-beta.tar.gz
tar xzf 4.0.0-beta.tar.gz
cd ./setools-4.0.0-beta/

ফ্লেক্স 2.5 কে প্রভাবিত করার কারণে একটি বাগের কারণে আমাদের -Wredundant-declsসংকলকের পতাকাগুলি থেকে সরানো দরকার :

sed -i '/-Wredundant-decls/d' ./setup.py

এবং শেষ পর্যন্ত সংকলন এবং ইনস্টল করুন:

python ./setup.py build
sudo python ./setup.py install

জেনেরিক পদ্ধতি (বা "কীভাবে নিজেকে আনস্টক করবেন")

উপরের পদ্ধতিটি আপনার ক্ষেত্রে কার্যকর না হলে, কীভাবে অগ্রগতির চেষ্টা করবেন সে সম্পর্কে এখানে একটি উচ্চ পর্যায়ের দৃষ্টিভঙ্গি দেওয়া আছে।

দুর্ভাগ্যক্রমে এখানে চারপাশে কোনও যাদু নেই (এবং কোনও সাহায্যকারী নয় :(): এই কোডটি সংকলিত করার একমাত্র উপায় হ'ল ধ্রুপদী অথচ ভয়ঙ্কর চক্রটি "চেষ্টা করুন এবং দেখুন" পদ্ধতির।

প্রথমবার সংকলনের চেষ্টা করুন, কিছু *.hফাইল পাওয়া না যাওয়ার কারণে এটি সম্ভবত ব্যর্থ হবে :

  1. অ্যান্ড্রয়েডের external/ডিরেক্টরিতে অনুসন্ধান করুন :

    find $ANDROID_BUILD_TOP/external -name filename.h
    

    যদি আপনি অনুরোধকৃত ফাইলটি খুঁজে পান তবে এর অর্থ হ'ল অ্যানড্রয়েড উত্স কোডের সাথে সম্পর্কিত লাইব্রেরি বা সরঞ্জামটির একটি নির্দিষ্ট সংস্করণ বান্ডিল করা হয়েছে। সুতরাং আপনাকে উবুন্টুর প্যাকেজ সিস্টেম থেকে এটি ইনস্টল করার চেষ্টা করা উচিত নয়, পরিবর্তে অ্যান্ড্রয়েড উত্স কোডে বান্ডিলিত সংস্করণটি সংকলন এবং ইনস্টল করা উচিত।

    সচেতন হন যে এটি ফোরামগুলিতে পাওয়া সাধারণ পরামর্শের বিপরীতে: "এই লাইব্রেরিটি হারিয়ে যাওয়ার কারণে আপনার সংকলন ব্যর্থ হয়েছে? এই প্যাকেজটি ইনস্টল করুন তবে তা ঠিক হয়ে যাবে!" এটি করার মাধ্যমে আপনি সম্ভবত আরও খারাপ সমস্যার মধ্যে চলে যাবেন: যদি একটি নির্দিষ্ট সংস্করণ বান্ডিল করা হয় তবে এটি সম্ভবত সম্ভবত একটি নির্দিষ্ট সংস্করণ প্রয়োজন (সামঞ্জস্যতার কারণে বা এই সংস্করণে গুগলের নির্দিষ্ট পরিবর্তন রয়েছে)।

    বিটিডাব্লু, আপনি যদি ভাবছেন: অবশ্যই এই লাইব্রেরি বা সরঞ্জামটিতে কিছু *.hফাইল পাওয়া না যাওয়ার কারণে ত্রুটি বাড়ানোর ক্ষেত্রে নির্ভরতাও থাকতে পারে , এবং হ্যাঁ আপনার এই একই চক্রটি "চেষ্টা করে দেখুন" পদ্ধতির প্রয়োগ করা উচিত।

  2. সিস্টেমভিত্তিতে অনুসন্ধান করুন:

    find / -name filename.h 2>/dev/null
    

    যদি আপনি কিছু প্রমিত শেয়ার্ড লাইব্রেরি স্থানে আপনার সিস্টেমে ইতিমধ্যে উপস্থিত ফাইলটিকে "অনুপস্থিত" দেখতে পান তবে এর অর্থ হ'ল এই নির্ভরতা সম্ভবত আপনার পরিবেশে ইতিমধ্যে মিলিত হয়েছে তবে ত্রুটি উত্থাপনকারী মেকফিল এটি খুঁজে পাওয়া খুব মূক।

    আপনি যদি ম্যানুয়ালি সরাসরি এই মেকফিলটিকে কল করেন তবে আপনার পক্ষে কিছু পরিবেশের পরিবর্তনশীল এটি ঠিক করা ( LIBDIR=/usr/lib makeউদাহরণস্বরূপ) সেট করা সম্ভব হতে পারে , অন্যথায় আপনাকে নিজেই মেকফিলটি সংশোধন pkg-configকরতে হবে ( কমান্ডটি স্বয়ংক্রিয়ভাবে নিখোঁজ বিল্ড প্যারামিটার তৈরি করতে অমূল্য সহায়তা হতে পারে) ।

  3. প্যাকেজিং সিস্টেমে অনুসন্ধান করুন:

    apt-cache search filename-dev
    

    যেখানে অনুচ্ছেদে প্রতিস্থাপিত প্রতিস্থাপনের filename-devসাথে ছোট হাতের অক্ষরে থাকা ফাইলটির নাম প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, যদি এটি পাওয়া না যায় তবে অনুসন্ধান করুন )। সঠিক প্যাকেজটি সন্ধানের জন্য সঠিক নামে কিছু টুইট করার প্রয়োজন হতে পারে।.h-devPython.hpython-dev

  4. আপনি যদি আটকে থাকেন এবং ইন্টারনেটে দ্রুত অনুসন্ধান সন্ধানের কোনও সুস্পষ্ট উত্তর সরবরাহ না করে, তবে apt-fileআপনার সেরা বন্ধু হবে। apt-fileডিফল্টরূপে ইনস্টল করা হয়নি, আপনাকে এটি ইনস্টল করতে হবে এবং এটির ডাটাবেস তৈরি করতে হবে:

    sudo apt-get apt-file
    sudo apt-file update
    

    apt-fileআপনাকে একটি নির্দিষ্ট ফাইল সরবরাহকারী প্যাকেজগুলি (এমনকি আনইনস্টল হওয়াগুলি) অনুসন্ধান করার অনুমতি দেয়। অত্যধিক ফলাফল এড়াতে, আমি grepনীচের সাথে এটি যুক্ত করার পরামর্শ দিচ্ছি :

    apt-file search filename.h | grep -w filename.h
    

    উবুন্টুর সংগ্রহস্থলে যদি এই ফাইলটি সরবরাহ করে এমন কোনও প্যাকেজ থাকে, তবে apt-fileএটি সন্ধান করা উচিত।

    একবার আপনি সঠিক প্যাকেজটি সন্ধান করার পরে এটি আপনার প্যাকেজের নাম apt-get install packagenameকোথায় তা ব্যবহার করে ইনস্টল করুন packagename

টিপ: আপনি আপনার সিস্টেমে কিছু মাতাল পারেন, কমান্ড পুনরায় ইনস্টল করার একটি প্যাকেজ এই এক হল:apt-get reinstall pkg_name। এটি নির্ভর করবে এমনকি ক্লাসিকাল অপসারণ ও ইনস্টল করা নির্ভরতা ভাঙার কারণে সম্ভব হবে না (এটি সিস্টেমের গ্রন্থাগারের ক্ষেত্রে সম্ভবত)।

পরিপূরক সরঞ্জাম

এই পদক্ষেপে, আপনার এখন একটি পরিষ্কার পরিবেশ থাকা উচিত যা আপনাকে সংকলিত এবং উত্স ফর্ম্যাট উভয়ই অ্যান্ড্রয়েডের সেলিনাক্স নিয়মগুলি তদন্ত করতে দেয়।

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

আপনার পরিবেশ সম্পূর্ণ হওয়ার আগে আপনি এখনও দুটি জিনিস মিস করেন:

  • ডিভাইসের বুট চিত্রটি অ্যাক্সেস এবং সংশোধন করার একটি উপায়,
  • এর sepolicyফাইলটি পরিবর্তন করার একটি উপায় ।

ভাগ্যক্রমে, এগুলি অবশ্যই এই পোস্টের শেষ দুটি বিভাগের বিষয়! :)

ডিভাইসের বুট চিত্রটি আনুন এবং আপডেট করুন

ডিভাইসের বুট ইমেজ আনতে এবং আপডেট করার সরঞ্জামগুলি সেলইনাক্স বিধি বিধানের বিরুদ্ধে ছড়িয়ে দেওয়া ছাড়াও বিভিন্ন ধরণের জিনিসগুলির জন্য ব্যবহার করা যেতে পারে। তাই আমি একটি উত্সর্গীকৃত উত্তর তৈরি করেছি , দয়া করে এটি উল্লেখ করুন।

ডিভাইসের SELinux বিধিগুলি সংশোধন করুন

আপনার এখানে দুটি প্রধান সম্ভাবনা রয়েছে:

  • sepolicyআপনার উত্স ট্রিতে নিয়মাবলী থেকে একটি নতুন ফাইল তৈরি করুন (তাদের সন্ধান করার জন্য .teফাইলগুলি অনুসন্ধান করুন find $ANDROID_BUILD_TOP -name \*.te:, সেগুলি বেশ কয়েকটি ডিরেক্টরিতে ছড়িয়ে পড়েছে)।
  • sepolicyডিভাইস দ্বারা বর্তমানে ব্যবহৃত ফাইলটি পরিবর্তন করুন ।

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

একটি সরঞ্জাম তৈরি করার জন্য একটি প্রকল্প তৈরি করা হয়েছে যাতে আপনি কোনও sepolicyফাইলকে পুনরায় সংশোধনযোগ্য ফর্মের মধ্যে ছড়িয়ে দিতে পারবেন, এর মধ্যে অবাধে নিয়মগুলি সম্পাদন করতে পারবেন allowing তবে এই প্রকল্পটি প্রুফ-অফ-কনসেপ্ট অবস্থায় ছেড়ে দেওয়া হয়েছে। আপনি এই ব্লগ পোস্টের শেষে সমস্ত তথ্য পাবেন , বাকী নিবন্ধে আগ্রহী অন্য কাউকে গ্রহণ করার অনুমতি দেওয়ার জন্য পর্যাপ্ত বিবরণ রয়েছে।

sepolicyনিয়ম পরিবর্তনের জন্য বর্তমানে প্রস্তাবিত উপায়টি অন্য পথে চলেছে: sepolicyবাইনারি ফাইলটি সরাসরি সংশোধন করে । সিপোলিসি-ইনজেকশন সরঞ্জামটি কেবল এটির অনুমতি দেয় এবং সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়।

সম্পূর্ণতার জন্য, নোট করুন যে এই সরঞ্জামটির একটি কাঁটাচামচ বিদ্যমান। এটি কয়েকটি বৈশিষ্ট্য যুক্ত করেছে, তাদের মধ্যে কয়েকটি মূল লেখকের করণীয় তালিকায় রয়েছে (কোনও নিয়ম সরানোর সম্ভাবনার মতো), আমাকে অবদানের পরিবর্তে কাঁটাচামচ কেন বেছে নিয়েছে তা জিজ্ঞাসা করবেন না ...

সংকলন এবং ইনস্টল করতে sepolicy-inject, কেবল নিম্নলিখিত হিসাবে এগিয়ে যান:

cd ~/android/
git clone https://bitbucket.org/joshua_brindle/sepolicy-inject.git
cd ./sepolicy-inject/
LIBDIR=/usr/lib make
sudo cp ./sepolicy-inject /usr/bin/

ব্যবহারের ক্ষেত্রে উদাহরণ

উদাহরণস্বরূপ বলা যাক আপনি নিম্নলিখিত ত্রুটি বার্তার সাথে মিলে অটোরিজেশন যুক্ত করতে চান:

avc: denied { read } for pid=128 comm="file-storage"
path="/data/media/0/path/to/some/file"
dev="mmcblk0p28" ino=811035 scontext=u:r:kernel:s0
tcontext=u:object_r:media_rw_data_file:s0 tclass=file permissive=0

আপনাকে ডিভাইসের বুট চিত্রটি আনতে হবে, তারপরে এটির sepolicyফাইলে অ্যাক্সেস পাওয়ার জন্য আনপ্যাক করুন।

ব্যবহার করে একটি দ্রুত চেক sesearchদেখায় যে প্রকৃতপক্ষে কোনও অনুমতি নিয়ম নেই (এখনও!):

$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
$

কমান্ডটির কোনও আউটপুট নেই।

তারপরে, প্রয়োজনীয় নিয়মাবলী যুক্ত করতে নীচের কমান্ডটি ব্যবহার করুন ( sesearchএবং sepolicy-injectপ্যারামিটারগুলির মধ্যে মিলটি নোট করুন ):

sepolicy-inject -s kernel -t media_rw_data_file -c file -p read -P ./sepolicy

এখন আমরা আমাদের sesearchআদেশটি ফিরে বলতে পারি :

$ sesearch -A -s kernel -t media_rw_data_file -c file -p read ./sepolicy
allow kernel media_rw_data_file:file read;
$

sesearch আউটপুট দেখায় যে নীতিটি সঠিকভাবে আপডেট হয়েছে।

আপনি এখন ডিভাইসের boot.imgফাইলটি পুনরায় চেক করতে এবং ডিভাইসে এটি ফ্ল্যাশ করতে পারেন। /sepolicyআপনার ডিভাইসটি সদ্য আপডেট হওয়া sepolicyফাইলটি চালাচ্ছে কিনা তা নিশ্চিত করার একটি সহজ উপায় ফাইলটির সর্বশেষ পরিবর্তনের সময় পরীক্ষা করা ।

উপসংহার

আপনার এখন একটি সম্পূর্ণ পরিবেশ থাকা উচিত যা আপনাকে অ্যান্ড্রয়েড ডিভাইসগুলি সেলইনাক্স নীতিগুলি নির্দ্বিধায় পরিদর্শন ও সংশোধন করার অনুমতি দেয়। উপভোগ করুন! :)

পার্শ্ব নোট হিসাবে, ডিভাইস থেকে সরাসরি সেলইনক্স নীতিটি বিশ্লেষণ ও সংশোধন করার অনুমতিপ্রাপ্ত সরঞ্জাম রয়েছে ।


1
কেবল একটি নোট - আপনার প্রচুর পরিমাণে কফি পান না করে কখনই "রেপো সিঙ্ক" করবেন না;) পরিবর্তে "রেপো সিঙ্ক-কিউফ --ফোর্স-সিঙ্ক-সি" ব্যবহার করুন - এটি আপনাকে প্রচুর সময় এবং হার্ড ড্রাইভের স্থান সাশ্রয় করবে । -কিউ শান্ত, -ফ এবং --ফোর্স-সিঙ্ক আপনাকে অস্থায়ী নেটওয়ার্ক ত্রুটির ক্ষেত্রে এগিয়ে যেতে সহায়তা করবে, -সি কেবলমাত্র বর্তমান শাখাটি আনবে। PS যখন আমি কোনও স্থানীয় পরিবর্তনগুলি পুরোপুরি মুছতে এবং ম্যানিফেস্ট সংস্করণে স্যুইচ করতে হয় তখন আমি বিকাশের সময় "-d --প্রিন" পতাকা ব্যবহার করি।
ওলেকসান্ডার

@ অলেকসান্ডার: আপনার তথ্যের জন্য ধন্যবাদ, এটি জানার জন্য দরকারী। আমি -cপতাকাটি দিয়ে পরীক্ষা করেছি , তবে কোনও বড় পার্থক্য লক্ষ্য করিনি: কম্পিউটারের জন্য এখনও ডাউনলোড করার জন্য যতটা ডেটা (25 গিগাবাইট), এখনও পান করার মতো আমার জন্য ক্যাফিন;)। আমি -fপতাকাটি সম্পর্কে কিছুটা সতর্ক থাকি , আমার বোঝার repoঅনুসারে এটি উত্স কোডের কিছু অংশ ডাউনলোড করতে ব্যর্থ হয়ে চূড়ান্ত ফলাফলটিকে সাফল্য হিসাবে বিবেচনা করার পরে তা এড়াতে বাধ্য করবে । আমি "সাফল্য" রাষ্ট্রটিকে সম্পূর্ণ আনার পক্ষে সংরক্ষণ করতে পছন্দ করি এবং নিজেকে এমন একটি অজানা পরিস্থিতিতে আবিষ্কার করা এড়ানো যায় যেখানে ফাইলগুলি এলোমেলোভাবে অনুপস্থিত থাকতে পারে।
হোয়াইটউইন্টার ওল্ফ

2

আপনার প্রথমে এওএসপি কোড (6.0 সংস্করণের অনুরূপ একটি) থেকে লিবসেপলের একটি পুরানো সংস্করণ তৈরি করা উচিত, তারপরে সেপোলিসি-ইনজেকশন, ডিসপল ইত্যাদি লিঙ্ক করুন। এই রেসিপিটি আমার জন্য ডেবিয়ান জেসিতে কাজ করেছিল:

cd /to/the/aosp/dir 
[repo init, etc]
repo sync external/selinux
cd external/selinux
git checkout android-6.0.0_r1^
cd libsepol
make
libsepol=`pwd`
cd /to/the/selinux-inject-source-dir
make LIBDIR=$libsepol

সিস্টেমের লিবসেপলের বিপরীতে লিখিত সিপোলিসি-ইনজেকশনটির বিপরীতে, এই অ্যান্ড্রয়েড এসডিকে অন্তর্ভুক্ত 6.0 চিত্রের / সিপোলিসির সাথে সূক্ষ্মভাবে কাজ করে:

$ sepolicy-inject -Z shell -P /tmp/sepolicy -o /tmp/sepolicy 
libsepol.policydb_read: policydb version 30 does not match my version range 15-29
error(s) encountered while parsing configuration
Could not load policy
$ ./sepolicy-inject -Z shell -P /tmp/sepolicy -o /tmp/sepolicy 
libsepol.policydb_index_others: security:  1 users, 2 roles, 525 types, 0 bools
libsepol.policydb_index_others: security: 1 sens, 1024 cats
libsepol.policydb_index_others: security:  87 classes, 4767 rules, 0 cond rules

সেলিনাক্স বিতরণে অন্তর্ভুক্ত সরঞ্জামগুলির জন্য, কৌশলটি একই ডিএসটিডিআইআর দিয়ে তাদের তৈরি করা:

cd libsepol
make DESTDIR=/some/dir install
cd ../checkpolicy
make DESTDIR=/some/dir
# here you have a working 'dispol' in the 'test' subdir

ধন্যবাদ। এটি আমাকে সেডিসপোলের একটি সংস্করণ দিয়েছিল যা কাজ করে বলে মনে হচ্ছে, তবে আমি এখনও অনুসন্ধান সন্ধান করতে পারি না। অন্তর্ভুক্ত ফাইলটি অনুসন্ধান করার জন্য সিসার্ক মারা যায় <apol/policy.h>(অন্য কোনও policy.hফাইলের মধ্যে থেকে )। আপনি কি জানেন যে কোন মডিউল রয়েছে apol?
ব্যবহারকারী3188445

@ user3188445: ফাইলটি apol/policy.hপ্যাকেজটি সরবরাহ করেছে libapol-dev(কমপক্ষে এটি উবুন্টু সিস্টেমে এটির একটি)। আরও বিস্তারিত তথ্যের জন্য দয়া করে আমার উত্তর দেখুন।
হোয়াইটউইন্টার ওল্ফ

1

যাদের সাথে সমস্যাটির মুখোমুখি লোকেরা:

policydb version 30 does not match my version range 15-29

এওএসপি কোড নিয়ে কাজ করার সময়।

ধরে নিচ্ছি, আপনার এওএসপি কোডটি চেক আউট করা হয়েছে ~ / অ্যান্ড্রয়েড / উত্স দির:

cd ~/android/source
source build/envsetup.sh
export ANDROID_BUILD_TOP=$(pwd)

এবং এখন আপনি বান্ডিল অডিট 2 নিবন্ধ ব্যবহার করতে পারেন :

./external/selinux/prebuilts/bin/audit2allow

পিএস এছাড়াও, আমি মন্তব্যটি পরীক্ষা করতে চাই অ্যান্ড্রয়েড (ভি 30) সেলিনাক্স নীতি

অন্তর্ভুক্ত ফাইলটি অনুসন্ধান করার জন্য সিসার্ক মারা যান (অন্য কোনও পলিসি। H ফাইলের মধ্যে থেকে)। আপনি কি জানেন যে কোন মডিউলটিতে অ্যাপল রয়েছে?

Https://github.com/SELinuxProject/selinux উত্স থেকে সেলিনাক্স টুলকিট তৈরি করা খুব তুচ্ছ নয় (যদি আপনি ফেডোরা ব্যবহার না করেন)। উবুন্টুতে, আপনাকে ইনস্টল করতে হবে (ধরে নিলেন আপনি ইতিমধ্যে বেসন এবং সি সংকলক যেমন বেসিক দেব সরঞ্জাম ইনস্টল করেছেন) libglib2.0-dev, libcap-ng-dev, xmlto, libsemanage1-dev, libustr-dev, libudit-dev, libsepol1 -dev

তবে শেষ পর্যন্ত আমি এখনও https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/793155 এর কারণে এটি সংকলন করতে ব্যর্থ হয়েছি এবং কীভাবে সমাধান করা যায় তার কোনও ধারণা নেই


1
glibconfig.hআপনি নিজের পোস্টের শেষে যে সংযোগটি দিচ্ছেন তারও আমি মুখোমুখি হয়েছি , এটি restorecondমেকফিল দ্বারা উত্থাপিত হয়েছিল কারণ এতে ভুল পথগুলি কঠোরভাবে কোডড ছিল। এটি ব্যবহার করে পাথগুলি গতিশীলরূপে সমাধান করতে আপনাকে এটিকে পরিবর্তন করতে হবে pkg-config। আরও তথ্যের জন্য আমার উত্তর দেখুন।
হোয়াইটওয়ানটারওয়াল্ফ

1

আপনার এই প্যাচটি লাইবসপোলের উত্সগুলিতে প্রয়োগ করার চেষ্টা করা উচিত এবং তারপরে ইনক্রিমেন্টালি সমস্ত জিনিস পুনর্নির্মাণ করুন। এটি সাম ইস্যুতে আমার পক্ষে কাজ করেছিল

আপনি এই রেপো থেকে অ্যাপ্লিকেশন প্যাচ সহ লাইবসেপল ক্লোনটি ব্যবহার করার চেষ্টা করতে পারেন https: //metizik@bitbucket.org/metizik/selinux_tools.git আমি এটি উইন্ডোজের অধীনে ডিসপল তৈরি করতে ব্যবহার করি এবং এটি আমার পক্ষে কাজ করে (এখনও লক্ষ্য করুন যে আমি আছি এর জন্য সাইগউইন ব্যবহার করে)


0

অডিট 2 নীল, নিরীক্ষা 2 এবং কেন অনুসন্ধানগুলি সমস্তই অ্যাওএসপি আপস্ট্রিম নীতিটি v.30 এ ভাঙ্গা হয়েছে।

নীতির ডিবি আপডেট করতে আপনাকে নীচের প্যাচগুলি প্রয়োগ করতে হবে এবং আপনার Android ট্রিটি পুনর্নির্মাণ করতে হবে। এই প্যাচগুলি ইতিমধ্যে মাস্টার শাখায় একীভূত হয়েছে এবং অ্যান্ড্রয়েড এন থেকে শুরু হয়েছে available

https://android-review.googlesource.com/187140 https://android-review.googlesource.com/187111

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