Apache V2 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Apache V2 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Çarşamba, Şubat 17, 2010

pid file /opt/csw/apache2/var/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run



Gecenin bir vakti insan Apache sürümleri, MPM worker , CSW ve SunFreeware repositoryleri gibi derin konularla uğraşınca ve de yorulmuşsa bazen okuyanı güldürecek derecede basit sorunların peşinde helak oluyor. 


"Ockham'ın usturası" önermesi de birazdan anlatacağım bu duruma çok uygun düşüyor sanırım.


Ockham'ın usturası : 


Latincesi "Entia non sunt multiplicanda praeter necessitatem" olarak geçen ; "bir meselenin birden çok açıklaması varsa, ve hepsi de aynı derecede kuvvetli ise, yani bir açıklamayı diğerlerinden üstün tutmak için elle tutulur bir neden yok ise, basit açıklamanın daha faydalı olacağı görüşü"dür.


Neyse, daha fazla saptırmadan konumuza dönelim.


Daha önce Sunfreeware'den alınma Apache 2.2.x paketlerini kullanırken, MPM worker sorunu nedeniyle artık mpm olarak derlenmiş olan ve CSW tabanlı Apache paketini kullanmaya başladık. Ancak daha öncesinde de "Limiting Service Privileges in the Solaris™ 10 Operating System" belgesine dayanarak Apache SMF servisini de 'webservd' hesabı altında kısıtlamış ve çalışır hale getirmiştik.


Ne olduysa zaten bu noktada oldu. Komik ve de gerçek.


Apache servisi normalde 'webservd' hesabı altında açılmalı ve 2-3 prosesten fazlası olmamalıydı. Ancak root, nobody ve webservd olarak 3 farklı hesap altında farklı prosesler görüyorduk. root ile açılan proses 1 no'lu idi ve öldüremiyorduk. Diğer yandan da aşağıdaki hata mesajını almaktaydık.


"pid file /opt/csw/apache2/var/run/httpd.pid overwritten Unclean shutdown of previous Apache run"


Neler düşünmedik ki ? PID dosyasının sahipliğini normal kipte değiştirmeyi, single user mode'da değiştirmeyi , /etc/init altında içinde httpd geçen dosyaları aratmayı vs.vs. o an uykulu kafayla akla gelebilecek envai çeşit (cahil) yöntem denendi ama hiç biri işe yaramadı.


Sonuçta ne mi çıktı ? En basit önerme tabi. CSW paketi hiç de tahmin etmediğimiz şekilde kendi SMF servisini yazmış ve çalıştırmıştı. Ayrıca biz de Apache servisi için SMF yazmış ve çalıştırmıştık. Bizimkini öldürüken aynı zamanda başka bir servisle yarışmaya çalışıyorduk. :) Servislerden birini silince sorun kendiliğinden düzeldi. Artık httpd proseslerini istediğimiz gibi kapatabiliyorduk.

Çarşamba, Kasım 18, 2009

Güvenli Apache kurulumu (1) : Not

Kurulum adımları doğru takip edilmesine rağmen httpd servisi hala "daemon" hesabıyla çalışıyorsa edindiğim deneyimlere göre, /usr/local/apache2/logs altındaki bir dosyanın sahipliği webservd hesabına geçmemiş olabilir.

Farklı zamanlarda yaptığım iki kurulumda aynı sorun ve dosyayı gördüm. Her ikisinde de httpd.pid dosyasının sahibi hala root:root idi. Dosyanın sahibini webservd olarak değiştirerek servisi yeniden başlatınca, Apache servisi olması gerektiği gibi "webservd" hesabı altında çalıştı.


Cuma, Kasım 13, 2009

Güvenli Apache kurulumu (1)

Solaris 10 sunucularımızda Apache 2.2.x sürümlerini çalıştırmak için hazırlık yapıyoruz. Elbette güvenli kurulumun üzerinde yine aynı şekilde güvenli modda çalışan uygulamalar istediğimiz için Apache web server'ın da güvenli kurulumuna dair araştırmalar yapmaya başladık.

Bu ilk kısımda Sun'ın bu konuda yayınlanmış belgelerini referans alarak Apache'nin kısıtlı yetkilerle kontrollü çalıştırılmasına dair bulduklarımı özetlemeye çalışacağım.

Apache'nin SMF servisi olarak nasıl çalıştırılacağını daha önceki bir yazımda açıklamıştım.

Apache SMF dönüşüm

SMF servisi olarak başlattıktan sonra servisin deamon veya root gibi kullanıcı hesapları yerine, kısıtlı yetkilere sahip webservd hesabıyla çalıştırılabilmesi için aşağıdaki komutların takip edilmesi yeterlidir.

