Android (v30) selinux नीति की जांच करें


13

मैं खोजने की कोशिश कर रहा हूं कि वास्तव में मेरे फोन द्वारा सेलाइनक्स का उपयोग करके कौन सी नीति लागू की गई है। आपको लगता है कि यह आसान होगा। आखिरकार, सुरक्षा के लिए यह सत्यापित करना अच्छा है कि आपकी नीति अपेक्षाओं से मेल खाती है। दुर्भाग्य से, मैंने ऐसा करने के लिए बहुत मुश्किल से पाया है, क्योंकि ए) एंड्रॉइड एक कांटेक्ट पॉलिसी संस्करण 30 का उपयोग करने के लिए लगता है, और बी) पॉलिसी टूलचिन में बहुत कम-गुणवत्ता वाली बिल्ड प्रक्रिया (बहुत सारे हार्ड-कोडेड पथ, आदि) हैं। ।)।

यहाँ दो चीजें हैं जो मैंने कोशिश की हैं जो काम नहीं की हैं। अगर मैं ऑफ-द-सेल्फ सेटूलस टूल्स (जैसे फेडोरा के लिए पैक किया हुआ आया, या आर्क लिनेक्स के साथ AUR से स्थापित किया जा सकता है) का उपयोग करने की कोशिश करता हूं, तो मुझे निम्नलिखित मिलता है ( /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
$

ठीक है, इसलिए यह बताता है कि मुझे सेलिनक्स लाइब्रेरीज़ के एंड्रॉइड वर्जन का निर्माण करना है। AOSP स्रोत का पेड़ कुछ उपकरणों के पूर्व-निर्मित संस्करणों के साथ आता है, लेकिन ये पुराने साझा पुस्तकालयों पर निर्भर करते हैं जो मेरे पास नहीं हैं (जैसे libpcre3)। वैसे भी, यह बहुत चौंकाने वाला है अगर आपकी सुरक्षा नीति की जांच करने का एकमात्र तरीका कुछ बाइनरी साझा लाइब्रेरी पर भरोसा करना है जो आप नेट से दूर हैं।

तो यहाँ मैंने android selinux पुस्तकालयों के निर्माण के लिए क्या किया। मेहराब पर, मुझे ustr-selinuxAUR से इंस्टॉल करना पड़ा , क्योंकि 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एक साधारण सेलाइनक्स नीति (जैसे policy.29फेडोरा से एक संस्करण 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

सबसे पहले, मुझे यह स्वीकार करना चाहिए कि मैं आपके "मैं इस चौंकाने वाला कठिन" कथन से पूरी तरह सहमत हूं । Google ने एंड्रॉइड को मुख्य रूप से उपभोक्ता दृष्टिकोण से डिज़ाइन किया है, न कि बिजली उपयोगकर्ताओं के लिए। नतीजा यह है कि, जैसे ही आप नवीनतम फेसबुक ऐप का उपयोग करने या कैंडी क्रश के साथ खेलने के बाहर कुछ करना चाहते हैं, आप बहुत जल्दी अपने आप को 2000 के शुरुआती लिनक्स के दायरे में वापस पा लेंगे, जब एक डेवलपर की तरह ज्ञान को बदलना आवश्यक था सरल सेटिंग्स क्या होनी चाहिए। मेरा मानना ​​है कि स्थिति तेजी से विकसित होगी क्योंकि एंड्रॉइड सिस्टम अधिक परिपक्व हो जाता है, लेकिन अभी के लिए हमें जो करना है, उसके साथ हमें करना होगा ...

जैसा कि आपने कहा, अपने स्वयं के SELinux टूलसेट को संकलित करने के दो कारण हैं:

  • सिस्टम प्रदान करने वाला टूलसेट आमतौर पर एक संस्करण है। जबकि एंड्रॉइड का SELinux नीति DB संस्करण 30 पर निर्भर करता है, वर्तमान लिनक्स बॉक्स आमतौर पर केवल 29 तक का संस्करण संभालते हैं।
  • यहां तक ​​कि अगर यह अधिक हाल ही में होगा तो यह मदद नहीं करेगा, वास्तव में अपस्ट्रीम कोड से SELinux का निर्माण करना (जो कि आसान है, कम से कम फेडोरा मशीनों पर अपस्ट्रीम सिफारिशों का पालन करना) प्रभावी रूप से सिस्टम को नीति DB संस्करण 30 को संभालने की अनुमति देता है, हालांकि Android का SELinux है हैवीली संशोधित ( Google प्रलेखन कुछ संशोधनों पर प्रकाश डालता है) इसलिए सिंटैक्स और पार्सिंग त्रुटियों के कारण Android के SELinux को संभालने की कोशिश की जा रही है।

तो, Android के SELinux विश्लेषण खोज पर रखने के लिए, हमें अपने हाथों को गंदगी में डालना होगा ... सबसे साफ तरीके से संभव तरीके से:

  • सबसे पहले हम एक समझदार वातावरण सेटअप करेंगे,
  • यह हो जाने के बाद हम Android के SELinux लाइब्रेरी और पहले टूल्स को संकलित करेंगे,
  • उनके ऊपर हम SELinux टूल्स बनाएंगे,
  • हम कुछ पूरक उपयोगिताओं को जोड़कर पूरा करेंगे।

समुचित वातावरण सेट करें

पर्यावरण के गुण

सबसे स्वच्छ तरीके से अनुशंसित, संभवतः केवल मज़बूती से काम करने का तरीका अपने Android कार्य के लिए एक वातावरण समर्पित करना है:

  • एक आभासी मशीन पूरी तरह से ठीक है (यदि सबसे अच्छा विकल्प नहीं है)। VMware का उपयोग करना पसंद करें क्योंकि आपको अपने फोन को गेस्ट सिस्टम में USB के माध्यम से जोड़ना होगा। नि: शुल्क वैकल्पिक Qemu इस तरह के काम को बहुत अच्छी तरह से संभाल नहीं करता है। मैंने अन्य virualization सॉफ़्टवेयर के साथ प्रयास नहीं किया।

  • इसे 64 बिट सिस्टम की आवश्यकता होगी, अन्यथा पूर्णांक गलत आकार के होने के कारण कोड संकलित नहीं करेगा।

  • यह उबंटू प्रणाली का उपयोग करने के लिए, संभवतः अनिवार्य रूप से अनुशंसित है। यदि आप XFCE के लाइटर डेस्कटॉप वातावरण को पसंद करते हैं, तो इसके बजाय Xubuntu का उपयोग करने के लिए स्वतंत्र महसूस करें, यह सिस्टम के कोर और उपलब्ध पैकेज को नहीं बदलता है और आपके एंड्रॉइड संबंधित कार्य पर कोई प्रभाव नहीं पड़ेगा (जो भी मैं इस प्रक्रिया में उबंटू के बारे में कहता हूं, वह Xubuntu पर भी लागू होता है)। आपको एंड्रॉइड के SELinux सोर्स ट्री में कुछ रीडमी फ़ाइलें मिल सकती हैं, जो Fedora के उपयोग की अनुशंसा करती हैं, ये फाइलें NSA के SELinux प्रोजेक्ट से विरासत में मिली हैं और उनकी सामग्री Google के Android से मेल नहीं खाती है।

  • उपयोग करने के लिए अनबंटू का सटीक संस्करण उस Android के संस्करण पर निर्भर करता है जिसे आप बनाना चाहते हैं। Android 6.0 के लिए, Ubuntu 14.04 (भरोसेमंद) की सिफारिश की जाती है। चेक गूगल आवश्यकताओं पेज अधिक जानकारी के लिए।

  • आपको बहुत सारे डिस्क स्थान की आवश्यकता होगी (यदि आप केवल SELinux-related जांच की योजना बनाते हैं, तो कम से कम 100GB अगर आप Android के पूर्ण निर्माण के लिए योजना बनाते हैं)। सीपीयू और मेमोरी कम प्रासंगिक हैं, वे केवल एक पूर्ण निर्माण के लिए समय को प्रभावित करते हैं और SELinux संबंधित कार्यों के लिए कोई वास्तविक प्रभाव नहीं होगा।

Ubuntu का उपयोग करने के दो मुख्य लाभ हैं:

  • अनुशंसित प्रणाली का उपयोग करके, आप एक प्रसिद्ध और अच्छी तरह से परीक्षण किए गए वातावरण में काम कर रहे हैं: सिस्टम लाइब्रेरी, टूल और पैकेज प्रोजेक्ट द्वारा अपेक्षित संस्करण और स्थान पर हैं।

  • और विशेष रूप से हमारे वर्तमान मामले में: उबंटू खुद AppArmor पर निर्भर करता है जो एक SELinux विकल्प है, यह SELCux का उपयोग नहीं करता है। अच्छी खबर यह है कि इसलिए आप सिस्टम की विश्वसनीयता को बदलने के लिए एंड्रॉइड के SELinux टूल और बायनेरिज़ सिस्टम को बिना जोखिम के इंस्टॉल कर पाएंगे।

पर्यावरण स्थापना की प्रक्रिया

आप एक पूर्ण-लाइव लाइव-डीवीडी से शुरू करके उबंटू को पारंपरिक तरीके से स्थापित कर सकते हैं, लेकिन एक तेज विकल्प एक नेटबूट इंस्टॉल (टेक्स्टमोड इंस्टॉल) का उपयोग करना और उस डेस्कटॉप वातावरण का चयन करना है जिसे आप अंत में पसंद करते हैं। ऐसा करने से आप पहले अप्रचलित लोगों को स्थापित करने के बजाय अप-टू-डेट पैकेज संस्करण स्थापित करके प्रारंभिक अद्यतन समय को बचाएंगे, फिर पहले बूट पर 389 लंबित अपडेट लागू करने के लिए कहेंगे।

Ubuntu / Xubuntu 14.04 (एक ही आईएसओ) नेटबूट इंस्टॉलर के लिए आईएसओ यहां उपलब्ध है

VMware की परेशानी "आसान इंस्टॉल" सुविधा को छोड़ने के लिए, "मैं बाद में ऑपरेटिंग सिस्टम स्थापित करूंगा" विकल्प का चयन करके शुरू करना एक अच्छी आदत है ।

लिनक्स का चयन करना सुनिश्चित करें , फिर अतिथि ओएस के रूप में उबंटू 64 बिट्स

VM को निम्नलिखित स्रोतों की आवश्यकता होगी:

  • अनिवार्य: डिस्क स्थान बहुत कम से कम 40 जीबी होना चाहिए (डिफ़ॉल्ट 20 जीबी पर्याप्त नहीं होगा, स्रोत कोड अकेले उस से अधिक स्थान लेता है), उच्च अनुशंसित है। एक पूर्ण बिल्ड के लिए न्यूनतम 100 जीबी डिस्क की आवश्यकता होती है, यह वह मूल्य है जो मैं आमतौर पर लेता हूं। यह मत भूलो कि यह सेटिंग केवल एक अधिकतम सीमा है: VM द्वारा लिया गया वास्तविक आकार मेहमान के अनुरोधों के साथ गतिशील रूप से बढ़ता है।
  • परिणामी: RAM को 1024 से बढ़ाकर कम से कम 2048 या उससे अधिक (अपनी होस्ट क्षमता पर निर्भर करता है, मैं 4096 का उपयोग करता हूं),
  • परिणामिक: प्रोसेसर कोर की संख्या को 1 से बढ़ाकर 2 या उससे अधिक करना (आपकी मेजबान क्षमता पर निर्भर करता है, मैं 3 का उपयोग करता हूं)।
  • सीडी-रोम को इंस्टॉलेशन आईएसओ फाइल की ओर इशारा करना चाहिए।
  • आप USB को डिफ़ॉल्ट 1.1 से 2.0 पर स्विच करना चाह सकते हैं क्योंकि जब आप अपना डिवाइस कनेक्ट करते हैं तो पूर्व चेतावनी दे सकता है। अपने उपयोग के आधार पर, आप "स्वचालित रूप से नए USB उपकरणों को कनेक्ट करें " और "ब्लूटूथ डिवाइस को वर्चुअल मशीन से साझा करें " को सुरक्षित रूप से अनचेक कर सकते हैं ।
  • अपने वातावरण के आधार पर, आपको डिस्प्ले सेटिंग्स को भी बदलना पड़ सकता है (3D अक्षम करें, स्क्रीन आकार लागू करें)।

ध्यान:

  • यदि आपने नेटबूट इंस्टॉल चुना है, तो सॉफ़्टवेयर चयन स्क्रीन तक पहुंचने पर अपने डेस्कटॉप वातावरण ( उबंटू डेस्कटॉप या ज़ुबांटो डेस्कटॉप ) का चयन करना न भूलें , या आप एक न्यूनतम पाठ-केवल वातावरण के साथ समाप्त हो जाएंगे!
  • पहले बूट पर, नवीनतम रिलीज़ के लिए अपग्रेड करने से इंकार करें: यहाँ पर संपूर्ण बिंदु 14.04 में रहना है!

पहले बूट पर, सबसे पहले आप जो करना चाहते हैं, वह है लिनक्स गेस्ट टूल्स इंस्टॉल करना:

sudo apt-get install open-vm-tools

यह पैकेट बूट-टाइम ट्रिगर्स डालता है, इसलिए इसकी स्थापना अतिथि पुनरारंभ के बाद ही पूरी होगी।

Android स्रोत कोड लाएं

इसी तरह, प्रक्रिया विवरण चुने हुए ROM पर निर्भर करता है:

यह ध्यान देने योग्य हो सकता है कि CyanogeMod अपने स्रोत के पेड़ में बंडल करता है जो आपको boot.imgफ़ाइलों को अनपैक करने की अनुमति देता है । इसे अलग तरीके से कहने के लिए, CyanogenMod आपको एक उपकरण प्रदान करता है जो आपको sepolicyउपकरणों और रोम अभिलेखागार में संग्रहीत फ़ाइल तक पहुंचने की अनुमति देगा । Google का AOSP ऐसे उपकरण प्रदान नहीं करता है, इसलिए यदि आपके पास CyanogenMod के स्रोत वृक्ष का उपयोग करने की कोई अन्य अनिवार्यता नहीं है, तो यह सबसे सुविधाजनक विकल्प हो सकता है, अन्यथा आपको इसे ऐपार्ट (जो त्वरित और आसान है, स्थापित करना होगा), इसलिए यहाँ कोई चिंता नहीं है)।

यहाँ मैं CyanogenMod 13.0 (Android 6.0) प्रक्रिया का पालन कर रहा हूँ। उपयोग किए गए आदेशों पर स्पष्टीकरण ऊपर दिए गए पृष्ठों पर उपलब्ध है। कृपया उन्हें पढ़ें, नीचे दिए गए प्रकार केवल संदर्भ उद्देश्यों के लिए दिए गए हैं।

युक्ति: जब मैंapt-getइस पोस्ट में सबसे कम आम भाजक से चिपके रहने और हर किसी को खुश रखने के लिए उपयोग करता हूं, तो आपaptitudeइसके बजायउपयोग करना पसंद कर सकते हैंक्योंकि यह निर्भरता का बेहतर तरीके से ध्यान रखेगा (पैकेज को हटाते समय जिसे कुछ निर्भरता की स्थापना की आवश्यकता होती है , ये निर्भरताएं भी दूर हो जाएँगी, जिससे आपका सिस्टम साफ हो जाएगा)। AFAIKaptitudeआदेश को Ubuntu में स्थापित किया जाना चाहिए, लेकिन 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

अब आपके पास एक साफ और लगभग पूर्ण स्रोत का पेड़ है। मालिकाना बूँदें गायब हैं, लेकिन आपको SELinux संबंधित कार्यों के लिए इनकी आवश्यकता नहीं है।

युक्ति: स्रोतों को प्राप्त करना एक थकाऊ प्रक्रिया है, अब आपके वीएम का स्नैपशॉट या बैकअप करने के लिए लायक हो सकता है।

संकलन और Android के SELinux टूलसेट और लाइब्रेरी स्थापित करें

अब यात्रा का मज़ेदार हिस्सा शुरू होता है;)

