Git alma sonrası çağrısında komutlar root olarak nasıl çalıştırılır


12

Kısa bir süre önce bir Upstart hizmeti olarak çalışan bir web uygulaması için bir sunucuda uzak git repo oluşturdum. Uygulama kodunu güncellemek ve sonra başlatma hizmeti yeniden başlatmak için gereken eylemleri tetiklemek için alma sonrası kanca kullanmak istiyorum. Bu benim repo.git / kancalar / alma sonrası dosyam:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

Burada okuduğum bilgilere dayanarak: askUbuntu.com , root olarak yürütmek için uptart komutlarını almanın yolu visudo dosyamı düzenlemektir. İlgili snippet:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service

Ama uzaktan kumandayı ittiğimde, şöyle çıktı alıyorum:

$ git commit -am "test" && git push prod master
[master 59ffccd] test
 1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 544 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Checking out new files on production and restarting app
remote: admin
remote: 
remote: sudo: no tty present and no askpass program specified
remote: Sorry, try again.

Ben doğru kullanıcının post-script (yukarıdaki yankı olarak admin) yürüttüğünü kontrol ettik.

Birisi gitme sonrası alma kanca komut dosyasında durup ardından Başlatma işini başlatmama yardımcı olabilir mi? Python, PHP veya node.js javascript komut dosyaları, upstart komutunu bash'den daha kolay çalıştırabilirlerse de kabul edilebilir (Ben bir bash acemi oldum)

Kimlik günlüğüme baktım ve sahip olduğum şey bu:

Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo:    admin : 3 incorrect password attempts ; TTY=unknown ; PWD=/home/admin/myapp.git ; USER=root ; COMMAND=/s$
Apr 24 19:35:21 myhost01 sudo: unable to execute /usr/sbin/sendmail: No such file or directory
Apr 24 19:35:21  myhost01 sudo: pam_unix(sudo:auth): conversation failed

NOPASSWD'den sonra kolon yanlış görünüyor. Ayrıca, günlükleri kontrol ettiniz mi? "/var/log/auth.log"
Elliott Frisch

Yanıtlar:


6

Sudoers dosyanızdaki komutları virgül kullanarak ayırmanız gerekir. Şu anda, tek bir komut yetkilendiriyorsunuz: /sbin/start myapp-service /sbin/stop myapp-service.

Yazman gerek admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service, /sbin/stop myapp-service.


Bahşiş için teşekkürler. Bunu bugün daha sonra deneyeceğim. Eğer işe yararsa, kendi cevaplarımı değil, cevabınızı kabul edeceğim.
djheru

Teşekkürler işe yaradı. Ben hala birden fazla komut yetkilendirme yerine ayrı komut dosyası yolu ile gidiyorum düşünüyorum.
djheru

5

Tamam, anladım. Yalnızca root olarak çalıştırmak istediğim komutları içeren ayrı bir betik oluşturmak zorunda kaldım.

#!/bin/bash
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

Sonra, alma sonrası komut dosyasında:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
set -x
echo "Checking out new files on production and restarting app"
echo $USER
git checkout -f
sudo /home/admin/restart-myapp

Ve son olarak benim visudo'mda:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL) NOPASSWD: /home/admin/restart-myapp

Umarım bu başka birine yardımcı olur


Eminim bunu bir gün yararlı bulacağım
jbo5112

1

Ben /etc/sudoers.d/root_groupsadece bir satır var bir dosya var %root ALL=(ALL) NOPASSWD: ALLve ben onları sudoparola olmadan kullanmak için grup köküne hesap ekleyin .

Eminim dosya izinleri için kullanıcı kökleri grubunda "root" olduğunu düşünmeyen güvenlik etkileri vardır, ancak endişe ediyorsanız farklı bir grup kullanılabilir. Satırı değiştirin %my_new_group ALL=(ALL) NOPASSWD: ALLve ilgili hesapları my_new_group öğesine ekleyin.


Teşekkür ederim, ama ben bir şifre olmadan çalıştırılabilir tek komutları uptart stop ve komut dosyası çağrıları başlatmak için ayarlamaya çalışıyorum.
djheru
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.