Bagaimana cara saya menginstal aplikasi dengan file DEB untuk satu pengguna saja?

33

Saat memasang aplikasi melalui pusat perangkat lunak atau dengan file DEB, mereka biasanya akan menginstal sistem secara luas untuk semua pengguna.

Apakah ada cara untuk menginstal aplikasi hanya untuk satu pengguna?

Takkat
sumber

Jawaban:

5

Tergantung pada apa yang ingin Anda capai, mungkin ada berbagai cara untuk membuat pekerjaan ini (atau setidaknya memberikan kemiripan fungsionalitas yang Anda inginkan).

Instalasi perangkat lunak dengan berbagai cara dilakukan untuk membuat sumber daya tersedia, atau memungkinkan akses ke hal-hal yang sudah ada pada sistem.

Apakah Anda berbicara tentang pemberian akses ke printer, atau memungkinkan pengguna untuk menjalankan program dalam direktori tertentu, ada beberapa cara untuk mencapai ini, dan meskipun mereka mungkin asli Ubuntu, solusi semacam ini umumnya (tentu saja) akan ditambahkan setelah fakta instalasi deb.

Berikut adalah dua kelas umum kontrol pasca pemasangan yang dapat ditambahkan. Perhatikan bahwa, mengingat lingkungan yang tepat, misalnya ketika kebijakan grup yang dikontrol ketat ada, ini mungkin lebih mudah setelah Anda memiliki sistem dasar di tempat. Izin semacam ini bahkan dapat dikaitkan dengan LDAP atau sistem serupa yang dapat memberikan otentikasi dan otorisasi per-pengguna atau grup.

Kontrol visiblity
Saya sendiri mungkin memiliki situasi yang agak mirip, tetapi dalam kasus saya, para pengguna tidak (belum) sangat canggih (semuanya berusia di bawah 7 tahun). Bagi saya, hanya menyembunyikan menu Gnome dan atau menghapus peluncur desktop berhasil.

Menghapus bit yang dapat dieksekusi dari direktori menghilangkan kemampuan proses untuk mencari atau melintasi mereka. Itu secara efektif dapat membuat mereka tidak terlihat, dan bijaksana, membuat mereka tidak tersedia. Jika Anda memiliki kebijakan sistem default yang membuat menu berdasarkan akses file, misalnya, Anda bisa mendapatkan solusi kosmetik semacam ini, dan kemudian membuatnya berfungsi untuk instalasi selanjutnya dengan sedikit usaha tambahan.

Kontrol pelaksanaan
Kontrol sumber daya dapat dilakukan melalui izin Unix, profil apparmor, izin SELinux, dan sebagainya. Mungkin ada level lain dari filter kontrol yang mungkin ikut bermain tergantung pada aplikasi. Dengan tidak adanya solusi yang lebih bertarget, Anda mungkin harus menulis pembungkus di sekitar program tertentu untuk mengontrol akses pengguna atau proses.

belacqua
sumber
3
+1 untuk memisahkan visibilitas dan aspek kontrol eksekusi
Takkat
10

Yah dpkgtidak akan membantu Anda karena ini bukan tujuan desainnya. Ia ingin menjadi sensus tunggal yang dimiliki oleh root terhadap paket yang diinstal pada suatu sistem.

Satu-satunya hal yang terlintas dalam pikiran adalah mengekstraksi paket dan mencoba menempatkan file secara manual di direktori home.

Namun ini hanya akan bekerja untuk beberapa hal. Banyak paket dibagi menjadi potongan-potongan (executable atau skrip /usr/bin, perpustakaan di /libdan pakaian lainnya /usr/share, dll) dan lokasi-lokasi ini dikodekan oleh skrip pembuatan. Jadi jika Anda mencoba dan menarik sesuatu seperti ini ke dalam ~, itu akan pecah. Anda bisa menghabiskan waktu berjam-jam untuk melepaskan ketergantungan tetapi Anda bisa melakukan sesuatu yang berguna dengan waktu Anda seperti menemukan obat untuk kanker atau menyerap sebagian dari keindahan di dunia.