अब तक यह प्रक्रिया बहुत सीधी होनी चाहिए थी। लक्ष्य मुख्य रूप से यह सुनिश्चित करना था कि आपके पास मेरे जैसा ही वातावरण हो। यदि आप करते हैं, तो अगली कड़ी भी सीधी रहनी चाहिए।

हुड के तहत Google संस्करणों के बीच एंड्रॉइड के स्रोत कोड में गहरे बदलाव लागू करने में संकोच नहीं करता है, इसलिए सटीक संकलन चरण निश्चित रूप से संस्करण पर निर्भर करेगा (उदाहरण के लिए AOSP मास्टर दिखाता है कि sepolicy/निर्देशिका स्थानांतरित हो जाएगी )।

Android के SElinux लाइब्रेरी और टूलसेट को संकलित करने और स्थापित करने के लिए मैं पहले अपनी सटीक प्रक्रिया साझा करूंगा, लेकिन समय के साथ इस पोस्ट की प्रासंगिकता बनाए रखने के लिए मैं सबसे अधिक संकलन के मुद्दों को हल करने के लिए सामान्य दृष्टिकोण का पालन करने के लिए कुछ नोट्स जोड़ूंगा।

चरण-दर-चरण प्रक्रिया

एंड्रॉइड की SELinux लाइब्रेरीज़ एब्सट्रैक्शन लेयर प्रदान करती हैं जो ऊपरी-लेयर सॉफ़्टवेयर को Android- विशिष्ट SELinux पॉलिसी फ़ाइलों से निपटने की अनुमति देगा। इसलिए हमें उन्हें पहले संकलित करने और स्थापित करने की आवश्यकता होगी (जो, अपने आप में, वास्तव में मूल का प्रतिनिधित्व करता है यदि यहाँ कठिनाइयाँ हैं, जब तक कि आपको अपना रास्ता नहीं मिल जाता है)।

