it-swarm-tr.com

Shell komut dosyasını farklı bir kullanıcı olarak çalıştırma

Shell komut dosyasını farklı bir kullanıcı olarak çalıştırmanın iyi bir yolu nedir? Debian aşındırma kullanıyorum ve hangi kullanıcının kimliğine bürünmek istediğimi biliyorum.

Eğer manuel olarak yapsaydım, yapardım:

su postgres
./backup_db.sh /tmp/test
exit

İşlemi otomatikleştirmek istediğim için, backup_db.sh dosyasını postgres olarak çalıştırmanın bir yoluna ihtiyacım var (ortamı devralma, vb.)

Teşekkürler!

44
Wadih M.

Komut dosyanızı başka bir kullanıcı olarak tek komut olarak çalıştırmak için, şunu çalıştırın:

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

Bu tür komut dosyalarında her zaman tam yollar kullanmanızı öneririm - her zaman doğru dizinde olacağınızı garanti edemezsiniz (belki birisi sizin için homediri değiştirdi, kim bilir). Ayrıca her zaman su (/ bin/su) için tam yolu kullanıyorum çünkü paranoyakım. Birisi yolunuzu düzenleyebilir ve su'nun güvenliği ihlal edilmiş bir sürümünü kullanmanıza neden olabilir.

69
baumgart

Çalıştırılacak hedef kullanıcı tanımlanmış nologin shelll değerine sahipse, Kabuğu belirtmek için -s seçeneğini kullanabilirsiniz:

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

Aşağıdaki soruya bakın: komut dosyasını nologin Kabuğu olan kullanıcı olarak çalıştır

23
Basil A

Bunu bir programda otomatikleştirmek için kullanıcının crontab'ına koyabilirsiniz. Cron işleri tam ortamı elde edemez, ancak ihtiyacınız olan tüm env değişkenlerini betiğin kendisine koymak daha iyi olabilir.

Kullanıcının crontab'ını düzenlemek için:

Sudo crontab -u postgres -e
9
Kyle Brandt

Bu, Kabuk komut dosyalarında bilgilendirici bir okuma - setuid olmalıdır

su ile "- username "bağımsız değişken dizisi, kullanıcının kullanıcıyla aynı ortamı vermesi için bir giriş Kabuğu yapar. Genellikle, komut dosyanızı ev ortamınızla farklı bir girişten hızlı bir şekilde yürütmek için kullanılır.

3
nik

Su man sayfasını deneyin:

su -c script_run_as_postgres.sh - postgres

Uyarıda, Sudo'yu şifresiz postgres olarak çalıştırmak için izin verebilirsiniz. Gerçi/etc/sudoers içinde bazı kurulumlar gerekir.

2
pjz

Başkaları tarafından yayınlanan "su -c ..." yöntemi iyi bir yöntemdir. Otomasyon için, komut dosyasını yürütmek için ihtiyacınız olan kullanıcının crontab'ına ekleyebilirsiniz.

2
Geoff Fritz

Kullanıcının zaten Sudo'ya bir girişi varsa ve üstbilginin şifresini bilmiyorsanız şunları deneyebilirsiniz: Bu, /data/my-db/pgsql/9.6/data adresinde başlatılan postgresleri yeniden başlatır.

Sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"
1
smishra

Ayrıca kullanabilirsiniz:

Sudo -u postgres script_run_as_postgres.sh

0
Xandersoft