Kök ayrıcalıkları gerektiren bir bash betiğini nasıl yürütebilirim?


15

Benim ISS bu komut dosyası satırları var:

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

Terminal'e satır satır yapıştırırsam çalışır. Bir * .command dosyası oluşturmak ve çift tıklatarak çalıştırmak istiyorum. Ama tüm aldığım parola istemi ve sonra bash penceresini boşaltmak. Ortaya çıkan "seçenekler" dosyası boş.

Bunu denedim:

#!/bin/bash

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

Alırım:

/ etc / ppp / options: İzin verilmedi

Bence bash içinden kök ayrıcalıkları almak için bazı komutlar kullanmam gerekiyor.


Komut dosyanızı oluştururken sudo ./ispscript.command yazarak yürüttünüz mü? Ayrıca, bash komut dosyalarının genellikle .sh soneki vardır: ipscript.sh.
Aaron Lake

1
FYI Bu komut dosyasının yalnızca bir kez çalıştırılması gerekir. Ayrıca, komut dosyasını olduğu gibi çalıştırmaya devam ederseniz, dosyaya EK >> eklenir. Seçenekler dosyası ne kadar çok çalıştırırsanız o kadar büyür (script). Bu, seçenekler dosyasını okuduklarında sorunlara neden olabilir veya olmayabilir.
dhempler

@ dennis.hempler, teşekkürler bunu biliyorum. Aslında bu betiği sık sık çalıştıracağım. Çünkü USB modem cihazının düzgün çalışması için bu dosyanın boş olması gerekir. USB modemi takmadan önce dosyayı siliyorum ve kablolu internete bağlanmadan önce bu seçenekleri dosyaya yazıyorum.
Dmitriy

Yanıtlar:


16

Oluşturduğunuz komut dosyasını alın:

#!/bin/bash

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

Ana dizininize veya ana dizininizin içindeki 'komut dosyaları' dizinine l2tp.sh kaydedin. Yürütülmesine izin verin (bu komutu Terminal'e yazın):

chmod 700 ~/path/to/l2tp.sh

Dosyayı sudo (root ayrıcalıkları) kullanarak yürütmek için:

Yöntem 1. Terminal türünde:

$ sudo ~/path/to/l2tp.sh

Yöntem # 2. Bu içeriklerle run_l2tp.command bir dosya oluşturun:

sudo ~/path/to/l2tp.sh

Yürütülmesine izin ver:

chmod u+x run_l2tp.command

Run_l2tp.command öğesini çift tıklatıp parolayı girdiğinizde l2tp.sh dosyası kök ayrıcalıklarıyla yürütülür.

Bazı notlar:

  • UNIX benzeri sistemlerde ~, "ana dizinim" in kısaltmasıdır.
  • Chmod 700 dosyayı sadece sizin için yürütülebilir hale getirecektir. Daha fazla bilgi için: bu Wikipedia sayfasına bakın .
  • komuttan önce 'sudo' yazıldığında program root ayrıcalıklarını kullanarak yürütülür. Bunu yaparken dikkatli olun, ne yaptığınızdan emin değilseniz kötü şeyler olabilir.
  • Bu komut dosyasını doğrudan ana dizininize kaydettiyseniz / path / dizinini atlayabilirsiniz.

4

Bunu kaydet:

#!/bin/bash

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

Masaüstünüze adlı bir dosyada script.sh.

Bir Terminal penceresi açın ve şunu yazın:

sudo bash ~/Desktop/script.sh

İstendiğinde şifrenizi girin; dosyadaki tüm komutlar süper kullanıcı yetkileriyle çalışacaktır.


4

Güvenlik amacıyla, sisteminizin herhangi bir kullanıcısının komut dosyasını çalıştırabilmesini istemiyorsanız, bunun yerine bir yönetici parolası istenmesini istiyorsanız, alternatif bir çözüm kabuk komut dosyasını kaydetmek ve programı kullanmak olacaktır. AppleScript oluşturmak için AppleScript Düzenleyicisi .

AppleScript, tek satırlık bir söz olurdu do shell script «your script's name here» with administrator privileges. Bu komut dosyasını Uygulama olarak kaydedin. Ardından, tıklattığınızda, bir yönetici parolası girmeniz ve ardından kabuk komut dosyasını yönetici ayrıcalıklarıyla çalıştırmanız istenir.

Açıkçası, «your script's name here»betiğinizin yoluyla değiştirin .


2

Sorun komut satırından bunu yaparken, başlangıç ne yaptığınızı olduğunu var bashaltında sudove sonra için önümüzdeki iki komutları göndermek bashdeğil, orijinal kabuk. (işaret exitiki kez yapmanız gerektiğidir )

Bir komut dosyasında yaptığınızda, bashkomut asla çıkmaz, bu nedenle sonraki iki komut hiçbir zaman çalışmaz.

AppleScript çözümü kadar zarif değil, ancak bunu komut satırından bir komut dosyası olarak yapacaksanız, eşdeğer olacaktır:

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

Eğer io yönlendirmesine ( >>bitine) ihtiyacımız yoksa , sadece hile sudogerekmeden komutu doğrudan çağırabiliriz sudo sh -c. (ve sh -cyankıyı root olarak çalıştırmasını engellemek için argümanı alıntılamak zorunda olduğumu , ancak dosyanın orijinal kullanıcı olarak eklendiğini unutmayın.)

Bu olacak bir şekilde çalışmaya .commandFinder dosyanın, ancak şifrenizi soran bir terminal penceresi açmak olacak ve doğru olarak girdiyseniz, komutları çalıştırır. (yakın zamanda kimlik doğrulaması yapmadığınız varsayılarak sudo... varsa, sormadan geçecektir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.