# svccfg -s apache2
svc:/network/http:apache2> setprop start/user = astring: webservd
svc:/network/http:apache2> setprop start/group = astring: webservd

Apache servisinin minimum yetki seviyesinde çalıştırılması için gereken ayarlamalar yapılıyor.

svc:/network/http:apache2> setprop start/privileges = astring: basic,!proc_session,!proc_info,!file_link_any,net_privaddr
svc:/network/http:apache2> setprop start/limit_privileges = astring: :default
svc:/network/http:apache2> setprop start/use_profile = boolean: false
svc:/network/http:apache2> setprop start/supp_groups = astring: :default
svc:/network/http:apache2> setprop start/working_directory = astring:
:default
svc:/network/http:apache2> setprop start/project = astring: :default
svc:/network/http:apache2> setprop start/resource_pool = astring: :default
svc:/network/http:apache2> end

Bu noktada servisi yeniden enable etmek gerekiyor.

# svcadm -v enable -s apache2
svc:/network/http:apache2 enabled.

Eğer servis daha önceden çalıştırılmışsa /usr/local/apache2 dizininin sahipliği bin:bin olarak düzenlenmiştir. Bu durumda webservd hesabı log dosyalarını okuyamayacağı için aşağıdaki hata mesajını alabilirsiniz.

# cat /var/svc/log/application-web-apache2:default.log

[ Nov 13 14:46:31 Executing start method ("/usr/local/apache2/bin/apachectl start") ]
(13)Permission denied: httpd: could not open error log file /usr/local/apache2/logs/error_log.

Bu durumda klasör sahipliğini webservd hesap ve grubuna devretmek gerekiyor.

# chown -R webservd:webservd /usr/local/apache2/

Daha sonra sunucuyu yeniden başlattığınızda httpd servisinin yalnızda bu kullanıcı hesabıyla çalıştığını kontrol etmelisiniz.

# ps -ef|grep http|grep -v grep

webservd 714 459 0 15:12:56 ? 0:00 /usr/local/apache2/bin/httpd -k start

# ppriv -S 714

714: /usr/local/apache2/bin/httpd -k start

flags =

E: net_privaddr,proc_exec,proc_fork

I: net_privaddr,proc_exec,proc_fork

P: net_privaddr,proc_exec,proc_fork

L: all

Salı, Eylül 08, 2009

Solaris 10, Apache V2 SMF düzenleme

Projelerden biri için iki adet Solaris 10 (u7) sunucu üzerine medya ile birlikte gelen Apache’nin kurulması gerekiyordu. Kurduk :) Ama daha sonra yazılımcılar en az V2 ile çalışmak istediklerini belirtip V1.3′ten vazgeçtiler.

Herhangi bir yazılımcının istek ve karar değişiklikleri asla bitmeyeceği için bir süre sonra bunu da yeterli görmeyip V2.2 ile çalışmak istediklerini belirttiler.

Solaris medyası ile V2 geldiği için V2.2.12′ yi ancak www.sunfreeware.com’dan bulabildim.

http://www.sunfreeware.com/programlistintel10.html#gcc33

Apache’nin bu sürümü beraberinde bir çok ek paketin de yüklenmesini istiyor. Özellikle prod sunucularına GCC kurmak istemeyenler için libgcc.3-4-6 tavsiye edilmiş.

Kurulumlar tamamlandığında elimizde çalışır halde Apache v2 sunucuları vardı ve yazılımcıların tüm isteklerini karşılıyordu ama bu sefer de yönetim sorunları ortaya çıktı.

Yüklemede kullandığım stream data package anladığım kadarıyla Apache için SMF servisi oluşturmamıştı. Bu durumda ancak ilgili klasörün içinden apachectl’yi elle çalıştırarak hizmeti başlatabiliyorduk.

Aslında bu durum işime de gelmedi değil. Ne kadar zamandır SMF hakkında pratik yapmayı planlıyordum ve bu sayede el alışkanlığımı da geliştirmiş oldum.

Apache V2 için SMF servisi oluşturmanın yolu çok basit.

1- Sun’ın aşağıdaki belgesi oldukça açıklayıcı

http://www.sun.com/bigadmin/features/articles/id_manager_service.html

2- Buradan mevcut XML dosya örneğini alıp üzerinde bazı küçük değişiklikler yaptım ve bahsedildiği gibi bir klasör altına yerleştirdim.

3- Aşağıdaki komutları çalıştırdım ve Voila ! Servis hazırdı.

bash-3.00# svccfg validate apache2.xml
bash-3.00# svccfg import apache2.xml

SMF ile ilgilenenler için açıklayıcı bir forum topiğini de ekte yayınlıyorum.

http://www.unix.com/sun-solaris/32936-solaris-10-add-new-svc.html