Saya tidak bisa merekomendasikan menjadi pemilik /usr/local
; untuk sebagian besar situasi, itu mungkin kurang aman daripada menggunakan sudo
.
Pertanyaan Anda menyarankan dua alasan yang mungkin Anda inginkan chown
/usr/local
.
Yang pertama adalah untuk menghindari keharusan menggunakan sudo
untuk menginstal perangkat lunak. Ini mungkin dibaca oleh beberapa orang (seperti penulis jawaban ini ) yang mengatakan Anda ingin bekerja secara efisien, atau menyimpan penekanan tombol yang diperlukan untuk mengetik sudo
dan memasukkan kata sandi Anda. Tetapi mungkin ketika Anda mengatakan "tidak perlu," Anda merujuk pada prinsip hak istimewa :
Secara default, root
memiliki direktori. Ini berarti bahwa untuk menginstal di sana, Anda harus menggunakan sudo
. Untuk pengguna tunggal atau mesin pengembang, ini sepertinya tidak perlu menggunakan perintah secara ekstra
Saya cukup sering mendengar / membaca pendapat orang-orang / mengeluh di sepanjang baris "Saya adalah satu-satunya yang menggunakan sistem ini, jadi saya tidak perlu menggunakan sudo
dan memasukkan kata sandi." Bagi pembaca yang memiliki pandangan itu, dan karena relevan di sini, mari kita mengingatkan diri kita sendiri tentang alasan keamanan dasar untuk root untuk memiliki hal-hal.
Sebagian besar file program yang diinstal pada sistem Ubuntu memiliki mode file 755, atau dalam notasi simbolis rwxr-xr-x
, artinya setiap pengguna atau program dapat menjalankannya , tetapi hanya pemilik file, root, yang dapat memodifikasinya. (Secara teknis ini juga mensyaratkan bahwa tidak seorang pun selain root memiliki w
izin pada direktori yang berisi mereka, sehingga pengguna lain tidak dapat menghapus atau memindahkannya.)
Ini berarti bahwa Anda, pengguna yang rendah hati, dapat menjalankan program apa pun. Jika Anda mencoba menggunakan program untuk melakukan sesuatu yang Anda tidak memiliki izin untuk melakukannya, seperti melakukan operasi tulis pada file yang dimiliki oleh root, itu akan kesalahan keluar. Ini membuat kesalahan ketik pada beberapa perintah, aplikasi kereta, atau kode berbahaya, kecil kemungkinannya akan mengacaukan sistem Anda - kecuali jika itu dijalankan sebagai root, ia tidak akan memiliki izin untuk melakukannya. Ini sangat berguna saat menjalankan program yang berinteraksi dengan internet.
Jika Anda chown
/usr/local
, program apa pun yang berjalan dengan hak istimewa Anda dapat menulis file di sana, yang nantinya dapat dieksekusi sebagai root karena beberapa alasan, seperti dengan mengganti perintah lain dengan nama yang sama. /usr/local/bin
adalah di default $PATH
, dan dalam sudo
's secure_path
, dan itu datang sebelum lokasi lain di kedua. Jadi jika saya memiliki dua file executable
/usr/local/bin/chown
/bin/chown
ketika saya mengeksekusi sudo chown ...
, yang chown
di /usr/local/bin
akan dieksekusi .
Tapi Anda mungkin sudah tahu semua itu, karena alasan kedua adalah tentang keamanan:
Selain itu, jika Anda telah menginstal perangkat lunak yang dikompilasi secara lokal /usr/local
, perangkat lunak saat ini membutuhkan root untuk memodifikasi sendiri atau menginstal plugin. Ini tampaknya tidak aman - Saya hanya ingin menggunakan sudo
ketika saya tahu PERSIS apa yang akan terjadi.
Kalau-kalau perlu menyebutkan ini di sini, itu benar sekali (menurut FHS toh) untuk menginstal perangkat lunak yang dikompilasi secara lokal /usr/local
, tetapi kompilasi itu sendiri harus dilakukan di suatu tempat di Anda $HOME
, tanpa sudo
, sampai langkah terakhir ketika Anda mengetik sudo make install
atau setara.
Saya pikir Anda menyarankan bahwa dengan menjalankan program yang diinstal /usr/local
sebagai pemiliknya yang tidak terprivasi, Anda dapat menggunakan kesalahan izin khusus yang dilemparkan ketika mencoba memperbarui sendiri untuk melihat bahwa ia mencoba mengubah beberapa lokasi sistem file lain yang tidak Anda miliki dengan cara Anda tidak mau, sehingga Anda bisa menghentikannya.
Ini mungkin bermanfaat. Implikasinya adalah bahwa Anda memercayai program untuk melakukan apa pun yang disukainya /usr/local
, tetapi tidak di tempat lain. Jika meminta izin yang ditinggikan, Anda bisa menolak untuk memperbolehkannya, atau mencopotnya. Itu masuk akal bagi saya. Tapi saya pikir mencoba menggunakan /usr/local
semacam kotak pasir dengan cara ini mungkin bukan ide yang baik, atau setidaknya itu bukan solusi yang paling aman. Ini bukan lokasi yang terisolasi dengan baik ( /opt
sedikit lebih terisolasi, karena tidak dalam pengaturan standar $PATH
). Program mungkin menulis atau menghapus sesuatu yang /usr/local
dapat menyebabkan kerusakan. Program lain (berpotensi ditulis dengan buruk) yang Anda jalankan dapat menulis dan mengeksekusi kode di sana yang tidak Anda sadari.
Jika Anda khawatir tentang membiarkan suatu program memperbarui dirinya sendiri dengan aman, Anda mungkin harus mencari alternatif (mungkin khusus untuk program tersebut, seperti halnya python misalnya, atau Anda dapat mencari snap atau implementasi serupa yang sesuai dengan kebutuhan Anda, atau menggunakan wadah atau VM untuk menguji perangkat lunak yang berpotensi tidak aman) sebelum memaparkan lokasi sistem (bahkan yang relatif pengguna-y) untuk ditulis oleh program yang dijalankan oleh pengguna normal. Bagi saya itu sepertinya memiliki efek yang tidak terduga seperti memungkinkan program untuk sementara meningkatkan izin sudo
.
/usr/local/bin
root itu (dan juga pengguna lain) yang dapat dijalankan? Tidakkah mereka perlu dimiliki oleh root? Selain itu, perintah penggunaan root - termasuk perintah di/usr/local/sbin
--mungkin tergantung pada pustaka bersama di/usr/local/lib
. Mengubah pustaka tersebut dapat memperkenalkan perubahan sewenang-wenang pada perilaku perintah yang menggunakannya. Bersikeras bahwa/usr/local/sbin
tetap dimiliki oleh root tampaknya sepenuhnya arbitrer.Hanya untuk perangkat lunak yang Anda butuhkan, gunakan direktori home Anda alih-alih
/usr/local
.Alih-alih mengubah kepemilikan
/usr/local
atau harus menjalankan perintah sebagai root ketika Anda tidak ingin, Anda hanya perlu mengkonfigurasi build Anda sehingga mereka menginstal di direktori home Anda alih-alih/usr/local
. Ini mengatasi semua masalah potensial dengan mengubah kepemilikan/usr/local
, termasuk bagaimanabin
dansbin
subdirektori berada diroot
jalurnya.Jika Anda perlu mengizinkan pengguna lain untuk menjalankan perangkat lunak Anda, Anda dapat memberi mereka akses. Bahkan, mereka mungkin sudah bisa, karena secara default direktori home Anda memiliki akses permisif membaca dan mengeksekusi . (Jika Anda tidak menginginkannya, Anda dapat mengubahnya dengan mudah, hanya dengan menggunakan
chmod
file atau direktori apa pun yang Anda ingin jadikan pribadi dan mungkin juga mengubah Andaumask
.)Dengan perangkat lunak yang terinstal di direktori home Anda, binari yang sudah masuk
/usr/local/bin
akan masuk . Anda akan mendapatkan subdirektori lain dari direktori home Anda yang sesuai dengan subdirektori yang dibutuhkan perangkat lunak yang Anda instal. Ini biasanya akan terjadi secara otomatis ketika Anda menginstal perangkat lunak dari kode sumber./home/username/bin
/usr/local
Mengkonfigurasi Bangunan Anda
Sebagian besar perangkat lunak yang Anda buat dari kode sumber memiliki langkah di mana Anda menjalankan:
Untuk sebagian besar perangkat lunak yang dikirimkan dengan
configure
skrip yang dapat dijalankan seperti itu, itu default untuk mengkonfigurasi build untuk instalasi di dalamnya/usr/local
ketika Anda akhirnya menjalankansudo make install
untuk menginstalnya. Alasannya adalah secara implisit setara dengan menjalankan:Untuk mengonfigurasi bangunan untuk pemasangan di direktori home Anda, gunakan ini sebagai gantinya:
Dalam praktiknya, di Ubuntu, jalur direktori home tidak mengandung spasi, spasi putih lain, atau karakter lain yang akan diperlakukan secara khusus oleh shell seperti
*
, jadi kecuali Anda telah membuat akun pengguna dengan aneh, Anda bisa mengetik:(Saya tidak menyarankan membiasakan diri untuk menulis skrip . Juga, pada beberapa OS lain - seperti macOS - lebih jarang jalur ke direktori home pengguna mengandung ruang.)
Atau jika Anda mau, Anda bisa mengetikkan path direktori home lengkap Anda:
(Ganti
username
dengan nama pengguna Anda yang sebenarnya, tentu saja. Jika karena alasan tertentu direktori home Anda tidak masuk/home
maka Anda harus menyesuaikannya.)Menginstal Build Anda
Setelah Anda menjalankan
make
, Anda mungkin terbiasa menjalankannyasudo make install
, tetapi ketika Anda menginstal di direktori home Anda sendiri, Anda tidak perlu menjalankannya sebagai root, sehingga Anda dapat - dan harus --omitsudo
. Lari saja:Demikian pula untuk perangkat lunak yang mendukung
uninstall
target:Ini persis seperti yang Anda minta ... hanya di direktori home Anda, bukan
/usr/local
.Menjalankan Program Anda
Mungkin yang
bin
subdirektori dari direktori home Anda adalah baik:$PATH
, atau$PATH
jika Anda baru saja keluar dan masuk.Alasannya adalah
.profile
file di direktori home Anda, yang berisi perintah yang berjalan saat Anda masuk, berisi ini secara default untuk akun pengguna yang dibuat di sebagian besar versi Ubuntu (termasuk akun administrator awal yang dibuat ketika Anda menginstal OS):Kode itu berjalan ketika Anda masuk (karena ada
.profile
) dan menempatkanbin
direktori pribadi Anda$PATH
hanya jika ada pada saat itu. Itu sebabnya Anda mungkin harus keluar dan kembali.Rilis yang lebih lama seperti Ubuntu 14.04, serta rilis yang lebih baru seperti Ubuntu 17.10, datang dengan itu. Namun, Ubuntu 16.04, yang mungkin merupakan rilis paling populer pada saat penulisan ini, malah memiliki ini:
Itu hanya menambahkan
bin
subdirektori dari direktori home Anda --- dan juga.local/bin
subdirektori - ke direktori Anda$PATH
, tanpa memeriksa apakah direktori tersebut benar-benar ada. Jadi jika Anda menggunakan 16,04, atau jika Anda meningkatkan dari sistem yang 16,04 saat akun pengguna Anda dibuat, makabin
subdirektori dari direktori home Anda kemungkinan sudah ada di Anda$PATH
..profile
File Anda disalin dari/etc/skel
direktori ketika akun pengguna Anda dibuat. Jika akun pengguna Anda dibuat pada rilis Ubuntu yang lebih lama, ia mendapat versi itu.profile
, dan itu tidak diubah - untuk akun pengguna Anda - dengan memutakhirkan ke rilis yang lebih baru.Setelah
bin
subdirektori dari direktori home Anda berada di Anda$PATH
, Anda akan dapat menjalankan program yang file-file yang dapat dieksekusi diinstal di sana hanya dengan mengetikkan namanya, sama seperti yang dapat Anda lakukan dengan program-program yang diinstal oleh manajer paket Ubuntu atau diinstal di dalam/usr/local
.Itu
.local
OptionAnda mungkin telah memperhatikan bahwa
.profile
file default untuk akun pengguna yang dibuat di beberapa rilis Ubuntu, termasuk di 16.04 seperti dijelaskan di atas, menambahkan tidak hanya$HOME/bin
ke jalur Anda, tetapi juga$HOME/.local/bin
. Jika Anda.profile
tidak menambahkan itu, tetapi Anda mau , maka Anda cukup mengeditnya.Meskipun sering digunakan untuk menyimpan pengaturan dan data cache , Anda juga dapat menginstal perangkat lunak di dalam
.local
subdirektori direktori home Anda. Anda harus merasa tidak terhalang untuk melakukannya, karena dari sudut pandang kegunaan dan keamanan,--prefix="$HOME/.local"
serupa dengan--prefix="$HOME"
.Ingat bahwa file dan direktori yang memulai dengan
.
tidak ditampilkan secara default di browser file grafis (gunakan Ctrl+ Huntuk menyembunyikan dan menyembunyikannya) atau denganls
perintah (lulus-A
atau-a
bendera untuk menunjukkannya). Ini mungkin bukan yang Anda inginkan, atau mungkin persis apa yang Anda inginkan. Ini adalah masalah pilihan pribadi.Namun, saya telah mengamati bahwa beberapa manajer paket berbasis sumber otomatis yang membangun dan menginstal perangkat lunak dalam penggunaan direktori home seseorang
$HOME/.local
. Saya sebenarnya tidak tahu seberapa umum hal ini - saya berharap untuk menyelidiki lebih lanjut dan memperbarui jawaban ini - tetapi Anda mungkin lebih suka menggunakan$HOME
hal-hal yang Anda kompilasi secara manual. Dengan begitu akan jelas dari mana segala sesuatu berasal. Dan jika ada tabrakan, perangkat lunak itu masih mungkin hidup berdampingan secara wajar.Anda mungkin juga dengan sengaja menginstal beberapa perangkat lunak di
$HOME/.local
dan perangkat lunak lain di$HOME
. Terserah kamu.bin
Direktori mana pun yang pertama kali muncul di$PATH
variabel lingkungan Anda adalah yang akan dijalankan oleh perintah, jika perintah dengan nama yang sama ada di keduanya.Penghargaan diberikan kepada Zanna dan Videonauth karena menunjukkan kesalahan dalam versi sebelumnya dari jawaban ini, mengenai rilis Ubuntu mana yang memiliki kode default
.profile
, dan membantu saya untuk memperbaikinya (lihat juga di sini ).sumber
Jika sudo merepotkan maka cukup perbarui / etc / sudoers sehingga Anda tidak perlu memasukkan kata sandi saat menjalankan sudo. Saya percaya itu adalah solusi yang lebih baik daripada mengubah pemilik / usr / local.
sumber
/usr/local
Anda harus menggunakan sudo, yang berpotensi berbahaya.