Saya baru saja menemukan sesuatu yang saya heran mungkin bisa menjadi masalah keamanan utama dengan terminal Linux. Saya mencoba menginstal g ++ 5.0. Saya seorang pemula untuk Linux, jadi saya baru saja mengetik sudo apt-get install g++ 5.0
. Alih-alih hanya mengembalikan kesalahan atau sesuatu, itu menginstal Kotak Virtual!
Jika saya mencoba menginstal satu hal dari terminal dan menginstal sesuatu yang sama sekali berbeda, apakah itu berarti itu dapat terjadi pada hal lain, mungkin malware? Mengapa menginstal Virtual Box ketika saya mengetik sesuatu yang sama sekali berbeda?
apt-get
akan meminta konfirmasi dari pengguna, jadi Anda bisa memasukkann
dan menghindari menginstal VirtualBox ... Juga repositori Ubuntu diperiksa, jadi seharusnya tidak ada paket malware yang dapat Anda instal di tempat pertama. Jika Anda menambahkan PPA acak, ini mungkin terjadi tetapi itu karena Anda memberi tahu Ubuntu untuk menginstal aplikasi dari sumber yang tidak terpercaya.a major security issue with the Linux terminal
Tidak, tenanglah. Ini hanya (jangan tersinggung!) Anda tidak membaca / mengetik dengan benar - tidak ada masalah dengan Linuxapt-get
,, atau salah satu dari banyak terminal berbeda yang tersedia.Jawaban:
Perintah
menunjukkan Anda ingin menginstal dua paket:
g++
dan5.0
. (Nama paket tidak memiliki spasi, dan apt-get menerima beberapa nama paket, dipisahkan oleh spasi.)Apa yang mungkin terjadi adalah menginstal g ++ seperti yang diminta, lalu menginstal semua paket (termasuk nomor versi) yang cocok dengan ekspresi reguler
5.0
(karena tidak ada paket yang benar-benar bernama5.0
). (terima kasih @edwinksl!)Untuk menghindari ini, pastikan Anda memiliki nama paket yang benar, tanpa spasi. Anda juga dapat menggunakan
-s
opsi untuk mensimulasikan tindakan apt-get sebelum melakukannya secara nyata:akan menunjukkan kepada Anda tindakan yang akan dilakukan perintah , tanpa benar-benar menginstal apa pun. Jika terlihat OK, Anda dapat menghapus
-s
untuk melakukan instalasi.Anda juga dapat mempertimbangkan untuk menggunakan manajer paket grafis yang lebih ramah-pemula, seperti
synaptic
ataumuon
.sumber
5.0
sedang digunakan sebagai regex, jadiapt
melakukan lebih dari sekadar mencocokkan string "5.0".regex
, sebuah titik cocok dengan karakter tunggal mana pun. Dan karena kecocokan regex secara default terlihat di string,"5.0"
berarti "nama apa pun yang berisi 5, diikuti 2 karakter kemudian dengan 0". Contoh "FooBar 2.510" atau "AcmeWidgets 5.0" ("setiap karakter tunggal" tidak termasuk titik literal)Perintah yang benar untuk menginstal
g++
versi 5.x adalah:Ini akan menginstal
g++
versi 5.3 pada xenial, yang merupakan default saat ini (jadiapt-get install g++
instal juga, tetapi ini akan berubah di masa depan). Faktanya, tidak ada rilis publik 5.0 dari GCC.g++
Rilis lain dikemas, misalnyag++-4.9
ataug++-6
, yang dapat diinstal dengan cara yang sama.Jika Anda perlu menginstal rilis tertentu (yang sudah ada)
g++
yang tidak dikemas untuk sistem Anda, Anda harus membuatnya dari sumber .sumber
sudo apt install g++5.0
(tanpa ruang antarag++
dan5.0
) masih akan gagal.Mari kita jabarkan.
Pertama-tama, sedikit catatan tentang cara
apt-get install
(dan sebagian besarapt-get
argumen lain juga) bekerja:Anda dapat memasukkan beberapa nama paket:
Nama-nama paket sebenarnya adalah
man 7 regex
pola Ekspresi Reguler Diperpanjang (ERE) (Periksa ) sehingga nama paketfoo.bar
berarti nama paket apa pun yang memiliki substring yang dimulai denganfoo
dan diakhiri denganbar
karakter tunggal antarafoo
danbar
. Kemungkinanf.*r
berarti setiap nama paket yang berisi substring yang memilikif
danr
dengan sejumlah karakter yaitu apa pun di antaranya. Untuk melakukan pencocokan seluruh nama paket, gunakan token awal dan akhir mis^foo.bar$
. Jika Anda ingin token Regex apa pun diperlakukan secara harfiah, maka Anda harus melarikan diri dari token dengan\
misalnya untuk memperlakukanfoo.bar
secara harfiah, Anda perlu:Di sini kutip tunggal adalah untuk mencegah interpretasi shell dari pola sebagai pola globbing, tidak perlu dalam kasus ini tetapi akan diperlukan misalnya untuk pola
foo.*bar
jika Anda memiliki file di direktori saat ini bernama misalnyafoo.bar
.Ada tangkapan pada pertimbangan nama paket. Jika ada paket yang cocok dengan polanya, polanya akan diperlakukan secara literal dan tidak ada interpretasi Regex yang akan dilakukan. Misalnya, untuk pola paket
g++
, itu akan cocok dengan paketg++
secara harfiah terlepas dari token Regex+
. Jika tidak ada paket bernamag++
dalam repositori yang ditentukan, itu akan diperlakukan sebagai pola ERE.Sekarang, Anda telah memberikan perintah:
Ini berarti:
Anda ingin menginstal dua pola paket yang disediakan yaitu
g++
dan5.0
g++
cocok dengan paket meta literalg++
seperti yang disebutkan di atasBagian yang tersisa
5.0
,, memiliki token Regex,.
yaitu setiap karakter tunggal. Jadi ini akan cocok dengan nama paket apa pun yang berisi5<any_character>0
. Jadi semua paket yang memiliki kecocokan telah dipilih untuk diinstal dan mungkinvirtualbox-5.0
juga telah dipilih dalam proses.Agaknya Anda ingin menginstal
g++
versi5
, jadi melakukan hal berikut akan dilakukan ( sudah disebutkan dalam jawaban ini ); Paket metag++-5
,, akan merujuk pada paket minor dirilisg++
versi 5 terbaru yang tersedia :Untuk mencari paket apa pun, dalam repositori yang dikonfigurasi, gunakan
apt-cache
(gunakan seperti EREapt-get
):Jika Anda tidak ingin Regex-ify itu, gunakan
less
untuk menggulir ke bawah daftar yang agak besar:Juga sebelum memasang apa pun yang Anda tidak yakin, jangan gunakan opsi
-y
(--assume-yes
) dan ujilah terlebih dahulu dengan-s
(--simulate
/--dry-run
):sumber
apt-cache search
semuanya penting untuk diperhatikan.