GNU/Linux Kullanıcı İşlemleri

İçerik:

  1. GNU/Linux Kullanıcı Listesi (/etc/passwd ve /etc/shadow dosyaları)
    1. Passwd Dosyası (/etc/passwd)
    2. Shadow Dosyası (/etc/shadow)
  2. GNU/Linux Kullanıcı Eklemek (adduser, useradd)
    1. Kullanıcı Dosyaları (/etc/skel/)
  3. Kullanıcı Değiştirmek Oturum Açmak ve Kapatmak(login, logout)
    1. Oturum Açmak (login)
    2. Oturum Kapatmak (logout)
  4. Kullanıcı Girişindeki Mesaj (/etc/motd ve /etc/issue)
    1. Issue Dosyası (/etc/issue)
    2. Motd Dosyası (/etc/motd)
  5. Kullanıcı Kabuğunu Değiştirmek (chsh)
    1. Shells Dosyası (/etc/shells)
    2. Nologin ve False Programı (/bin/false ve /usr/sbin/nologin)
  6. Kullanıcı Hesabı Silmek (userdel, deluser)
  7. Parola Değiştirmek (passwd)

GNU/Linux sistemlerde birden fazla kullanıcı hesabı oluşturulabilir. GNU/Linux çoklu kullanıcı(multi-user) özelliğini destekler.

GNU/Linux sistemlerde en yetkili kullanıcı root kullanıcısıdır. Root kullanıcısı tüm yetkilere sahiptir.

Kullanıcı hesapları ile ilgili önemli dosyalar:

/etc/passwd
/etc/shadow

Bu dosyalar kullanıcılar ile ilgili bilgileri içlerinde tutan dosyalardır.

Şimdilik bu iki dosyadan kısaca bahsedecek olursak passwd dosyası kullanıcılar ile ilgili bilgileri, shadow dosyası ise bu kullanıcıların parolalarının bilgilerini içeren dosyadır.

GNU/Linux Kullanıcı Listesi (/etc/passwd ve /etc/shadow dosyaları)

Sisteme kayıtlı kullanıcılar /etc/passwd dosyası içerisinde tutulur. Düz metin dosyası olduğu için içeriği okunabilir.

Passwd Dosyası (/etc/passwd)

root@pc:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
..
..
test:x:1001:1001:test,,,:/home/test:/bin/bash
hello:x:1002:1002:hello,,,:/home/hello:/bin/bash

/etc/passwd dosyası sadece root kullanıcısı tarafından değiştirilebilir bir dosyadır. Diğer kullanıcılar bu dosyayı sadece okuyabilirler.


/etc/passwd dosyasının içeriğini inceliyecek olursak, her satırda bir kullanıcının bilgilerinin yer aldığını görürüz.

root:x:0:0:root:/root:/bin/bash
 │   │ │ │  │    │     └ Kullanıcı kabuk programının dizini(oturum açtıktan sonra başlatılcak program)
 │   │ │ │  │    └ Kullanıcı home dizini
 │   │ │ │  └ Kullanıcının tam adı ve telefon numarası(varsa) virgulle ayrılır.
 │   │ │ └ Kullanıcının bulunduğu grub numarası (gid)
 │   │ └ Kullanıcı numarası (uid)
 │   └ Kullanıcının parolasının şifreli hali x ile gösterilmiş
 └ Kullanıcı adı

Her satırdaki bilgilerin artık neyi ifade ettiğini biliyoruz. Her : arasında kullanıcı ile ilgili bilgi yer almakta ikinci kısımda x ile belirtilen yerde kullanıcının parolasının şifreli hali olmalıydı ancak güvenlik için bu şifreli parola /etc/shadow dosyasında tutulur. Bu yüzden şifre kısmında x ifadesi yer almakta.


Shadow Dosyası (/etc/shadow)

/etc/shadow dosyası sadece root tarafından okunabilen ve değiştirilebilen bir dosyadır. Bu dosya kullanıcı şifreleriyle ilgili bilgileri tutar. Eskiden /etc/passwd dosyasındaki şifre alanında olan değerler artık bu dosyada saklanıyor. Eskiden şifreler ve kullanıcı bilgileri /etc/passwd dosyasındaydı ancak kullanıcılar kullanıcı listesini görmek istediklerinde birbirlerinin şifrelerinini görebiliyorlardı. Bu sebebe /etc/passwd dosyasındaki şifre alanı /etc/shadow dosyasına taşınmış ve /etc/passwd dosyasındaki şifre alanına x işareti atılmıştır. Böylece kullanıcılar /etc/passwd dosyasını okuyabilirken /etc/shadow dosyasını okuyamazlar. Bu sayede birbirlerinin şifrelerini görmezler.


