EOL olan Natty 11.04 kullanıyorum (ve /etc/apt/sources.list'i old-releases.ubuntu.com'u kullanmak için güncelledim), bu yüzden kaynaktan oluşturmam gerekiyor. Bir .deb yapmak istedim, bu yüzden en azından paket yönetimi "farkında" dır, bash versiyonu varsayılan değil. % 100 başarılı değilim - ancak, paket "daha yeni" olarak kaydedildi ve bash
ikili sabit bitti, işte yaptığım işte:
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/
Şimdi, (sub) dizininde bash-4.2/
, var: kaynağa bash-4.2.tar.xz
ulaşmak için açılması gereken bir dosya bash
; ve denilen bir alt dizin debian
.
Bağımlılıkları önlemek için aşağıdaki değişiklikleri yaptım texlive
: in 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
... ve içinde 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
...
Sürümü değiştirmek için bu bash-4.2/
dizinde şunları yapın:
bash-4.2$ dch --local patchCVE
... ve istendiğinde, değişiklik notundaki notları doldur. Bu (benim durumumda) .deb (ve ilgili meta veri) çağrılmasını sağlayacaktır bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Sonra inşa dpkg-buildpackage -us -uc
veya debuild
komut ile deneyebilirsiniz . Not - bunlardan herhangi biri kaynağı fermuardan tekrar açacaktır - böylece sahip olabileceğiniz tüm yamaları geçersiz kılar! Yine de, bunlardan birini çalıştırın, böylece kaynağın debuild
açılması ve oluşturulması sağlanır (not texlive nedeniyle yine de başarısız olabilir, ancak kaynağı açıp derlemesi gerekir).
Sonra yamaları uygulayın; -p1
Burada kullanmanız gerektiğini unutmayın , çünkü şu anda bash-4.2/
dizindesiniz:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Ardından yamalı sürümü çalıştırarak yeniden oluşturun:
bash-4.2$ fakeroot debian/rules build
Bu çalıştırılabilir dosyayı yeniden kurar; test etmek için:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
.Deb dosyalarını oluşturmak için aşağıdakileri çalıştırın:
bash-4.2$ fakeroot debian/rules binary
Bu, .deb dosyalarını ana dizine kaydeder; içeriklerini listelemek için:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
.Deb'yi yüklemek için:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Ancak, bazı nedenlerden dolayı, bu .deb bir yamalı ikili dosya içeriyor (?!), Bu yüzden ayrıca şunu da yapmak zorunda kaldım:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... ve bundan sonra, test benim için doğru şekilde geçmeye başladı:
$ 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