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/mysite
ve 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-data
Apache 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? Ancakwww-data
kullanıcının kabuk komutlarını çalıştırma izninin olmadığını okudum ! Bu yüzdenwww-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ımmysite-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 cronphp /some/command
bu kullanıcı olarak çalışabilsin ama kullanıcının kendisi/home
de 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.d
derhal 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?