/etc/shadow dosyasını inceliyecek olursak

root@pardus:/home/user# cat /etc/shadow
root:!:17500:0:99999:7:::
daemon:*:17472:0:99999:7:::
bin:*:17472:0:99999:7:::
sys:*:17472:0:99999:7:::
..
..
test:$6$ZokRaXP3$jFa14BsTVyS9iAI3UgIuItRxO89PTbIbbgyRRH6WFfsUa1DEbMUPqf/n1AwfWTPWIALADOZXyKUq7UYEn05E81:17502:0:99999:7:::
hello:$6$i7H9wAUH$9ewRmZMwFKp3lkiJYBfRnMh.owCzR9vYj6noVAtK9ROe2d9lYzY.SCmsZJdtyNkXrnexuEZIPRxJKYRGptads/:17503:0:99999:7:::

Burda kullanıcıları ve parolalarının şifreli hallerini görebiliyoruz.

test:$6$ZokRaXP3$jFa14BsTVyS9iAI3UgIuItRxO89PTbIbbgyRRH6WFfsUa1DEbMUPqf/n1AwfWTPWIALADOZXyKUq7UYEn05E81:17502:0:99999:7:::

Yukarıdaki satırı : karaktlerinden bölersek ve numaralandırır isek
1:2:3:4:5:6:7:8:9 gibi

1 - Kullanıcı adı
2 - Kullanıcı parolasının şifreli(hash+salt) hali
3 - 1 Ocak 1970 tarihi ile parolanın en son değiştiği tarih arasındaki gün sayısı
4 - Parola değiştikten sonraki gün sayısı (0 değeri parolanın hiç değiştirilmediğini gösterir)
5 - Kullanıcının yeni parola belirlemesi için gerekli gün sayısı (99999 parola değiştirmesi için bir çok yılı olduğunu belirtir)
6 - Parolanın kullanım süresinin dolduğunun kullanıcıya bildirileği gün sayısı
7 - Parolanın son kullanma tarihi geçtikten sonra hesabın kapatılacağı gün sayısı
8 - Hesabın kapatıldığı(disabled) tarih ile 1 Ocak 1970 arasındaki gün sayısı
9 - Daha sonra kullanım için ayrılmış alan

Yukarıdaki satırı : ifadelerinden parçalıyacak olursak ilk kısım kullanıcı adını ikinci kısım ise kullanıcıya ait parolanın şifreli halini saklar. Şifre kısmında * yazan hesaplar kullanıma kapatılmış hesapları temsil eder. Bir hesabı kullanıma kapatmak(disable) istiyorsak hesabın /etc/shadow dosyasındaki ilgili satırında şifre alanına * atılır. Böylece hesap kapatılır. Hesabı tekrar aktif etmek için * işareti /etc/shadow dosyasından silinir.

Kullanıcı şifresinin bulunduğu alanı incelersek:

$6$ZokRaXP3$jFa14BsTVyS9iAI3UgIuItRxO89PTbIbbgyRRH6WFfsUa1DEbMUPqf/n1AwfWTPWIALADOZXyKUq7UYEn05E81

Yukarıdaki satırı $ işaretlerinden bölersek
$a$b$c şeklinde

a - Şifreleme türünün idsi
b - Salt(tuz)
c - Hash

Bu parola $id$salt$hash şeklinde saklanır. Güvenlik açısından parola doğrudan burada yer almaz, bunun yerine önce parolanın hash'i alınır sonra salt(tuzlama) işlemine sokulur.

Hash herhangi bir veriden üretilen eşsiz bir çıktıdır. Bu çıktı kullanılarak asıl çıktıya ulaşılamaz. Yani geri dönüşü olmayan bir şifreleme türüdür.

Salt işlemi ise rastgele üretilen değerlerin parolaya eklenmesidir. Böylece şifremiz daha karmaşık hale gelir. Ayrıcı aynı parolayı başka bir kullanıcı kullanılsa bile salt işlemi yapıldığı için kullanıcı şifreleri aynı olmaz.

Şifremizi $a$b$c şeklinde düşünürsek
$a$ kısmı için aşağıdaki durumlar söz konusudur

$1$ MD5
$2$ Blowfish
$5$ SHA256
$6$ SHA512

$b$ bölümü ise salt değerimizdir.
ZokRaXP3

$c bölümü hash değerimizi tutar.
jFa14BsTVyS9iAI3UgIuItRxO89PTbIbbgyRRH6WFfsUa1DEbMUPqf/n1AwfWTPWIALADOZXyKUq7UYEn05E81

