Bagaimana cara menjalankan skrip bash yang memerlukan hak akses root?

15

Saya memiliki baris skrip ini dari ISP saya:

sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Ini berfungsi jika saya menempelkan baris demi baris ke Terminal. Saya ingin membuat file * .command dan menjalankannya dengan mengklik dua kali. Tapi yang saya dapatkan hanyalah bisikan kata sandi dan kemudian kosongkan jendela bash. File "opsi" yang dihasilkan kosong.

Saya mencoba ini:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Saya mendapat:

/ etc / ppp / options: Izin ditolak

Saya pikir saya perlu menggunakan beberapa perintah untuk mendapatkan hak akses root dari dalam bash.

Dmitriy
sumber
Ketika Anda membuat skrip, apakah Anda menjalankannya dengan mengetikkan sudo ./ispscript.command? Juga, skrip bash biasanya memiliki akhiran .sh: ipscript.sh.
Aaron Lake
1
FYI Skrip ini hanya perlu dijalankan sekali. Juga, jika Anda terus menjalankan skrip seperti apa adanya, itu LAMPIRAN >> ke file. File opsi akan terus tumbuh dalam ukuran semakin Anda menjalankannya (skrip). Ini mungkin atau mungkin tidak menyebabkan masalah dengan apa yang pernah membaca file opsi.
dhempler
@ dennis.hempler, terima kasih saya tahu ini. Sebenarnya saya akan sering menjalankan skrip ini. Karena perangkat USB-modem memerlukan file ini kosong untuk beroperasi dengan benar. Jadi sebelum memasukkan modem-USB saya menghapus file dan sebelum menghubungkan ke internet kabel saya menulis opsi-opsi di file.
Dmitriy

Jawaban:

15

Ambil skrip yang Anda buat:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Simpan di direktori home Anda, atau direktori 'scripts' di dalam direktori home Anda, seperti l2tp.sh. Izinkan itu dijalankan (tulis perintah ini di Terminal):

chmod 700 ~/path/to/l2tp.sh

Untuk menjalankan file menggunakan sudo (hak akses root):

Metode # 1. Dalam jenis Terminal:

$ sudo ~/path/to/l2tp.sh

Metode # 2. Buat file run_l2tp.command dengan konten ini:

sudo ~/path/to/l2tp.sh

Izinkan itu dijalankan:

chmod u+x run_l2tp.command

Ketika Anda mengklik dua kali run_l2tp.command dan memasukkan kata sandi file l2tp.sh akan dieksekusi dengan hak akses root.

Beberapa catatan:

  • Pada sistem seperti UNIX, ~ kependekan dari "direktori home saya".
  • Chmod 700 akan membuat file hanya dapat Anda jalankan. Untuk informasi lebih lanjut: lihat halaman Wikipedia ini .
  • mengetikkan 'sudo' sebelum perintah akan menjalankan program menggunakan hak akses root. Hati-hati saat melakukan ini, hal-hal buruk dapat terjadi jika Anda tidak yakin apa yang Anda lakukan.
  • Jelas Anda dapat menghilangkan / path / ke jika Anda menyimpan skrip ini secara langsung di direktori home Anda.
Danau Aaron
sumber
4

Simpan ini:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

ke Desktop Anda dalam file bernama script.sh.

Buka jendela Terminal dan ketik:

sudo bash ~/Desktop/script.sh

Masukkan kata sandi Anda ketika diminta dan semua perintah dalam file akan berjalan dengan hak pengguna super.

Ian C.
sumber
4

Jika untuk tujuan keamanan, Anda tidak ingin pengguna sistem Anda dapat menjalankan skrip, tetapi Anda ingin diminta kata sandi administratif, solusi alternatifnya adalah menyimpan skrip shell dan kemudian menggunakan program Editor AppleScript untuk membuat AppleScript.

AppleScript akan menjadi one-liner, kata do shell script «your script's name here» with administrator privileges. Simpan skrip itu sebagai Aplikasi. Kemudian, ketika Anda mengkliknya, ia akan meminta Anda kata sandi administrator, kemudian jalankan skrip shell dengan hak istimewa administrator.

Jelas, ganti «your script's name here»dengan jalur ke skrip Anda.

Daniel
sumber
2

Masalahnya adalah ketika Anda melakukannya dari baris perintah, apa yang Anda lakukan mulai di bashbawah sudo, dan kemudian mengirim dua perintah berikutnya bash, bukan shell asli. (pertanda bahwa Anda perlu exitdua kali)

Saat Anda melakukannya dalam skrip, bashperintah tidak pernah keluar, jadi dua perintah berikutnya tidak pernah berjalan.

Ini tidak seanggun solusi AppleScript, tetapi jika Anda akan melakukan ini sebagai skrip dari baris perintah, yang setara adalah:

#!/bin/sh --
sudo bash -c 'echo "plugin L2TP.ppp">>/etc/ppp/options' 
sudo bash -c 'echo "l2tpnoipsec">>/etc/ppp/options'

Jika kita tidak memerlukan pengalihan io ( >>bit), kita bisa langsung memanggil perintah melalui sudotanpa perlu sudo sh -ctrik. (dan perhatikan bahwa saya harus mengutip argumen sh -cagar tidak menjalankan echo sebagai root, tetapi file menambahkan sebagai pengguna asli.)

Ini akan berfungsi sebagai .commandfile dari Finder, tetapi akan memunculkan jendela terminal, menanyakan kata sandi Anda, dan jika dimasukkan dengan benar, akan menjalankan perintah. (dengan asumsi Anda belum diautentikasi untuk sudo... jika sudah, itu akan berjalan tanpa diminta)

Joe
sumber