User Administration (Kullanıcı Yönetimi)

(Uygulamanın kaynak kodlarına https://github.com/vlyalcin/User-Administration adresinden ulaşabilirsiniz.)

Kullanıcı Yönetimi sisteminizdeki kullanıcıları yönetmeye yarar. Uygulama temel olarak;

-Yeni kullanıcı ekler
-Mevcut kullanıcı bilgilerini düzenler veya siler.
-Kullanıcı resmini belirler (görüntüyü kameradan veya bilgisayarınızdaki bir resimden alabilir)

Linux sisteminde kullanıcı bilgileri bir metin dosyası içerisinde saklanıyor (/etc/passwd yapısı hakkında güzel bir kaynak http://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/). Benim yaptığım olay Linux standartlarının dışına çıkmadan bu metin dosyalarını Kullanıcı Yönetimi uygulaması aracılığı ile düzenlemek oldu. Yani benim kazandığım tecrübe ağırlıklı olarak metin dosyası açma, okuma ve düzenleme üzerine oldu. Mevcut kitaplıklar ile çok daha az satır ve çok daha az emek ile basitce kullanıcı oluşturabileceğimin farkındayım. Ben işi el ile yaparak Python ve programlama konusunda tecrübe kazanmak istedim.

Onun dışında OpenCV’nin bilgisayar kamerasından görüntü alıp kaydetme gibi çok basit bir özelliğini kullandım.

Parolaları şifreleme ihtiyacı sebebiyle passlib kitaplığı ve şifreleme konusunda deneyim edindim.

Qt arayüzü ile aşina oldum.

Uygulamada çeşitli ihtiyaçlar ile içe aktardığım kitaplıklar şu şekilde;
os, sys, shutil, datetime, Image, cv, python-passlib, PyQt4

Uygulamayı kaynak koddan “python setup.py install” komutu ile yükledikten sonra /usr/share/user-administration/.backup dizini altına “/etc/passwd”, “/etc/shadow”, “/etc/group” dosyalarının yedeğini alıyor. Bu dosyalar ile ilgili herhangi bir sorun ile karşılaştığınızda yedeği alınan dosyaları ilgili yerlere geri taşıyarak sorunu giderebilirsiniz.

root olarak yada sudo ile “python setup.py install” komutuyla uygulamayı sisteminize yükledikten sonra komuta satırına tekrar root olarak yada sudo ile “user-administration” komutunu yazarak uygulamayı başlatabilirsiniz
Kullanıcı resmi durumundan dolayı şimdilik sadece Ubuntuda sağlıklı olarak çalışıyor.

Uygulama sistem ve kullanıcılar ile ilgili olduğu için farketmeden güvenlik zaafiyeti oluşturmuş olabilirim. Sakıncalı gördüğünüz noktaları uyarmaktan çekinmeyiniz.

Türkçe desteğini vakit darlığından dolayı oluşturamadım. Fakat kod satırlarındaki yorumlamalarda Türkçe yorumları eksik etmedim.

Ekran görüntüleri

Linux’te Vim ile metin dosyası şifreleme

Vim metin düzenleyici ile düzenlediğiniz metinleri kolaylıkla şifreleyebilirsiniz.
Vim şifreli dosyalar yazmamıza ve şifreyi doğru girdiğimiz taktirde onları tekrar okumamıza olanak sağlıyor.
Vim ile bir metin dosyasını şifrelemek için komut satırına;

vim -x dosyaismi

şeklinde komut girin. dosyaismi mevcut bir dosya veya yeni oluşturacağınız bir dosya olabilir. Vim açıldığında sizi yorumlayıcı karşılayacak ve sizden şifre girmenizi isteyecek.

Sizi karşılayan Vim yorumlayıcısına şifreyi girdikten sonra dosyayı kaydetmezseniz, şifreleme işleminiz geçersiz olur. Bu yüzden şifreyi girdikten sonra dosyayı kaydetmeyi unutmayın.

Dilerseniz bir örnek yapalım;


volkan@volkan-N61Vg$ vim -x bir-metin.txt

Komutundan sonra bizden şifre isteyecek.

Şifre anahtarını girin: ****
Aynı anahtarı tekrar girin: ****

Şifrenizi girin ve kaydedin. Kaydettikten sonra, “bir-metin.txt” dosyası girdiğimiz şifre ile şifrelendi.

Dosyanın şifrelendiğini teyit edelim.

volkan@volkan-N61Vg$ cat bir-metin.txt 
VimCrypt~01!ssuU��� �S��*�� 
volkan@volkan-N61Vg$

Evet, artık girdiğiniz şifreyi öğrenmediği sürece kimse metin dosyanızı okuyamaz 🙂

Inversion (inversiyon, evirme) nedir?

A[1 … n] (1’den n’e) bir liste olsun. i < j  (i değeri j den küçük) iken A[i] > A[j] (A listesindeki i. (i inci) element j. (j inci) elementten büyük) ise bu duruma inversion (inversiyon, evirme) deniyor.

Hemen örnek ile tanımımızı destekleyelim.

A[2, 4, 1, 3, 5] şeklinde listemiz olsun.

A listesinde 3 tane inversion var. Bunlar (2, 1), (4, 1), (4, 3) çifleri.

Aşağıda da C’de yazılmış kodu bulunuyor.

int getInvCount(int arr[], int n)
{
  int inv_count = 0;
  int i, j;
  for(i = 0; i < n - 1; i++)
    for(j = i+1; j < n; j++)
      if(arr[i] > arr[j])
        inv_count++;
  return inv_count;
}
/* Driver progra to test above functions */
int main(int argv, char** args)
{
  int arr[] = {1, 20, 6, 4, 5};
  printf(" Number of inversions are %d n", getInvCount(arr, 5));
  getchar();
  return 0;
}