हम तब SELinux टूल्स का निर्माण और स्थापित करने में सक्षम होंगे। जैसा कि हम देखेंगे, सौभाग्य से इन्हें एंड्रॉइड विशिष्ट होने की आवश्यकता नहीं है, उन्हें केवल SELinux लाइब्रेरी संस्करण से मेल खाना चाहिए।

इस प्रक्रिया का परीक्षण CyanogenMod और AOSP स्रोत कोड पेड़ों दोनों का उपयोग करके किया गया है।

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कुछ पुस्तकालयों का पता लगाने में असमर्थ होने के कारण विफल हो जाता है। आपको 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और अपने संकलन को पुनरारंभ करें।

संकलन और SELinux उपकरण स्थापित करें

SELinux टूल प्रीबिल्ट फॉर्म में दिए गए हैं जिनमें शामिल हैं:

  • $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, लेकिन यह नहीं है। वास्तव में, मुझे ऐसी कोई जगह नहीं मिली जहां Google ने SETools का सटीक संस्करण साझा किया हो, जिसका उन्होंने उपयोग किया (FYI GPL केवल कोड को साझा करने के लिए अगर इसे संशोधित किया गया है), तो हमें अनुमान लगाना होगा और प्रयास करना होगा और जितना हम कर सकते हैं उतना ही बेहतर होगा ।

