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!
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.
Ç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
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
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.
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.
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.
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"
Ayrıca kullanabilirsiniz:
Sudo -u postgres script_run_as_postgres.sh