it-swarm-id.com

Bagaimana menjalankan program tertentu sebagai root tanpa kata sandi?

Saya perlu menjalankan sesuatu sebagai Sudo tanpa kata sandi, jadi saya menggunakan visudo dan menambahkan ini ke file sudoers saya:

MYUSERNAME ALL = NOPASSWD: /path/to/my/program

Lalu saya mencobanya:

$ Sudo /path/to/my/program
[Sudo] password for MYUSERNAME: 

Mengapa meminta kata sandi? Bagaimana saya bisa menjalankan/menggunakan perintah sebagai root dengan pengguna non-root, tanpa meminta kata sandi?

175
LanceBaynes

Anda memiliki entri lain di file sudoers , biasanya terletak di /etc/sudoers, yang juga cocok dengan pengguna Anda. Aturan NOPASSWD harus sesuai dengan aturan tersebut agar dapat diutamakan.

Setelah melakukan itu, Sudo akan meminta kata sandi secara normal untuk semua perintah kecuali /path/to/my/program, yang akan selalu Anda jalankan tanpa meminta kata sandi Anda.

97
Warren Young

Jika ada beberapa entri yang cocok di /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.

myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program

Perhatikan penggunaan (root), untuk memungkinkan program dijalankan sebagai root tetapi tidak sebagai pengguna lain. (Jangan memberikan izin lebih dari minimum yang diperlukan 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 istimewa yang ditingkatkan berisiko, Anda harus mulai dari lingkungan yang bersih (setelah Shell dimulai, sudah terlambat (lihat Izinkan setuid pada skrip Shell ), jadi Anda perlu Sudo untuk mengurusnya). Pastikan Anda memiliki Defaults env_reset di /etc/sudoers atau bahwa opsi ini adalah waktu kompilasi default (Sudo sudo -V | grep env harus menyertakan Reset the environment to a default set of variables).

[~ # ~] peringatan [~ # ~] : Jawaban ini dianggap tidak aman. Lihat komentar di bawah

Solusi Lengkap: Langkah-langkah berikut akan membantu Anda mencapai hasil yang diinginkan:

  1. Buat file skrip baru (ganti create_dir.sh dengan nama skrip yang Anda inginkan):

    vim ~/create_dir.sh
    

    Script akan dibuat di direktori home pengguna

  2. Tambahkan beberapa perintah yang hanya dapat dijalankan oleh pengguna root atau Sudo seperti membuat folder di tingkat direktori root:

    mkdir /abc
    

    Catatan: Jangan tambahkan Sudo ke perintah ini. Simpan dan keluar (menggunakan :wq!)

  3. Tetapkan eksekusi untuk menggunakan itu:

    Sudo chmod u+x create_dir.sh
    
  4. Buat perubahan agar skrip ini tidak memerlukan kata sandi.

    1. Buka file sudoers:

      Sudo visudo -f /etc/sudoers
      
    2. Tambahkan baris berikut di akhir:

      ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
      

      Ganti ahmad dengan apa pun nama pengguna Anda. Juga pastikan ini adalah baris terakhir. Simpan dan keluar.

  5. Sekarang ketika menjalankan perintah tambahkan Sudo sebelum seperti:

    Sudo ./create_dir.sh
    

    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/

24
M. Ahmad Zafar

Saya pikir sintaks Anda salah. Setidaknya saya menggunakan yang berikut ini yang berfungsi untuk saya:

myusername ALL=(ALL) NOPASSWD: /path/to/executable
12
musiKk

Jika Anda ingin menghindari harus menggunakan Sudo atau harus mengubah file konfigurasi sudoers, Anda dapat menggunakan:

Sudo chown root:root path/to/command/COMMAND_NAME
Sudo chmod 4775 path/to/command/COMMAND_NAME

Ini akan membuat perintah dijalankan sebagai root tanpa perlu Sudo.

6
linuxgnuru

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:

Sudo cat /etc/sudoers.d/10-installer

Cara HANYA untuk melihatnya di bawah hak akses root, Anda tidak dapat mendaftar direktori ini tanpa itu, file ini spesifik Manjaro, Anda dapat 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

%group ALL=(ALL) NOPASSWD: ALL

atau Abaikan otentikasi untuk pengguna

youruser ALL=(ALL) NOPASSWD: ALL

atau Abaikan otentikasi yang dapat dieksekusi untuk pengguna tertentu

youruser ALL=(ALL) NOPASSWD: /path/to/executable

CATATAN CEPAT: Anda membuka pintu untuk menggunakan Sudo tanpa autentikasi, itu berarti Anda dapat menjalankan semuanya memodifikasi segala sesuatu dari sistem Anda, menggunakannya dengan responsabilitas.

5
Lyoneel

Pastikan Sudo tidak alias. Jalankan seperti ini

/usr/bin/Sudo /path/to/my/program

Misalnya alias Shell seperti ini:

alias Sudo="Sudo env PATH=$PATH"

dapat menyebabkan perilaku ini.

4
Sepero

Ini memecahkan masalah bagi saya (juga mencoba beberapa jawaban lain, yang mungkin membantu):

Skrip yang saya panggil ada di /usr/bin, direktori tempat saya tidak memiliki 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, bukan /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 ketika menelepon skrip. Jangan gunakan Sudo 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.

2
Luc

Saat Anda menjalankan skrip, Anda harus menjalankannya sebagai Sudo /path/to/my/script.

Edit: Berdasarkan komentar Anda ke jawaban lain, Anda ingin menjalankan ini dari sebuah ikon. Anda harus membuat .desktop file yang menjalankan program Anda dengan Sudo, seperti pada terminal.

Anda juga dapat mempertimbangkan untuk menggunakan gtk-Sudo untuk kata sandi visual Prompt.

Anda mungkin harus mempertimbangkan gagasan bahwa Anda seharusnya tidak menjalankan sesuatu sebagai root dan bahwa mengubah sistem lebih jauh sehingga Anda tidak memerlukan izin root sama sekali akan menjadi cara yang lebih baik.

2
Caleb

Kemungkinan lain adalah menginstal, mengkonfigurasi, lalu menggunakan perintah super untuk menjalankan skrip Anda

super /path/to/your/script

Jika Anda ingin menjalankan beberapa biner executable (mis. Anda telah mengkompilasi ke ELF biner dari beberapa kode sumber C) -yang adalah tidak skrip- sebagai root, Anda mungkin mempertimbangkan untuk membuatnya setuid (dan sebenarnya /bin/login, /usr/bin/Sudo dan /bin/su dan super semuanya menggunakan teknik itu). Namun, berhati-hatilah, Anda dapat membuka lubang keamanan yang sangat besar .

Secara konkret, program Anda harus diberi kode paranoik (jadi periksa 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 hati-hati (lihat juga kemampuan (7) & kredensial (7) & execve (2) ...)

Anda akan menggunakan chmod u+s (baca chmod (1) ) saat memasang biner seperti itu.

Tapi sangat berhati-hati .

Baca banyak hal tentang setuid, termasuk Advanced Linux Programming , sebelum mengkode hal semacam itu.

Perhatikan bahwa skrip, atau hal Shebang - ed apa pun, tidak dapat disetuid. Tapi Anda bisa membuat kode (dalam C) sebuah set biner-biner kecil yang membungkusnya.

1

Idealnya jika Anda mengkustomisasi perintah apa yang dapat dijalankan melalui Sudo Anda harus membuat perubahan ini dalam file terpisah di dalam /etc/sudoers.d/ Alih-alih mengedit file sudoers secara langsung. Anda juga harus selalu menggunakan visudo untuk mengedit file. Anda harus TIDAK PERNAH memberikan perintah NOPASSWD pada ALL.

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 sintaks.

Anda dapat menjalankan Sudo -l Untuk melihat izin yang telah diberikan oleh pengguna Anda, jika ada dari pengguna tertentu NOPASSWD perintah muncul SEBELUM perintah %groupyouarein ALL=(ALL) ALL apa pun dalam output Anda akan diminta kata sandi Anda.

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, baik LEBIH atau KURANG permisif daripada entri sebelumnya.

Anda dapat mengontrol urutan nama file dengan menggunakan awalan 00-99 atau aa/bb/cc, meskipun juga perlu diingat bahwa jika Anda memiliki file APA PUN yang tidak memiliki awalan numerik, mereka akan memuat setelah file bernomor, menimpa pengaturan. Ini karena tergantung pada pengaturan bahasa Anda, "pengurutan leksikal" Shell menggunakan nomor pengurutan terlebih dahulu dan kemudian dapat interleave huruf besar dan kecil ketika mengurutkan dalam urutan "naik".

Coba jalankan printf '%s\n' {{0..99},{A-Z},{a-z}} | sort Dan printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort Untuk melihat apakah bahasa Anda saat ini mencetak AaBbCc etc atau ABC lalu abc untuk menentukan apa yang terbaik "terakhir "Awalan huruf yang akan digunakan adalah.

0
dragon788

Bergantian Anda dapat menggunakan python pudo paket.

Instalasi:

user$ Sudo -H pip3 install pudo # you can install using pip2 also

Di bawah ini adalah cuplikan kode untuk menggunakan dalam python otomatisasi untuk menjalankan perintah di bawah privilege root:

user$ python3 # or python2
>>> import pudo
>>> (ret, out) = pudo.run(('ls', '/root')) # or pudo.run('ls /root')
>>> print(ret)
>>> 0
>>> print(out)
>>> b'Desktop\nDownloads\nPictures\nMusic\n'

Di bawah ini adalah contoh cmd untuk menjalankan perintah di bawah privilege root:

user$ pudo ls /root
Desktop  Downloads  Pictures  Music
0

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 buat.

0
ultimatex

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, mis. Anda dapat mengizinkan akses secara eksplisit ke command option1 Tetapi tidak command option2 Menggunakan:

user_name ALL=(root) /usr/bin/command option1

tetapi jika strukturnya adalah command option1 value1, di mana value1 dapat bervariasi, Anda harus memiliki garis sudoer eksplisit untuk setiap nilai yang mungkin dari value1. Script shell menyediakan jalan keluar.

Jawaban ini terinspirasi oleh jawaban M. Ahmad Zafar dan memperbaiki masalah keamanan di sana.

  1. Buat skrip Shell tempat Anda memanggil perintah tanpa Sudo.
  2. Simpan skrip di folder istimewa root (mis. /usr/local/bin/), Buat file itu milik root (mis. chown root:wheel /usr/local/bin/script_name) Tanpa akses tulis untuk orang lain (mis. chmod 755 /usr/local/bin/script_name).
  3. Tambahkan pengecualian ke sudoers menggunakan visudo:

    user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name.

  4. 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:

#!/bin/bash
if [ $# -eq 0 ]; then
        echo 'To set displaysleep time, run "Sudo ds [sleep_time_in_minutes]"'
else
        if [[ $1 =~ ^([0-9]|[1-9][0-9]|1[0-7][0-9]|180)$ ]]; then
                pmset displaysleep $1 
        else
                echo 'Time must be 0..180, where 0 = never, 1..180 = number of minutes'
        fi
fi

Pada akhir file sudoers 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:

#!/bin/bash
pmset displaysleep $1 
0
Koit Saarevet