Doğru bir web sitesi için bir cron işi nasıl oluşturulur?


0

Web sitemin PHP scriptlerini çalıştırmak için nasıl güvenli ve güvenli bir cron işi yaratabilirim?

Ubuntu 16.04.3 LTS Sunucusu için bir PHP kurulum betiği hazırlıyorum. Komut, dosyaları kurulum paketimden kopyalar /var/www/mysiteve varsayılan Apache web kullanıcısı hesabı için uygun okuma / yazma izinlerini ayarlar www-data;

setfacl -R -m u:www-data:rX /var/www/mysite
setfacl -R -m u:www-data:rwX /var/www/mysite/storage /var/www/mysite/bootstrap/cache
setfacl -dR -m u:www-data:rwX /var/www/mysite/storage /var/www/mysite/bootstrap/cache

Şimdi, kurulum betiğimin son adımı olarak, siteme PHP komutları çağıran cron işleri yüklemeliyim, örneğin, şunun gibi:

php /var/www/mysite/artisan notifications:send

Bazı araştırmalar yaptım ve birçok seçenek ve olası komplikasyonlar buldum, bu yüzden durumumda bir cron işi yaratmanın en doğru ve hatasız yolunun ne olacağından emin değilim.

Özel düşünce ve sorular:

  • Görünüşe göre, belirli bir kullanıcıya ait olmayan ancak arka planda çalışan servislere ait cron işleri kurmak için en iyi yer /etc/cron.d, değil mi? Ayrıca otomatik kurulum işlemi için de güvenli bir seçenek gibi görünüyor çünkü herhangi bir cron config dosyasını kurulum betiğimden değiştirmek zorunda kalmayacağım ancak henüz mevcut değilse yeni bir dosya eklemek zorunda kalıyorum.

  • İşlerimi kök olarak çalıştırmak istemiyorum; web siteleri için iyi bir fikir olmayabilir, değil mi? Bu yüzden özel bir kullanıcıya ihtiyacım olacak. İlk başta düşündüm - hey, zaten www-dataApache sunucusu için ve sitem için gerekli tüm izinlere sahip bir kullanıcı oluşturdum, bu yüzden bunu kullanabilirdim, değil mi? Ancak www-datakullanıcının kabuk komutlarını çalıştırma izninin olmadığını okudum ! Bu yüzden www-data(ki bu iyi bir fikir değil) izinlerini değiştirmek zorunda kalacağım ya da özellikle cron işlerim için yeni bir kullanıcı hesabı oluşturmalıyım mysite-jobs. Ancak, bu kullanıcının varlığını güvenli bir şekilde nasıl kontrol edebilirim ve mevcut değilse, kullanıcıyı kurulum betiğimden oluşturabilir miyim? Ve izinlerini nasıl belirleyebilirim ki cron php /some/commandbu kullanıcı olarak çalışabilsin ama kullanıcının kendisi /homede parolasına sahip değil ve normalde giriş yapamaz mı?

  • Ayrıca, ortam değişkenlerinin işler için otomatik olarak kullanılamadığını okudum cron.d, bu yüzden bunları cron dosyamda belirtmem gerekiyor. Teknik olarak, bu gibi görünebilir, değil mi?

    SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Tahminimce bu, PHP komutlarının önceki noktada otomatik olarak başlatılması sorununu da çözebilir, ancak burada çok fazla izin vermediğimden emin değilim - kullanıcının herhangi bir kabuk komutu yürütmesini istemiyorum veya Bu bin ve sbin dizinlerinden herhangi bir komut ancak php /some/command. Ve bu da beni merak ediyor - sadece bu iş için kullanılacak cron için SHELL ve PATH değişkenlerini belirtmek zorunda kalırsam, o zaman belki kullanmak güvenli olabilir www-data- bu ortam değişkenleri cron işinden sızmaz, değil mi? Ancak www-data"özel" bir hesap olduğu düşünülürse etkili olup olmadıklarından emin değilim .

  • Bir cron işi oluşturduktan sonra /etc/cron.dderhal cron tarafından mı toplanacak yoksa bir şekilde cron'u yeni (veya web sitelerini güncellerken belki de güncellediğim) dosya hakkında mı bilgilendirmeliyim?

Öyleyse, yukarıdakilerin hepsini göz önünde bulundurarak, son cron işi nasıl görünmeli ve php komutlarımı çalıştırmak için minimum izinle kullanıcı hesabını nasıl belirleyebilirim?


Bunu bir sıkıntı olarak mı yoksa her seferinde mi çalıştırmanız gerekiyor?
Journeyman Geek

Yükleme betiği güncellemeleri yayınlamak için birçok kez çalıştırılacak, bu da web sitemin yeni sürümlerinde yeni cron işlerinin eklenebileceği anlamına geliyor.
JustAMartin

Yanıtlar:


2

Fazla düşünmeye gerek yok. Ubuntu kullandığınız için, crontab, cron işinin ( www-data) çalıştırılacağı kimliği alır . Sunucumda (MyBB forumunu çalıştırıyor) şunu ekledim /etc/crontab:

# Run DB backups every morning at 06:00 UTC.
0  6 * * *   www-data /usr/bin/php /var/www/theforum/task.php 4

PATHPHP'nin çalıştırılabilir tam yolunu verirseniz içerikler hakkında endişelenmenize gerek yok .


/etc/crontabOtomatik araçları kullanarak güncelleme ve birleştirme yapmak güvenli olmayabilir; çünkü doğrudan değişiklik yapmanın iyi bir fikir olmadığını okudum ; bu yanıtın altındaki kasperd tarafından yapılan yorumu görün: serverfault.com/a/801261/87638 bu nedenle cron.d , yalnızca yükleme komut dosyası tarafından oluşturulan girişleri oluşturacak bir dosya koyabileceğim bir seçenek seçtim . Ama doğrudan /usr/bin/phpbölüm için teşekkürler - sanırım, doğrudan php yürütme ile www-dataherhangi bir PATH veya SHELL ayarına gerek kalmayacak, değil mi?
JustAMartin
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.