Anda akan melakukan jauh lebih baik hanya untuk mengambil versi yang tidak dikemas dari siapa pun yang menulis perangkat lunak. Hampir semua perangkat lunak gratis tersedia dalam beberapa bentuk arsip terkompresi sebagai sumber, jadi ambil dan bangunlah. Anda tidak melakukan make installlangkahnya. Aplikasi Anda dibuat, cukup letakkan di tempat yang Anda inginkan.

Oli
sumber
1
Adapun opsi terakhir: bagi saya ini mungkin membantu dalam beberapa kasus (program sederhana), tetapi biasanya paket misalnya menginstal skrip init /etc/init, mencari file konfigurasi /etc, atau memiliki beberapa jalur lain yang di-hardcode.
atur
2
Proyek-proyek yang didasarkan pada autoconf memungkinkan untuk menyetel dir instalasi kustom melalui ./configure --prefix=$HOME/local.
Ingo Karkat
6

Saya tidak tahu terlalu banyak tentang subjek ini, tetapi tampaknya dari jawaban lain Anda mungkin dapat menginstal paket ke direktori lain alih-alih /dengan dpkg, menggunakan --rootparameter, dan kemudian melakukan chrootke direktori yang berisi paket itu " diinstal "di (yang tentu saja bisa menjadi dir di direktori home pengguna).

Untuk menginstal paket untuk pengguna selain root, dimungkinkan untuk menggunakan proses di atas dengan fakechrootbukan chroot.

Disclaimer : Saya tidak mencoba ini, dan tidak memiliki banyak pengalaman pada saat menulis dengan dpkgatau chroot, tapi dari apa yang saya lakukan tahu tentang alat ini, proses ini hanya mungkin bekerja.

Tautan yang memiliki informasi yang mungkin berguna bagi orang yang ingin mencapai efek chroottanpa rootkemampuan:

Memperbarui

Saya sekarang telah melakukan sedikit dengan hal-hal yang menyentuh masalah ini, dan menemukan beberapa ...

