Bir kabuk betiğini farklı bir kullanıcı olarak çalıştırın


42

Bir kabuk betiğini farklı bir kullanıcı olarak çalıştırmanın iyi bir yolu var. Debian asiti kullanıyorum ve hangi kullanıcının kimliğine bürünmek istediğimi biliyorum.

Manuel olarak yapıyor olsaydım, yapardım:

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

Süreci otomatikleştirmek istediğimden, backup_db.sh dosyasını postgres olarak çalıştırma yoluna ihtiyacım var (çevreyi miras, vb.)

Teşekkürler!

Yanıtlar:


67

Komut dosyanızı tek bir komut olarak başka bir kullanıcı olarak çalıştırmak için aşağıdakileri ç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

Her zaman bu gibi komut dosyalarında tam yol kullanmanızı öneririm - su verirken her zaman doğru dizinde olacağınızı garanti edemezsiniz (belki birileri sizin tarafınızdan homedir değiştirdi, kim bilir). Paranoyak olduğum için her zaman su (/ bin / su) için tam yolu kullanırım. Birisi yolunuzu düzenleyebilir ve güvenli bir su sürümü kullanmanıza neden olabilir.


Her zaman şifre girmemi ister mi? Bunu nasıl başarabilirim?
zjffdu

2
Komutu root olmayan bir kullanıcı olarak çalıştırıyorsanız, her zaman bir şifre girmenizi ister. Paroladan kaçınmak istiyorsanız, sudo'yu buna izin verecek şekilde yapılandırabilirsiniz. NASIL - sudo'yu bir kullanıcının su çalıştırmasına izin verecek şekilde yapılandırmak, onların herhangi bir kullanıcı olmasını sağlar. Komutunuz için bir komut dosyası oluşturmanızı, komut dosyası izinlerini 700 olarak ayarlamanızı ve kök tarafından sahiplenmenizi ve ardından kullanıcının bu tek komut dosyasını çalıştırmasına izin verecek şekilde sudo yapılandırmasını öneririm.
baumgart

Bence - bu cevap OP için işe yarayabilirken - tamamen doğru değil. Bildiğim kadarıyla, her ikisini -(veya --login) birlikte --command, -ckullanmak aslında bir oturum açma oturumu başlatmıyor, çünkü -cher zaman oturum açma olmayan bir kabuğu zorlar.
JeanMertz

1
Not: taşınabilirlik için - postgress, komutun sonunda görünmelidir. Man sayfasından:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
jonny


9

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

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

sudo crontab -u postgres -e

Lütfen daha fazla açıklayabilir misiniz?
saravanakumar

3

Bu, bilgilendirici bir okuma olmalıdır - kabuk betiklerinde setuid

Su " - username" argüman dizisi ile çalıştırılırsa , kullanıcının kullanıcıyla aynı ortamı vermesi için bir giriş kabuğu yapılır. Genellikle, komut dosyanızı farklı bir oturum açma işleminden ev ortamınızla hızlı bir şekilde yürütmek için kullanılır.


Bir dizi işlem yapmanız gerekirse, bu yararlı olabilir. Ancak, çoğu sistem hizmeti hesabının geçerli ana yollara ve mermilere sahip olmaması gerektiğini unutmayın.
Dan Carley

2

Su sayfasını deneyin:

su -c script_run_as_postgres.sh - posta kayıtları

Uyarı olarak, sadece bu komutu şifre olmadan postgres olarak çalıştırmanıza izin vermek için sudo kullanabilirsiniz. Yine de, / etc / sudoers içinde bazı kurulumlar gerekiyor.


2

Başkalarının yayınladığı "su -c ..." yöntemi iyi bir yöntemdir. Otomasyon için, komut dosyasını, çalıştırması gereken kullanıcının crontab'ına ekleyebilirsiniz.


1

Eğer kullanıcı zaten bir sudo girişi yaptıysa ve superuser'in şifresini bilmiyorsanız, aşağıdakileri deneyebilirsiniz: Bu, /data/my-db/pgsql/9.6/data adresinde başlatılan posta kayıtlarını 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

Ayrıca kullanabilirsin:

sudo -u postgres script_run_as_postgres.sh

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.