उपकरण स्वयं पायथन स्क्रिप्ट हैं, यह SETools 4 से एक नया विकास (SETools 3 में, कमांड जैसे sesearchबाइनरी निष्पादन योग्य कोडेड थे)। हालाँकि, उपकरण अभी भी 3.3.8 का संस्करण दिखाते हैं:

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

इसलिए मेरा अनुमान है कि Google ने SETools 4. से कुछ शुरुआती विकास स्नैपशॉट लिए। 4.0.0 बीटा SETools libsepol, 2.4 वर्जन पर निर्भर थे , 4.0.0 रिलीज के साथ उन्होंने लाइब्रेरी के 2.5 संस्करण पर भरोसा करना शुरू कर दिया, जो कि संस्करण के साथ संगत नहीं है एंड्रॉइड 6.0 में SELinux बंडल है (आप इसे संकलित करने का प्रयास कर सकते हैं, यह बस विफल हो जाएगा)।

तो समझदार विकल्प 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. Android की external/निर्देशिका में खोजें :

    find $ANDROID_BUILD_TOP/external -name filename.h
    

    यदि आपको अनुरोधित फ़ाइल मिल जाती है, तो इसका मतलब है कि एंड्रॉइड सोर्स कोड के भीतर संबंधित लाइब्रेरी या टूल का एक विशिष्ट संस्करण बंडल किया गया है। इसलिए आपको इसे उबंटू के पैकेज सिस्टम से इंस्टॉल करने का प्रयास नहीं करना चाहिए, बल्कि एंड्रॉइड सोर्स कोड में बंडल किए गए संस्करण को संकलित और स्थापित करना चाहिए।

    ध्यान रखें कि यह सामान्य सलाह के खिलाफ जाता है जो आपको मंचों पर मिल सकता है: "इस लाइब्रेरी के गुम हो जाने के कारण आपका संकलन विफल हो जाता है; इस पैकेज को स्थापित करें तो यह ठीक रहेगा!" , ऐसा करने से आप शायद सबसे खराब मुद्दे पर चले जाएंगे: यदि कोई विशिष्ट संस्करण बंडल किया गया है, तो यह संभवतः सबसे अधिक है क्योंकि एक विशिष्ट संस्करण की आवश्यकता है (संगतता समस्याओं के कारण या क्योंकि इस संस्करण में Google से विशिष्ट परिवर्तन हैं)।

    BTW, अगर आप सोच रहे हैं: निश्चित रूप से इस लाइब्रेरी या टूल में कुछ *.hफ़ाइल नहीं मिलने के कारण निर्भरताएं हो सकती हैं , और हाँ आपको यह बहुत ही चक्रीय "कोशिश-और-देख" दृष्टिकोण लागू करना चाहिए।

  2. खोज प्रणालीबद्ध:

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

    यदि आप फ़ाइल को कुछ मानक साझा लाइब्रेरी स्थान में आपके सिस्टम में पहले से मौजूद होने के लिए "गायब" पाते हैं, तो इसका मतलब है कि यह निर्भरता संभवतः आपके वातावरण में पहले से ही मिल गई है, लेकिन मेकफाइल जिसने त्रुटि को उठाया है वह इसे खोजने के लिए बहुत गूंगा है।

    यदि आप मैन्युअल रूप से सीधे इस Makefile को कॉल करते हैं, तो आपके लिए यह संभव हो सकता है कि इसे ( LIBDIR=/usr/lib makeउदाहरण के लिए) फिक्स करने वाले कुछ वातावरण चर को सेट करें , अन्यथा आपको Makefile को संशोधित करने की आवश्यकता हो सकती है ( 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:। यह तब भी काम करेगा, जब ब्रेकिंग निर्भरता (जो सिस्टम के पुस्तकालयों के लिए सबसे अधिक संभावना है) के कारण एक शास्त्रीय हटाने और स्थापित करना संभव नहीं होगा।

पूरक उपकरण

इस चरण में, अब आपके पास एक स्वच्छ वातावरण होना चाहिए जिससे आप संकलित और स्रोत स्वरूपों दोनों में Android के SELinux नियमों की जांच कर सकें।

हालांकि, अधिकांश संभावना यह है कि आपकी जांच के अंत में आप कुछ कार्रवाई करना चाहेंगे। अपने वर्तमान आकार में, आपका वातावरण आपको डिवाइस की sepolicyफ़ाइल को संशोधित करने की अनुमति नहीं देगा । वास्तव में, इस फ़ाइल को आसानी से प्रतिस्थापित नहीं किया जा सकता है: यह डिवाइस रूट निर्देशिका का हिस्सा है, और रूट निर्देशिका की सामग्री रैम डिस्क फ़ाइल से बूट समय पर निकालने वाली है, जो बदले में डिवाइस की बूट छवि में संग्रहीत होती है।

तो आपके पर्यावरण के पूर्ण होने से पहले ही आपको दो चीजें याद आती हैं:

  • डिवाइस की बूट छवि को एक्सेस और संशोधित करने का एक तरीका,
  • अपनी sepolicyफ़ाइल को संशोधित करने का एक तरीका ।

सौभाग्य से, ये इस पोस्ट के अंतिम दो वर्गों के विषय हैं! :)

