14 Ağustos 2010 Cumartesi

Pardus 2010 Yaz Stajı 10. Gün

Bugün, Misafir kullanıcı modülüne eğer işlemlerde bir sorun varsa ona göre işlemleri geri alıp geri değer döndürme fonksiyonu hazırladım.

Bu fonksiyon ayrıca sadece geri değer döndürme işine de yarıyor. Aldığı integer tipindeki değere göre işlem yapıyor. Böylece geri döndürülen değer sırasında bir işlem yapma veya diğer işlemlerde büyük esneklik kazandırmış oldu.

İşlemleri geri alma da şu şekilde oluyor. Her adım sırasında yapılan işlemi kontrol ediyor ve bir önceki adımların zıttını uyguluyorum. Mesela eğer klasör oluşturulup bağlama sırasında bir sorun olursa dizini silip, bir hata kodu gönderiyorum. Bu şekilde bütün kodda kontroller var artık.

Ayrıca tüm komutları subprocess ile kullanamamak gibi bir sorunla karşılaştım demiştim. Aslında o öyle değilmiş, o işlemin bitmesini beklemek gerekiyormuş yani

a = subprocess.Popen([..........])

a.wait()

buradaki wait komutu bütün işi halletti. Yani koddaki bütün os.system leri Popen ile hallettim.

Ayrıca sistem politikaları gereği chown, usermod ile değişiklik yapmak yerine kullanıcı oluştururken ev dizinini belirlemenin daha uygun olduğunu düşündük. Bunun için bunları kaldırıp, rastgele isim üreten bir fonksiyon oluşturup kullanıcıya bu dizini vermek gibi bir plan yaptık.

Fakat burada bir güvenlik açığı oluşuyordu. O dizini kullanıcıya verene kadar bir şey olup olmayacağını bilmiyorduk. flock vb. komutları incelememize rağmen bir çözüme ulaşamıyorduk çünkü flock ile kilitlesek bile useradd komutu sırasında bir şeyler olabilirdi ve useradd komutu eğer ev dizini varsa bile 0 değerini geri döndürüyor. Bunun için başka bir çözüm arayışına girdik.

Sonuç olarak yine mktemp ile rasgele dizin oluşturup onun içerisinde home diye bir dizini o kullanıcıya vermek kararına vardık.

Kod ise aşağıdaki şekilde:

"mktemp -td %s.XXXXXX" % username

"mount -t tmpfs -o size=%sm -o mode=711 none %s" % (guest_home_dir_size, home_dir)

useradd -m -d %s/home -g %s %s" % (home_dir, guest_group_name, username)

Burada mode=711 sayesinde useradd ile ev dizinini oluşturabiliyoruz.
guest_home_dir_size -> ev dizin boyutu, home_dir -> ev dizininin konumu, username -> kullanıcı adı (guestX şeklindeki)

bu şekilde bu sorunun da üstesinden geldik. Pardus 2010 Yaz Stajının 2. haftası da bitti. Her şey çok güzel gidiyor. Burada çalışmak gerçekten çok zevkli ve çok güzel.

Şimdilik çözülmesi gereken sorunlar:

ssh üzerinden bağlantı sağlanmıyor.

kdm ile de bağlanılamıyor.

Hiç yorum yok: