Saya perlu menjalankan sesuatu sebagai sudo tanpa kata sandi, jadi saya menggunakan visudo
dan menambahkan ini ke sudoers
file saya :
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Lalu saya mencobanya:
$ sudo /path/to/my/program
[sudo] password for MYUSERNAME:
Mengapa ia meminta kata sandi? Bagaimana saya bisa menjalankan / menggunakan perintah sebagai root dengan pengguna non-root, tanpa meminta kata sandi?
/path/to/my/program
itu adalah skrip python?.bashrc
)? Atau bahkan skrip shell di dalamnya/usr/local/sbin
? Untuk mencoba./etc
, tetapi beberapa sistem meletakkannya di tempat lain. Jika Anda tidak dapat menemukannya, cobalahman sudoers
. Lokasi lokal untuk file itu harus diganti keman
halaman pada saatsudo
itu dibangun untuk sistem itu.Jika ada beberapa entri yang cocok
/etc/sudoers
, sudo menggunakan yang terakhir. Oleh karena itu, jika Anda dapat menjalankan perintah apa pun dengan prompt kata sandi, dan Anda ingin dapat menjalankan perintah tertentu tanpa prompt kata sandi, Anda memerlukan pengecualian yang terakhir.Perhatikan penggunaan
(root)
, untuk memungkinkan program dijalankan sebagai root tetapi tidak sebagai pengguna lain. (Jangan memberikan izin lebih dari minimum yang diminta kecuali Anda sudah memikirkan implikasinya.)Catatan untuk pembaca yang tidak menjalankan Ubuntu atau yang telah mengubah konfigurasi sudo default (sudo Ubuntu ok secara default) : Menjalankan skrip shell dengan hak akses tinggi berisiko, Anda harus mulai dari lingkungan yang bersih (setelah shell sudah dimulai, sudah terlambat (lihat Izinkan setuid pada skrip shell ), jadi Anda perlu sudo untuk mengurusnya). Pastikan bahwa Anda memiliki
Defaults env_reset
di/etc/sudoers
atau bahwa pilihan ini adalah kompilasi-waktu default (sudo sudo -V | grep env
harus mencakupReset the environment to a default set of variables
).sumber
john ALL=(ALL) NOPASSWD: all
. Tidak ada gunanya melaluisu
.sudoers
, Anda tidak perlu melakukan sesuatu yang istimewa:sudo
periksa setiap kali.PERINGATAN : Jawaban ini dianggap tidak aman. Lihat komentar di bawah
Solusi Lengkap: Langkah-langkah berikut akan membantu Anda mencapai hasil yang diinginkan:
Buat file skrip baru (ganti
create_dir.sh
dengan nama skrip yang Anda inginkan):Script akan dibuat di direktori home pengguna
Tambahkan beberapa perintah yang hanya dapat dijalankan oleh
root
atausudo
pengguna seperti membuat folder di tingkat direktori root:Catatan: Jangan tambahkan
sudo
perintah ini. Simpan dan keluar (menggunakan:wq!
)Tetapkan eksekusi untuk menggunakan itu:
Buat perubahan agar skrip ini tidak memerlukan kata sandi.
Buka
sudoers
file:Tambahkan baris berikut di akhir:
Ganti
ahmad
dengan apa pun nama pengguna Anda. Pastikan juga ini adalah baris terakhir. Simpan dan keluar.Sekarang ketika menjalankan perintah tambahkan
sudo
sebelum itu seperti:Ini akan menjalankan perintah di dalam file skrip tanpa meminta kata sandi.
Ikuti langkah-langkah mudah yang disebutkan di sini http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
sumber
sudo
darisudo chmod u+x create_dir.sh
tidak perlu karena pengguna memiliki (mungkin) kepemilikan atas dir rumahnya. Karena pengguna dapat menuliscreate_dir.sh
, Anda telah secara efektif memberikan shell root gratis kepada pengguna tersebut.chmod
tidak perlu, karena Anda mengandalkansudo
untuk meningkatkan hak istimewa Anda.Saya pikir sintaks Anda salah. Setidaknya saya menggunakan yang berikut ini yang berfungsi untuk saya:
sumber
(ALL)
ini opsional, meninggalkannya memiliki efek yang persis sama. Memiliki(root)
akan lebih baik, tetapi ketidakhadirannya tidak menjelaskan masalahnya.Jika Anda ingin menghindari penggunaan sudo atau mengubah file konfigurasi sudoers, Anda dapat menggunakan:
Ini akan membuat perintah dijalankan sebagai root tanpa perlu sudo.
sumber
Jika Anda memiliki distro seperti Manjaro, Anda harus berurusan dengan file yang mengesampingkan definisi / etc / sudoers, Anda dapat menghapusnya atau bekerja secara langsung dengan file itu untuk menambahkan konfigurasi baru Anda.
File ini adalah:
Cara HANYA untuk melihatnya di bawah hak akses root, Anda tidak dapat mendaftar direktori ini tanpa itu, file ini spesifik Manjaro, Anda mungkin menemukan konfigurasi ini dengan nama lain, tetapi dalam direktori yang sama.
Dalam file pilihan Anda, Anda dapat menambahkan baris berikut untuk mendapatkan konfigurasi yang Anda inginkan:
Abaikan otentikasi untuk grup
atau Abaikan otentikasi untuk pengguna
atau Abaikan otentikasi yang dapat dieksekusi untuk pengguna tertentu
CATATAN CEPAT: Anda membuka pintu untuk menggunakan SUDO tanpa otentikasi, itu berarti Anda dapat menjalankan semuanya memodifikasi segala sesuatu dari sistem Anda, menggunakannya dengan responsabilitas.
sumber
Pastikan sudo tidak alias. Jalankan seperti ini
Misalnya shell alias seperti ini:
dapat menyebabkan perilaku ini.
sumber
sudoers
oleh sudo. Atau apakah Anda berbicara tentang pengalihansudo
ke sesuatu yang selalu mencetak pesan kesalahan ini untuk mengambil kata sandi? Itu tidak mungkin terjadi di sini ...alias sudo="sudo env PATH=$PATH"
di saya~/.bashrc
. Daripada hanya menyelesaikannya untuk diri saya sendiri dan secara membabi buta hanya tentang bisnis saya, saya mengirimkan jawaban saya sebagai solusi yang mungkin untuk siapa pun yang datang di thread ini.Saat Anda menjalankan skrip, Anda harus menjalankannya sebagai
sudo /path/to/my/script
.Sunting: Berdasarkan komentar Anda ke jawaban lain, Anda ingin menjalankan ini dari ikon. Anda perlu membuat
.desktop
file yang mengeksekusi program Anda dengan sudo, seperti pada terminal.Anda juga dapat mempertimbangkan
gtk-sudo
untuk menggunakan prompt kata sandi visual.Anda mungkin harus mempertimbangkan gagasan bahwa Anda seharusnya tidak menjalankan sesuatu sebagai root dan mengubah sistem lebih jauh sehingga Anda tidak memerlukan izin root sama sekali akan menjadi cara yang lebih baik.
sumber
Ini menyelesaikan masalah bagi saya (juga mencoba beberapa jawaban lain, yang mungkin membantu):
Script yang saya panggil ada di
/usr/bin
, direktori yang saya tidak punya izin menulis (meskipun saya biasanya dapat membaca file apa pun di sana). Script chmodded + x (permisison yang dapat dieksekusi), tetapi masih tidak berfungsi. Memindahkan file ini ke jalur di direktori home saya, alih-alih/usr/bin
, saya akhirnya bisa memanggilnya dengan sudo tanpa memasukkan kata sandi.Juga sesuatu yang saya ragukan (mengklarifikasi untuk pembaca masa depan): Anda perlu menjalankan skrip Anda sebagai sudo. Ketik
sudo
saat memanggil skrip. Jangan gunakansudo
untuk perintah di dalam skrip Anda yang sebenarnya membutuhkan root (mengubah backlight keyboard dalam kasus saya). Mungkin itu juga berhasil, tetapi Anda tidak perlu, dan sepertinya solusi yang lebih baik untuk tidak melakukannya.sumber
sudo
bagian dalam skrip sangat baik asalkan Anda memiliki hak yang sesuai (ditetapkansudoers
) untuk menjalankan perintah yang dipermasalahkan tanpa kata sandi. Itu membuat segalanya sedikit lebih aman.Kemungkinan lain mungkin untuk menginstal, mengkonfigurasi, lalu menggunakan perintah super untuk menjalankan skrip Anda sebagai
Jika Anda ingin menjalankan beberapa biner yang dapat dieksekusi (mis. Anda telah dikompilasi ke dalam biner ELF dari beberapa kode sumber C) -yang bukan skrip- sebagai root, Anda dapat mempertimbangkan membuatnya setuid (dan sebenarnya
/bin/login
,/usr/bin/sudo
dan/bin/su
dansuper
semuanya menggunakan teknik itu ). Namun, berhati-hatilah, Anda bisa membuka lubang keamanan besar .Secara konkret, program Anda harus diberi kode paranoik (jadi periksalah semua argumen dan lingkungan dan kondisi di luar sebelum "bertindak", dengan asumsi pengguna yang berpotensi memusuhi), maka Anda dapat menggunakan seteuid (2) dan teman-teman (lihat juga setreuid (2) ) dengan cermat (lihat juga kemampuan (7) & kredensial (7) & laksanakan (2) ...)
Anda akan menggunakan
chmod u+s
(baca chmod (1) ) saat memasang biner seperti itu.Tapi berhati-hatilah .
Baca banyak hal tentang setuid , termasuk Pemrograman Linux Lanjut , sebelum mengkode hal semacam itu.
Perhatikan bahwa sebuah skrip, atau hal apa pun yang terkait dengan shebang , tidak dapat disetuid. Tapi Anda bisa membuat kode (dalam C) sebuah set biner-biner kecil yang membungkusnya.
sumber
Idealnya jika Anda mengkustomisasi perintah apa yang dapat dijalankan melalui
sudo
Anda harus membuat perubahan ini dalam file terpisah di bawah/etc/sudoers.d/
bukannya mengeditsudoers
file secara langsung. Anda juga harus selalu menggunakanvisudo
untuk mengedit file. Anda harus PERNAH memberikanNOPASSWD
padaALL
perintah.Contoh:
sudo visudo -f /etc/sudoers.d/mynotriskycommand
Masukkan izin pemberian baris Anda:
myuser ALL= NOPASSWD: /path/to/your/program
Kemudian simpan dan keluar dan
visudo
akan memperingatkan Anda jika Anda memiliki kesalahan sintaksis.Anda dapat berlari
sudo -l
untuk melihat izin yang telah diberikan oleh pengguna Anda, jika adaNOPASSWD
perintah khusus pengguna yang muncul SEBELUM%groupyouarein ALL=(ALL) ALL
perintah apa pun dalam output, Anda akan dimintai kata sandi.Jika Anda menemukan diri Anda membuat banyak file sudoers.d ini, maka mungkin Anda ingin membuatnya bernama per pengguna sehingga lebih mudah untuk divisualisasikan. Perlu diingat bahwa urutan NAMA FILE dan ATURAN dalam file sangat penting, yang TERAKHIR yang dimuat menang, apakah LEBIH atau KURANG permisif daripada entri sebelumnya.
Coba jalankan
printf '%s\n' {{0..99},{A-Z},{a-z}} | sort
danprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort
untuk melihat apakah bahasa Anda saat ini mencetakAaBbCc
dll atauABC
kemudianabc
untuk menentukan apa awalan huruf "terakhir" terbaik yang akan digunakan.sumber
Agar setiap pengguna dapat menjalankan program sebagai sudo tanpa meminta kata sandi, Anda dapat menambahkan baris berikut
%sudo ALL=(root) NOPASSWD: /path/to/your/program
di
/etc/sudoers
Perhatikan bahwa % sudo berhasil.
sumber
Berikut ini adalah untuk kasus di mana Anda ingin menjalankan perintah tanpa kata sandi hanya jika memiliki serangkaian opsi tertentu, di mana bagian dari opsi adalah variabel . AFAIK tidak mungkin menggunakan variabel atau rentang nilai dalam deklarasi sudoers, yaitu Anda dapat mengizinkan akses secara eksplisit ke
command option1
tetapi tidakcommand option2
menggunakan:user_name ALL=(root) /usr/bin/command option1
tetapi jika strukturnya
command option1 value1
, di manavalue1
bisa bervariasi, Anda harus memiliki garis sudoer eksplisit untuk setiap nilai yang mungkinvalue1
. Script shell menyediakan jalan keluar.Jawaban ini terinspirasi oleh jawaban M. Ahmad Zafar dan memperbaiki masalah keamanan di sana.
sudo
./usr/local/bin/
), Buat file milik root (mis.chown root:wheel /usr/local/bin/script_name
) Tanpa akses tulis untuk orang lain (mischmod 755 /usr/local/bin/script_name
.).Tambahkan pengecualian ke sudoers menggunakan visudo:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
.Jalankan skrip Anda
sudo script_name
.Sebagai contoh, saya ingin mengubah waktu tidur tampilan pada macOS. Ini dilakukan dengan menggunakan:
sudo pmset displaysleep time_in_minutes
Saya menganggap mengubah batas waktu tidur sebagai tindakan tidak bersalah yang tidak membenarkan kerumitan pengetikan kata sandi, tetapi
pmset
dapat melakukan banyak hal dan saya ingin menyimpan hal-hal lain ini di belakang kata sandi sudo.Jadi saya punya skrip berikut di
/usr/local/bin/ds
:Di akhir
sudoers
file saya memiliki baris berikut:user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
Untuk menetapkan batas waktu 3 menit, saya menjalankan skrip saya dari akun pengguna biasa
user_name
:sudo ds 3
PS Sebagian besar skrip saya adalah validasi input, yang tidak wajib, jadi yang berikut ini juga berfungsi:
sumber