डिवाइस की बूट छवि प्राप्त करें और अपडेट करें

उपकरणों की बूट छवि को लाने और अद्यतन करने के लिए उपकरणों का उपयोग विभिन्न प्रकार की चीजों के अलावा SELinux नियमों से छेड़छाड़ के लिए किया जा सकता है। मैंने इसलिए एक समर्पित उत्तर तैयार किया है , कृपया इसे देखें।

डिवाइस के SELinux नियमों को संशोधित करें

आपके पास यहां दो मुख्य संभावनाएं हैं:

  • sepolicyअपने स्रोत ट्री में नियमों से एक नई फ़ाइल बनाएँ ( .teउन्हें खोजने के लिए फ़ाइलों की खोज करें:, find $ANDROID_BUILD_TOP -name \*.teवे कई निर्देशिकाओं में फैले हुए हैं)।
  • sepolicyवर्तमान में डिवाइस द्वारा उपयोग की गई फ़ाइल को संशोधित करें ।

जब तक आपको वास्तव में खरोंच से अपने नियमों का निर्माण करने की आवश्यकता नहीं होती है, जो कि विकास से संबंधित कार्य अधिक है और इसलिए यहां-से-बाहर की गुंजाइश है, दूसरी पसंद अब तक सबसे सुरक्षित लगती है क्योंकि आप सुनिश्चित हैं कि एकमात्र बदलाव आपका होगा आसानी से बनाया गया।