Fragmen (blok bangunan lingkungan setempat):

  • Fakechroot - meniruchroot(1)
  • Debootstrap - Membuat hierarki sistem file Debian lain di dalam direktori
  • Fakeroot-NG / fakeroot - Dapat berpura-pura menjadi root untuk beberapa hal
  • EmDebian - Varian debian yang menggunakan lebih sedikit ruang dan sering digunakan di lingkungan chroot
  • binfmt_misc - Dapat menjalankan file, menggunakan penerjemah mereka, seolah-olah mereka adalah binari asli; berguna bersama dengan qemu-pengguna untuk bekerja dengan binari (atau dalam chroot (palsu) arsitektur asing ( skrip / qemu-binfmt-conf.sh yang disertakan dengan kode sumber QEMU mengotomatisasikan ini)
  • Ruang pengguna Qemu - Dapat menjalankan binari dari arsitektur lain; dapat digunakan dengan beberapa alat ini ketika mereka tidak mendukung beberapa arsitektur prosesor
  • LwIP - Tumpukan jaringan TCP / IP yang dapat dijalankan dari ruang pengguna

Lengkap (penyedia lingkungan lokal lengkap):

  • Mode pengguna linux - menjalankan sistem linux lain sebagai proses / program reguler
  • Qemu - Jalankan komputer virtual yang lengkap
  • PRoot - Menyediakan fungsi dari chroot(1), mount --bind, binfmt_misc, dan berjalan binari dari arsitektur lain menggunakan qemu-user-space
  • Linux namespaces - Memungkinkan untuk mendapatkan root penuh di dalam lingkungan lokal, saat menggunakan ruang nama pengguna , fitur yang tersedia di Linux kernel versi 3.8 dan sesudahnya.

Rangkuman : Dengan meniru, atau benar-benar memiliki, root privilege secara lokal, paket DEB dapat diinstal untuk lingkungan lokal.

Abbafei
sumber
3
Jangan ragu untuk memformat ulang jawaban Anda sepenuhnya jika Anda memiliki informasi yang bertentangan dengan info Anda sebelumnya (atau jika menurut Anda itu menambah apa pun). Dalam banyak kasus, jawaban Anda akan lebih jelas jika Anda mengulangi alih-alih menambahkan bagian "Edit" atau "Perbarui" tambahan. Informasi Anda menarik, tetapi bagian yang mungkin paling relevan terjebak di bagian bawah.
belacqua
@ jgbelacqua - diformat ulang, terima kasih atas tipnya.
Abbafei
4

Anda mungkin dapat menggunakan --rootopsi dpkguntuk menginstal ke direktori lain. Tetapi mungkin akan mengalami masalah jika aplikasi mencari hal-hal di tempat-tempat tetap seperti /etc.

Singkatnya, saya tidak berpikir ada cara yang mudah.

Dariel Dato-on
sumber
2

Anda dapat mengubah kepemilikan file yang dapat dieksekusi sehingga hanya satu pengguna yang dapat menjalankannya. Kemudian, jika perlu, Anda dapat menghapus aplikasi dari menu pengguna lain.

mengatur
sumber
1
Motivasi umum untuk ingin menginstal aplikasi untuk satu pengguna adalah untuk menghindari keharusan menggunakan hak administratif untuk instalasi.
ændrük
@ ændrük Tetapi jika dia sudah menginstal dari .deb, bukankah kita mengasumsikan hak istimewa admin?
belacqua
@ jgbelacqua Setahu saya, menginstal dari .deb membutuhkan hak admin. Tetapi, lebih umum, menginstal sesuatu "hanya untuk satu pengguna" seharusnya tidak memerlukan peningkatan pada hak istimewa yang digunakan untuk administrasi seluruh sistem. Misalnya, saya sering menginstal program hanya untuk diri saya sendiri dengan menempatkannya ~/bin. Ada keraguan dalam pertanyaan ini tentang apakah Takkat ingin membatasi akses / visibilitas aplikasi multi-pengguna, atau apakah dia ingin menginstal aplikasi single-user. Pertanyaan Anda dan susunan menggunakan interpretasi sebelumnya, dan sisanya menganggap yang terakhir.
ændrük
1

Diragukan.

Deb utamanya adalah arsip yang bisa diekstraksi ke root sistem file Anda ketika diinstal (ditambah beberapa konfigurasi). Jika Anda ingin menginstalnya hanya untuk satu pengguna, Anda harus menginstalnya ke / home / folder pengguna. Bahkan jika Anda melakukannya, mereka tidak akan berfungsi, karena binari aplikasi fe tidak akan mendarat di / usr / bin (atau yang serupa), dan sistem tidak akan menemukannya jika Anda akan mencoba meluncurkannya. Demikian pula perpustakaan dll tidak akan berguna, karena sistem tidak akan tahu ada di suatu tempat di / home. Anda dapat mencoba pendekatan brute-force , dan menyesuaikan variabel PATH untuk menunjuk ke mana pun Anda mengekstrak file dari arsip deb, tetapi itu tidak hanya SANGAT tidak aman, tetapi dapat menyebabkan masalah kompatibilitas (entri menu fe tidak berfungsi, karena GNOME memperluas file .desktop menjadi di / usr / share / aplikasi).

Selain itu, jika Anda menginstal paket hanya untuk beberapa pengguna, ini dapat menyebabkan masalah ketergantungan yang gila, jika ada pengguna lain yang menginstal paket yang bertentangan dengan paket lain yang telah Anda instal hanya untuk diri Anda sendiri - dan mungkin banyak masalah terkait manajemen paket lainnya akan muncul.

Semua masalah ini membuatnya sangat sulit untuk mengelola paket secara terpisah untuk pengguna, jadi sepertinya tidak mungkin untuk menginstalnya hanya untuk satu pengguna, karena ide di balik .debs tidak mengizinkannya.

Rafał Cieślak
sumber