GNU/Linux Kullanıscı Eklemek (adduser, useradd)

Kullanıcı eklemek için useradd ya da adduser komutları kullanılabilir. Ancak bu komutlar sadece root kullanıcısı tarafından kullanılabilir.

root@pc:~# adduser ali
Adding user `ali' ...
Adding new group `ali' (1007) ...
Adding new user `ali' (1007) with group `ali' ...
Creating home directory `/home/ali' ...
Copying files from `/etc/skel' ...
Yeni parolayı girin:
Yeni parolayı tekrar girin:
passwd: şifre başarıyla güncellendi
ali için kullanıcı bilgileri değiştiriliyor
Yeni değeri girin, veya varsayılan değer için ENTER'a basın
	Tam İsim []: ali
	Oda Numarası []: 1
	İş Telefonu []: 02163333333
	Ev Telefonu []: 02121111111
	Diğer []:
Is the information correct? [Y/n] y

adduser komutu interaktif bir arayüzüz ile root kullanıcısından gerekli bilgileri girmesini ister ve girilen bilgilere göre yeni bir kullanıcı oluşturur.

Çıktıdaki satırları incelersek:

Adding user `ali' ...  - ali adında kullanıcı eklendi
Adding new group `ali' (1007) ...  - ali adında yeni grup eklendi
Adding new user `ali' (1007) with group `ali' ...  - ali kullanıcısı ali grubuna eklendi
Creating home directory `/home/ali' ...  - eklenen kullanıcı için home dizini oluşturuldu.
Copying files from `/etc/skel' ...  - /etc/skel klasörü içerisindeki veriler kullanıcının home dizinine kopyalandı.

/etc/skel/ dizini yeni kullanıcı oluşturulduğunda kullanıcı home dizinine kopyalanacak dosyaları barındırır. Bu dizine sadece root kullanıcı veri yazabilir. Diğer kullanıcılar buradaki dosyaları sadece okuyabilir.


Yukarıdaki aşamada henüz adduser komutundan çıkmamışken ve parola girilmemişken, yeni bir kullanıcı oluşturduk, yeni bir grup oluşturduk, yeni bir home dizini yarattık.

Bunları başka bir terminal açarak ordan kontrol edebiliriz.

root@pc:~# tail -1 /etc/passwd
ali:x:1007:1007::/home/ali:/bin/bash

root@pc:~# tail -1 /etc/shadow
ali:!:17503:0:99999:7:::

root@pc:/home# ls
ali  hello  test

root@pc:/home# ls /etc/skel
.  ..  .bash_logout  .bashrc  .profile

root@pc:~# ls /home/ali
.  ..  .bash_logout  .bashrc  .profile

Henüz program işini bitirmemiş olmasına rağmen yeni bir kullanıcı /etc/passwd dosyasına ve /etc/shadow dosyasına kayıt olarak eklenmiş. Aynı zamanda /etc/skel/ dizini altındaki dosyalar kullanıcı home dizinine kopyalanmış.


adduser programına devam edersek parola girilmediği için /etc/shadow dosyasında şifre alanı ! olarak belirtilmiş. Bu hesabın kilitli(lock) olduğunu belirtir. Parola belirlenmediği için hesaba erişim yoktur. Bu hesap ile hiçbir kullanıcı oturum açamaz.


Kullanıcı için parola girildikten sonra ise /etc/shadow ve /etc/passwd dosyalarının içeriğinin şu şekilde değiştiğini görüyoruz.

root@pc:~# tail -1 /etc/passwd; tail -1 /etc/shadow
ali:x:1007:1007::/home/ali:/bin/bash
ali:!:17503:0:99999:7:::

Parola girildikten sonra passwd ve shadow dosyaları

root@pc:~# tail -1 /etc/passwd; tail -1 /etc/shadow
ali:x:1007:1007:ali,1,02163333333,02121111111:/home/ali:/bin/bash
ali:$6$AHbvNGgE$s1O3KtodhcxwKsiJbvEKxLRz7pOOrc6UC8z0klqdpEOQpnKT42VFZ1hdWyjgf7nR5rSpy.mMxuBNb7K7jRLQJ1:17503:0:99999:7:::

Kullanıcı Değiştirmek Oturum Açmak ve Kapatmak(login, logout)

Kullanıcılar login programını kullanarak sisteme giriş yapabilirler. Kullanıcı sisteme giriş yaptıktan sonra bu kullanıcı için tanımlanmış kabuk veya program çalıştırılır.

root@pc:/# login ali
Parola:
GNU/Linux pardus 4.9.0-4-amd64 x86_64

The programs included with the Pardus GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Pardus GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