वहाँ एक उपकरण बनाने के लिए एक परियोजना है जो आपको एक sepolicyफ़ाइल को पुन: प्रयोज्य रूप में विघटित करने की अनुमति देता है, बीच में नियमों को स्वतंत्र रूप से संपादित करने की अनुमति देता है। हालांकि इस परियोजना को प्रूफ-ऑफ-कॉन्सेप्ट राज्य में छोड़ दिया गया है। आपको इस ब्लॉग पोस्ट के अंत में सभी जानकारी मिल जाएगी , बाकी लेख में पर्याप्त विवरण हैं जो किसी और को रुचि लेने की अनुमति देता है।

sepolicyनियमों को बदलने के लिए वर्तमान में अनुशंसित तरीका एक और मार्ग है: सीधे 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फ़ाइल चला रहा है ।

निष्कर्ष

अब आपके पास एक पूर्ण वातावरण होना चाहिए जिससे आप एंड्रॉइड डिवाइस SELinux नीतियों का स्वतंत्र रूप से निरीक्षण और संशोधन कर सकें। का आनंद लें! :)

साइड नोट के रूप में, डिवाइस से सीधे SELinux नीति का विश्लेषण और संशोधन करने की अनुमति देने वाले उपकरण भी हैं ।


1
सिर्फ एक नोट - "रेपो सिंक" कभी न करें जब तक आपके पास पीने के लिए बहुत सारी कॉफी न हो;) इसके बजाय "रेपो सिंक -q -f --फोर्स-सिंक -सी" का उपयोग करें - यह आपको बहुत समय और हार्ड ड्राइव को बचाएगा। । -q शांत है, -f और --फोर्स-सिंक आपको अस्थायी नेटवर्क त्रुटियों के मामले में आगे बढ़ने में मदद करेगा, -c केवल वर्तमान शाखा लाएगा। PS मैं विकास के दौरान "-d --prune" झंडे का भी उपयोग करता हूं जब मुझे किसी भी स्थानीय परिवर्तन को पूरी तरह से मिटाने और प्रकट संस्करण पर स्विच करने की आवश्यकता होती है।
ऑलेक्ज़ेंडर

