Koşu komutları olsa Linux üzerinde ayrıcalıklı bir kullanıcı olarak PHP / Perl script

3 Cevap php

Background: Ben, kullanıcıların bir web arayüzü üzerinden FTP hesapları oluşturmak sağlayacak bir şirket için bir komut dosyası yazıyorum. Arka planda, komut dosyası komutları bir demet çalıştırmanız gerekir:

  • Sisteme kullanıcı ekleyin (useradd)
  • Çeşitli dosyaları açmak ve düzenlemek
  • sendmail yoluyla kullanıcıyı posta

ve diğer bir kaç şey ...

Ben temelde bu yapmanın most secure yol arıyorum. Ben ayrıcalıklı bir kullanıcı olarak httpd çalışan, tabii setukimlik yöntemi, sudo yöntemi duydum ve ettik. Herhangi bir komut (kullanıcı adları yani sadece alfanümerik karakterler) kimlikam edilmeden önce elbette girilen veriler üzerinde aklı kontrolleri olacak

Oldukça güvenli olması gerektiği gibi orada popüler komut (örneğin webmin) tarafından kullanılan yöntem nedir?

3 Cevap

Ben web bağlı komut dosyası yazabilirsiniz bir kuyruk kuracak.

Sonra o sıraya okuma bazı ayrıcalıklı süreç var ve uygun önlemleri almak istiyorum. Sen bir cron job ile bir komut satırı komut sürücü, ya da kuyruğunu kontrol eder ve daha sık cron izin verdiğinden daha çalışır PHP biraz cini yazabilirsiniz.

Bu şekilde, ayrıcalıklı çalıştırabilirsiniz sadece kodu küçük işçi script ve gerekli ama tehlikeli ayrıcalıklar kazanmak için web bağlı komut dosyası için herhangi bir yol sağlamak gerekmez.

Bir komut satırı seçeneği kabul eden bir komut dosyası oluşturma, onu doğrular ve yöneticilerin useradd. SADECE bu bir süreç için, bir NOLOGIN direktifi ile sudoers dosyasına HTTPD adlı kullanıcı ekleyin.

Bu şekilde, her zaman root yetkileri ile çalışacak bir cini yazma konusunda endişe, ve komut dosyası da hemen dönecekti yok. Sadece bir setuid kök komut dosyası kullandıysanız (kendi gerçek kullanıcı kimliğini kontrol sürece), aynı sistemdeki diğer kullanıcıların komut exec olabilir.

Ben root olarak httpd çalışan çok kötü bir fikir olduğunu söyleyerek başlayacağız.

Bunu yapmanın tek yolu açık kök yerel bağlantıları kabul yalnızca UI kendi istekleri gönderir gibi bir sunucu çalıştırmak için (- bunu yapmak için safest yolu webserver UI ve efektör arasında tam bir ayrıcalık ayrılık var olduğunu Bunu yapmanın basit bir yolu inetd / xinetd'den üzerinden - Eğer servis sürecini) kuran tüm komplikasyonları ile uğraşmak zorunda değilsiniz demektir.

Ayrıca UI ve efektör arasındaki güven mekanizması çeşit gerekir - paylaşılan bir sır yeterli olacaktır - sistemdeki diğer programlar efektörünü arayamam ki. Meydan okuma bazlı kimlik doğrulama veya asimetrik şifreleme dayanan bir güven sistemi kullanarak artık yerel bağlantı kısıtlama konusunda endişelenmenize gerek demektir.

Son olarak, UI ve efektör iletişim hangi iyi tanımlanmış bir protokol gerekiyor.

Bu sudo kullanarak çok daha karmaşık, ama (örneğin sudo sadece kullanıcılar farklı bir uid olarak belirli dosyaları çalıştırmasına izin verir - dosya doğru program içerdiğini umarım) daha güvenlidir.

O özgün uid kadar yapacak - setuid'dir başka bir programı başlar ise (çoğu durumda) olduğunu ekledi komplikasyon ile sudo gibi aynı sakıncaları pek çoğuna sahiptir.

HTH

C.