ali@pc:~$ whoami
ali

Yukarıdaki örnekte root hesabından ali kullanıcısı hesabında oturum açtık.

Eğer bu hesap ile daha önceden oturum açılmış ise ve /var/log/lastlog dosyası var ise en son oturum açılma tarihi ekrana basılacak ve shell bağlantısı verilecektir. /var/log/lastlog dosyasındaki veriler last komutu ile görülebilir.

Eğer kullanıcı için bir shell tanımlı değil ise kullanıcı /bin/sh kabuğunda çalıştırılır.

Eğer home dizini tanımlı değilse /(kök) dizinde çalıştırılır.

Oturum Kapatmak (logout)

Login ile bağlantı açıldıktan sonra logout komutu ile oturumdan çıkılır.

ali@pc:~$ logout
root@pc:/#

Kullanıcı Girişindeki Mesaj (/etc/motd ve /etc/issue)

Kullanıcıların bir terminalden oturum açarken kullanıcılara gösterilen mesajlar vardır. Bu mesajlar şu dosyalarda bulunur.

root@pc:/etc# ls -la issue; ls -la motd
-rw-r--r-- 1 root root 27 Eyl 15 14:09 issue
-rw-r--r-- 1 root root 286 Şub 21  2017 motd

Bu iki dosyanın içeriğide sadece root kullanıcı tarafından değiştirilebilir.

Issue Dosyası (/etc/issue)

Kullanıcılar bulunulan sisteme giriş yapmak için açılmış olan güvenli terminal ekranında kullanıcıya gösterilecek mesaj /etc/issue dosyasında bulunur.

root@pc:~# cat /etc/issue
Pardus GNU/Linux 17 \n \l

Örnek verirsek ctrl+alt+f2 kombinasyonu ile açtığımız terminal giriş ekranı bu amaçladır. Bu terminal doğrudan sistemimize giriş yapmak içindir. Bu terminaller f3,f4,f5 tuşlarıyla değiştirilebilir.


Genellikle bu dosya içerisinde bulunulan sistemin ismi yazar kullanıcının hangi sisteme gireceğini gösterir.

Motd Dosyası (/etc/motd)

Bu dosya kullanıcıların sistemde oturum açtıktan sonra terminal ekranlarında gözükecek metni içerir.


Motd yani message of the day günün mesajı diye çevrilebilir. Root kullanıcı tarafından diğer kullanıcılara terminalde oturum açtıktan sonra gösterilen mesajdır.

root@pc:/etc# cat motd

The programs included with the Pardus GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Pardus GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Bu içerik root kullanıcı tarafından değiştirilebilir.

root@pc:/etc# login manual
Parola:
Son giriş: 3 Ara Paz 22:44:10 +03 2017 pts/1 üzerinde
GNU/Linux pardus 4.9.0-4-amd64 x86_64

The programs included with the Pardus GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Pardus GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

manual@pc:~$ whoami
manual

Yukarıdaki örnekte görüldüğü gibi sisteme giriş yaptıktan sonra ekrana /etc/motd dosyasının içeriği basıldı sonra bize bash kabuğu verildi.

Kullanıcı Kabuğunu Değiştirmek (chsh)

Sistemdeki kullanıcılar kullandığı kabuk programını chsh programını kullanarak değiştirilebilir.

manual@pc:~$ /etc/passwd | grep manual
manual:x:1002:1002:manual,,,:/home/manual:/bin/bash

manual@pc:~$ chsh
Parola:
manual için oturum kabuğu değiştiriliyor
Yeni değeri girin, veya varsayılan değer için ENTER'a basın
	Oturum Kabuğu [/bin/bash]: /bin/dash

- Yukarıda manual kullanıcısı sisteme login olduktan sonra çalıştırılacak kabuk programını /bin/dash kabuğu ile değiştirdi.

manual@pc:~$ cat /etc/passwd | grep manual
manual:x:1002:1002:manual,,,:/home/manual:/bin/dash

Kullanıcı oturum kabuğunu değiştirebilmek için öncelikle kendi kullanıcı parolasını girmelidir. Daha sonra kullanılmak istenilen kabuk girilir.


Aynı zamanda root kullanıcısı istediği bir kullanıcının kullanacağı kabuk programını değiştirebilir.

root@pc:# cat /etc/passwd | grep manual
manual:x:1002:1002:manual,,,:/home/manual:/bin/bash

root@pc:/home# chsh manual
manual için oturum kabuğu değiştiriliyor
Yeni değeri girin, veya varsayılan değer için ENTER'a basın
	Oturum Kabuğu [/bin/bash]: /bin/sh