@ ऑलेक्ज़ेंडर: आपकी जानकारी के लिए धन्यवाद, यह जानना उपयोगी है। मैंने -cझंडे के साथ परीक्षण किया , लेकिन किसी भी बड़े अंतर पर ध्यान नहीं दिया: कंप्यूटर के लिए अभी भी उतना डेटा डाउनलोड करने के लिए (25 जीबी), फिर भी मेरे लिए पीने के लिए जितना कैफीन है;)। मैं -fध्वज से थोड़ा सावधान हूं , मेरी समझ के अनुसार repoयह अनदेखा करने के लिए मजबूर करेगा जब यह स्रोत कोड के कुछ हिस्से को डाउनलोड करने में विफल रहा और अभी भी अंतिम परिणाम को सफलता के रूप में मानता है। मैं "सफलता" स्थिति को पूरी तरह से लाने के लिए आरक्षित करना पसंद करता हूं, और खुद को एक अज्ञात स्थिति में खोजने से बचता हूं जहां फाइलें बेतरतीब ढंग से गायब हो सकती हैं।
व्हाइटविंटरवॉल्फ

2

आपको पहले AOSP कोड से लिबासपोल का एक पुराना संस्करण तैयार करना चाहिए (जैसे कि 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

सिस्टम के लिबासपोल के खिलाफ लिंक किए गए सेपोलिश-इंजेक्शन के विपरीत, यह एक ठीक काम करता है / एंड्रॉइड sdk में शामिल 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

सेलिनक्स वितरण में शामिल टूल के लिए, ट्रिक को उसी DESTDIR के साथ बनाना है:

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

धन्यवाद। इससे मुझे sedispol का एक संस्करण मिला जो काम करने लगता है, लेकिन मैं अभी भी sesearch संकलित नहीं कर सकता। खोज फ़ाइल <apol/policy.h>(दूसरी policy.hफ़ाइल के भीतर से ) शामिल फ़ाइल की तलाश में मर जाती है । क्या आप जानते हैं कि कौन सा मॉड्यूल शामिल है apol?
user3188445

@ user3188445: फ़ाइल apol/policy.hपैकेज द्वारा प्रदान की गई है libapol-dev(कम से कम यह Ubuntu सिस्टम पर एक है)। अधिक विस्तृत जानकारी के लिए कृपया मेरे उत्तर को देखें।
व्हाइटवर्थवुल्फ़

1

समस्या का सामना कर रहे लोगों के लिए:

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

AOSP कोड के साथ काम करते समय।

मान लें, आपका AOSP कोड ~ / android / source dir पर चेक किया गया है :

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

और अब आप बंडल किए गए लेखा परीक्षा 2 उपयोगिता का उपयोग करने के लिए स्वतंत्र हैं :

./external/selinux/prebuilts/bin/audit2allow

PS इसके अलावा, मैं टिप्पणी की जांच करना चाहूंगा कि Android (v30) selinux नीति

शामिल फ़ाइल (दूसरी पॉलिसी के भीतर से) फ़ाइल की तलाश में सीसर्च मर जाता है। क्या आप जानते हैं कि किस मॉड्यूल में अपोल होता है?

स्रोतों से बिल्डिंग सेलिनक्स टूलकिट https://github.com/SELinuxProject/selinux बहुत तुच्छ नहीं है (जब तक कि आप फेडोरा का उपयोग नहीं कर रहे हैं)। उबंटू पर, आपको स्थापित करने की आवश्यकता है (यह मानते हुए कि आपने पहले से ही बेसन और सी कंपाइलर जैसे बुनियादी देव उपकरण स्थापित किए हैं) libglib2.0-dev, libcap-ng-dev, xmlto, libsemanage1-dev, libustr-dev, libaudit-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, ऑडिट 2why, और sesearch सभी अद्यतन AOSP अपस्ट्रीम पॉलिसी से v.30 तक टूट गए हैं।

आपको नीचे दिए गए पैच लागू करने होंगे और पॉलिसी डीबी को अपडेट करने के लिए अपने एंड्रॉइड ट्री को फिर से बनाना होगा। ये पैच पहले से ही मास्टर ब्रांच में विलय हो चुके हैं और Android N से उपलब्ध हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.