Bir bash betiğinin bir kısmını farklı bir kullanıcı olarak çalıştır


33

Bir betiğin bir kısmını farklı (root olmayan) bir kullanıcı olarak çalıştırmanın bir yolu var mı? Eğer yardımcı olursa, farklı bir kullanıcı olarak çalıştırılacak olan bölüm betiğin sonunda ortaya çıkar.

Düzenleme:
İşletim Sistemi -> Ubuntu 9.04


Yanıtlar:


42

Koddaki sudo komutunu kullanın.

Şeklinde:

sudo -u username command

sudo komutu çalıştırır komutu kullanıcı olarak kullanıcı adı .

Senaryo root olarak çalıştırılıyorsa, şifre isteyeceğini sanmıyorum. Aksi halde, bu makalede sudo'nun bir komut satırında parola ile nasıl kullanılacağı anlatılmaktadır ? , ve bu makalede sudo şifresiz nasıl kullanılacağı anlatılmaktadır ?


5
Bu güzel ve kolaydır, ancak bunu bir seferde bir tane yerine bir grup komut için yapmanın bir yolu var mı?
Andrew,

bir bash betiği yazabilir, çalıştırılabilir hale getirebilir chmod +x script.shve sonra sadecesudo -u username script.sh
NiCU

@Andrew Bunu kendim merak ediyordum ve aşağıdakiler benim için işe yaradı: sudo -u ic sh -c 'cmd1 && cmd2'
Karussell

Ayrıca ikullanıcının ortamını elde etmek istiyorsanız bu seçeneği de ekleyin
neoDev

6

Bu cevap iyidir, ancak sunucu hatası önerisi biraz tehlikelidir - herkesin kök olarak herhangi bir şeyi çalıştırmasına izin verir! Bu yüzden burada gönderiyorum çünkü yorumu formatlayamıyorum.

İhtiyacınız olan izinleri olabildiğince tam olarak verebilmek için visudo kullanmanızı tavsiye ederim. Şunun visudogibi bir satır yazın ve ekleyin:

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2

Aynı şeyi birçok ana bilgisayarda çalıştırmanız gerekiyorsa, şunu açabilirsiniz:

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2

Ama ben de * kullanmazdım *:

username ALL=(ALL) NOPASSWD: ALL

veya kullanıcı adı hostname = ALL

Sudoer adam sayfası kanlı detaylarını çok


Yalnızca belirli bir kullanıcı tarafından kullanılabilen bir komut için çalışır mı?
Manish Mathai

Komutu yalnızca belirli kullanıcıların çalıştırabileceğini belirtebilirsiniz (yukarıdaki örneklerde, komutu çalıştırabilecek kullanıcı usernameadıyla değiştirin ). Çalıştırmak istediğiniz yürütülebilir dosya yalnızca belirli bir kullanıcı tarafından çalıştırılabilirse, bu da iyidir - bu kullanıcı adını sudo -u username commandlinekomut dosyasının satırına iletin.
James Polley

@Manish. Evet. Sudoers dosyasının söylediği şey: "Bu ana bilgisayardaki bu kullanıcı adının bir şifre sağlamak zorunda kalmadan
command1

6

# I = beğen:

#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"

echo 1: $USER

#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_

echo 3: $USER

# ./koşmak

1: root
2: nobody
3: root

10
Açıklayıcı bir metin ekler misiniz?
Kazark

4

Sonarqube için:

sudo -u sonar /usr/bin/sonar start

sonarkomutu çalıştırmak için kullanılan kullanıcının adı nerede/usr/bin/sonar start


2

bundan emin değilsiniz, ancak SADECE bu betiğin sonunun farklı bir kullanıcı olarak çalışmasını istiyorsanız su someuser, betiğin sonundan önce ekleyebilirsiniz .

Bir şey mi kaçırıyorum?

Umarım yardımcı olur,

Saygılarımızla


1
Bence bu en uygun cevap, bazı varsayılan Linux kurulumlarında varsayılan olarak kurulmamış olan sudo'yu öneren diğer tüm cevaplar.
Tim

1

Bu şekilde, bir betiğin sonu farklı kullanıcı (root) tarafından yürütülür. Lütfen $[LINENO+2]ve notlarını not edin exit $?. Bunların betiğin sonunu sadece bir kez çalıştırmak ve sudoçağrının çıkış kodunu korumak için yapılması gerekir .

#!/bin/bash                                                                                                                                                                                                                                  
echo $USER                                                                                                                                                                                                                                      

# pipe the rest of this script via a sudo call                                                                                                                                                                                                                                         
tail -n +$[LINENO+2] $0 | exec sudo bash                                                                                                                                                                                                     
exit $?                                                                                                                                                                                                                                     
echo $USER
exit 1
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.