root@pc:/home# cat /etc/passwd | grep manual
manual:x:1002:1002:manual,,,:/home/manual:/bin/sh

Örnekte görüldüğü gibi kullanıcının kabuğunu kullanıcı parolasını bilmesekte değiştirdik.

/etc/shells Dosyası

Sistemdeki kullanılabilir geçerli kabuk programları /etc/shells dosyasının içerisinde yer almaktadır.

manual@pc:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

/bin/false ve /usr/sbin/nologin Programları

/etc/passwd dosyasına baktığımızda bazı hesapların kabuk programı olarak /bin/false ve /usr/sbin/nologin programlarını kullandığını görüyoruz.

/bin/false programı hiç bir şey yapılmayacağını belirtir. Yani kullanıcıya bir shell sunmaz.

/usr/sbin/nologin programı ise kullanıcının hesabının aktifliğini sonlandırmak için kullanılabilir. Yani hesabı kilitler diyebiliriz.

Örnek olarak test kullanıcının kabuğunu önce /bin/false yapıp giriş yapmayı deneyelim.

root@linuxpc:/home# cat /etc/passwd | grep test
test:x:1001:1001:test,,,:/home/test:/bin/bash

root@linuxpc:/home# chsh test
test için oturum kabuğu değiştiriliyor
Yeni değeri girin, veya varsayılan değer için ENTER'a basın
	Oturum Kabuğu [/bin/bash]: /bin/false


root@linuxpc:/home# login test
Parola:

Son giriş: 3 Ara Paz 22:44:10 +03 2017 pts/1 üzerinde
GNU/Linux pardus 4.9.0-4-amd64 x86_64

The programs included with the Pardus GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Pardus GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@linuxpc:

Yukarıda görüldüğü üzere kabuğu /bin/false yaptıktan sonra test kullanıcısı ile sisteme giriş yapmaya çalıştık fakat ekrana son login tarihimizi ve /etc/motd dosyasındaki metni yazdıktan sonra sistem üzerinden bir shell alamadan oturumumuz sonlandı.


Aynı işlemi /usr/sbin/nologin kullanarak deneyelim.

root@linuxpc:/home# cat /etc/passwd | grep test
test:x:1001:1001:test,,,:/home/test:/bin/bash

root@linuxpc:/home# chsh test
test için oturum kabuğu değiştiriliyor
Yeni değeri girin, veya varsayılan değer için ENTER'a basın
	Oturum Kabuğu [/bin/bash]: /usr/sbin/nologin


root@linuxpc:/home# login test
Parola:

Son giriş: 3 Ara Paz 22:44:10 +03 2017 pts/1 üzerinde
GNU/Linux pardus 4.9.0-4-amd64 x86_64

The programs included with the Pardus GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Pardus GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
This account is currently not available.
root@linuxpc:

Bu sefer ilk örnekten farklı olarak ekrana This account is currently not available. metnini yazdı. Yani hesabın kilitlendiğini erişime kapatıldığını belirtiyor.

nologin programı bir kullanıcı hesabının erişimini kapatmak için kullanılabilir, aynı zamanda false programı da aynı işlemi görecektir.

Kullanıcı Hesabı Silmek (userdel, deluser)

Kullanıcı silmek için userdel ve deluser komutları kullanılabilir. Bu komutları sadece root kullanıcı kullanabilir.

root@pc:~# userdel hello

Bu komut hello kullanıcısını silecektir.
/etc/passwd ve /etc/shadow dosylarına bakarsanız kullanıcının olduğu satırın silindiğini görebiliriz.

root@pc:~# userdel -r hello

-r parametresi belirtilen kullanıcıyı home dizini ile beraber silmemizi sağlar.

Aynı zamanda kullanıcı silmek için deluser komutu kullanılabilir.

Parola Değiştirmek (passwd)

Bir kullanıcı parolasını değitirmek istediğinde passwd komutunu kullanarak parolasını değiştirebilir.

hello@pc:~$ passwd
hello kullanıcısının parolası değiştiriliyor.
(geçerli) parola:
Yeni parolayı girin:
Yeni parolayı tekrar girin:
passwd: şifre başarıyla güncellendi

Yukarıdaki örnekte hello adındaki kullanıcı kendi parolasını değiştirdi. Ancak root kullanıcı istediği kullanıcının parolasını o kullanıcının parolasını bilmese bile değiştirebilir.

root@pc:~# passwd hello
Yeni parolayı girin:
Yeni parolayı tekrar girin:
passwd: şifre başarıyla güncellendi

Parola değiştirirken parola giriş alanlarında basılan tuşlar görünmez bu bir güvenlik önlemidir.