मैं नेट्टी 11.04 का उपयोग कर रहा हूं, जो कि ईओएल है (और मैंने पुराने-releases.ubuntu.com का उपयोग करने के लिए /etc/apt/source.list अपडेट किया है), इसलिए मुझे स्रोत से निर्माण करना होगा। मैं एक -deb का निर्माण करना चाहता था, इसलिए कम से कम पैकेज प्रबंधन "जागरूक" है, जो bash संस्करण डिफ़ॉल्ट नहीं है। मैं 100% सफल नहीं हूँ - हालाँकि, पैकेज को "नया" के रूप में पंजीकृत किया गया है और bash
द्विआधारी समाप्त हो गया है, इसलिए यहां वही किया गया है:
apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/
अब, (उप) निर्देशिका में bash-4.2/
, एक फ़ाइल है bash-4.2.tar.xz
, जिसे bash
स्रोत पर लाने के लिए अनपैक करने की आवश्यकता है ; और एक उपनिर्देशिका कहा जाता है debian
।
मैं निम्न परिवर्तन पर निर्भरता से बचने के लिए किया जाता texlive
में: bash-4.2/debian/control
:
Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript
... और bash-4.2/debian/rules
:
binary-doc: bash-install #bash-doc-build
dh_testdir
dh_testroot
mkdir -p $(d_doc)/usr/share/doc/$(p)
dh_installdocs -p$(p_doc)
ifeq ($(with_gfdl),yes)
#cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
rm -f $(d_doc)/usr/share/doc-base/bashref
endif
rm -f $(d_doc)/usr/share/info/dir*
#cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
# $(d_doc)/usr/share/doc/$(p)/
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
# /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
...
इस bash-4.2/
निर्देशिका में संस्करण को बदलने के लिए, यह करें:
bash-4.2$ dch --local patchCVE
... और पूछे जाने पर चैंज में नोट भरें। यह सुनिश्चित करेगा कि .deb (और संबंधित मेटाडेटा) को (मेरे मामले में) कहा जाता है bash_4.2-0ubuntu3patchCVE1_i386.deb
।
फिर आप के साथ dpkg-buildpackage -us -uc
या debuild
कमांड के निर्माण की कोशिश कर सकते हैं । नोट - इनमें से कोई भी स्रोत को ज़िप से री-अनपैक कर देगा - इस प्रकार आपके पास मौजूद किसी भी पैच को ओवरराइड कर सकता है! फिर भी, इनमें से एक को एक बार चलाएं ताकि स्रोत अनपैक हो और निर्मित हो (नोट debuild
अभी भी टेक्सिव के कारण अंत में विफल हो सकता है, लेकिन इसे स्रोत को अनपैक और निर्माण करना चाहिए)।
फिर, पैच लागू करें; ध्यान दें कि आपको -p1
यहां उपयोग करना चाहिए , क्योंकि वर्तमान में आप bash-4.2/
निर्देशिका में हैं:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
फिर चलाकर पैच किए गए संस्करण का पुनर्निर्माण करें:
bash-4.2$ fakeroot debian/rules build
यह निष्पादन योग्य का पुनर्निर्माण करेगा; इसका परीक्षण करने के लिए:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
.Deb फ़ाइलों को बनाने के लिए, चलाएँ:
bash-4.2$ fakeroot debian/rules binary
यह मूल निर्देशिका में .deb फ़ाइलों को बचाएगा; उनकी सामग्री को सूचीबद्ध करने के लिए:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
.Deb स्थापित करने के लिए:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
हालांकि, किसी कारण के लिए, इस .deb में एक अप्रकाशित बाइनरी (!) होता है, इसलिए मुझे इसके अतिरिक्त करना होगा:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... और उसके बाद, परीक्षण मेरे लिए सही तरीके से गुजरने लगा:
$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test