Saya memiliki skrip yang memberi saya kendali yang baik atas kecerahan lampu latar saya dan sudo
harus dijalankan. Ini pada dasarnya ini:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
dan tinggal di ~/bin/backlight-adjust
. Script memerlukan sudo
hak istimewa, karena tee $backlight
menulis ke lokasi yang istimewa. Jadi itu akan gagal jika tidak dijalankan sudo
.
Pendekatan ini memiliki masalah, karena saya tidak bisa hanya berjalan sudo backlight-adjust
, karena ~/bin
tidak ada di $PATH
dalam sudo
lingkungan, hanya di lingkungan saya. Jadi saya harus menjalankan sudo env "PATH=$PATH" backlight-adjust
atau yang serupa.
Atau, saya bisa menulisnya seperti ini:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
dan minta saya untuk memasukkan kata sandi.
Pendekatan kedua bekerja lebih baik untuk saya karena saya tidak harus ingat untuk mengetikkan sudo; itu akan meminta saya. Dan aku bisa menjaga $PATH
keutuhanku. Secara keseluruhan ini terasa lebih nyaman, tetapi adakah alasan mengapa saya tidak boleh melakukannya dengan cara kedua?
(Saya menjalankan Xubuntu 14.04 dan shell saya GNU bash 4.2.45, jika itu membuat perbedaan.)
sumber
sudo
benar - benar membuat saya$PATH
secara default jadi saya tidak memiliki masalah ini.Jawaban:
Secara pribadi, saya akan menggunakan pendekatan yang berbeda. Buat alias untuk skrip Anda. Tambahkan baris ini ke Anda
~/.bashrc
(atau setara dengan shell lain)Dengan begitu, Anda tidak perlu khawatir mengingat untuk menjalankannya
sudo
dan Anda tidak perlu menambahkannyasudo
ke skrip. Ini akan sepenuhnya transparan bagi Anda dan hanya meminta kata sandi saat Anda mencoba dan menjalankannyabacklight-adjust
.sumber
sudo
skrip yang sebenarnya, terutama karena itu memungkinkan Anda untuk dengan mudah melihat elemen skrip mana yang benar-benar memerlukan izin root.Saya tidak bisa melihat mengapa itu bisa salah --- walaupun saya biasanya lebih suka bahwa perintah tidak akan menanyakan hal-hal kepada saya, sehingga mereka dapat skrip. Anda dapat mengubah
/etc/sudoers
agarsudo
berfungsi tanpa kata sandi.Tapi ... kenapa tidak menambahkan
di Anda
/etc/rc.local
dan lupakansudo
?(Di Ubuntu jika Anda dapat menggunakan
sudo
Anda berada di grup sudo , sehingga Anda dapat menggunakanchgrp sudo /sys...
dan senang dengan itu.)sumber
Atau, Anda bisa menambahkan
ke
/etc/sudoers
file Anda .sumber
Anda menyatakan sudo backlight-sesuaikan, karena ~ / bin tidak dalam $ PATH di lingkungan sudo
Jadi mengapa bergantung pada itu? Saya pikir Anda hanya perlu mengubah jalur
/home/user/bin/backlight-adjust
itu dan itu akan berhasil.Tapi saya sangat suka solusi Terdon menggunakan alias juga. Atau Anda dapat menempatkan skrip Anda di
/usr/bin/
dan itu akan tersedia untuk setiap pengguna (termasuk root)sumber
~/bin
karena saat itu di bawah repositori dotfiles rumah saya, sehingga tetap dalam kontrol versi.-E
bendera untuk melestarikan lingkungan:sudo -E command
sudo env "PATH=$PATH" ...
).Tidak dapat memberikan aturan umum ... jika skrip / program dirancang untuk melakukan konfigurasi ulang (misalnya printer) dan dipanggil oleh pengguna biasa, itu harus dilakukan. Kalau tidak, saya akan meninggalkan cukup baik sendirian: Jika pengguna biasa menjalankannya, gagal saja (baik sebagai hasil dari pemeriksaan eksplisit, atau hanya karena tidak diizinkan untuk melakukan sesuatu).
Hak istimewa yang tinggi harus dibagikan dengan hemat, jika sama sekali. Beralih ke hak istimewa yang lebih tinggi itu rumit, lebih baik serahkan ke ahli (yaitu,
sudo(1)
).sumber
Saya pribadi menggunakan sesuatu seperti
${SUDO}
di skrip saya, sehingga penelepon dapat mengaturnya jika diperlukan, atau${SUDO:-sudo}
menggunakannya secara default.Namun dalam kasus spesifik Anda, saya dengan jawaban yang diterima.
sumber
Letakkan skrip (tanpa
sudo
) di lokasi yang sesuai dengan pengguna, seperti/bin
, lalu lakukan ini:Ini berfungsi dengan mengatur flag setuid, yang berarti akan selalu dijalankan sebagai pemilik file. Untuk perinciannya silakan baca http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ . Saya tidak benar-benar tahu banyak tentang bagaimana ini bekerja, saya hanya menemukan itu berdasarkan pada sesuatu yang saya pikir saya baca beberapa tahun yang lalu.
sumber
4755
berarti selalu dieksekusi sebagai pemilik, pemilik dapat membaca, menulis, dan mengeksekusi, grup dapat membaca dan mengeksekusi, dan pengguna dapat membaca dan mengeksekusi, yang merupakan tingkat izin standar untuk hal-hal yang boleh diizinkan dilakukan oleh pengguna dengan izin root.