Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Guido Socher

Yazar Hakkında: Linux'u seviyor çünkü Linux özgür bir sistem ayrıca bütün dünyadaki Linux kullanıcılarıyla çalışmak çok eğlenceli. Boş zamanlarını kız arkadaşıyla geçiriyor, BBC radyosunu dinliyor, kırlarda bisiklet sürüyor ve Lınux'la oynamaktan hoşlanıyor.

Yazara Yazın

İçerik:
Temel Dosya Giriş İzinleri
T-bits, SUID ve SGID

Dosya Erişim İzinleri

Çeviri: Azime Öztürk

[chmod 600]

Özet: Bu makale iki bolüme ayrılmıştır:

  • İlk Bölüm (Temel Dosyaya Giriş İzinleri ) Unix altındaki temel dosya izin kavramlarına çok kısa bir giriştir.
  • İkinci bölüm (T-bit, SUID ve SGID) temel sembollerin "read-write-execute" ötesinde Linux'un çok ileri özelliklerini içerir.


  • Temel dosya giriş izinleri

    Linuz kullanıcıların kendi dosyalarına farklı giriş izinleri verebilcekleri cok kullanıcılı bir sistem. Her kullanıcı kendisini tanımlayan tek bir kullanıcı-Id numarasına sahiptir. Aynı zamanda kullanıcılar bir yada daha fazla gruba dahildir. Gruplar çok sayıda insana girişi sınırlamak için de kullanılabilir. Çok sayıda insanla daha kolay takım çalışması yapmak için iyi bir özellik. Kullanıcı -Id'nizi kontrol etmek ve dahil olduğunuz grup veya grupları görmek için sadece id komutunu yazın:

    >id
    uid=550(alice)  gid=100(kullanıcılar)  gruplar=100(kullanıcılar),6(disk)

    Giriş izinleri her bir dosyaya dosya sahibi , grup vediğerleri için okuma (r), yazma(w) ve çalıştırma(x)izinleri ilkesiyle konulabilir. Bu izinleri görmek için ls -l komutunu kullanabilirsiniz.

    >ls -l   /usr/bin/id
    -rwxr-xr-x    1 root   root    8632 May 9 1998 /usr/bin/id

    /usr/bin/id dosyası sadece root kullanıcısı tarafından kullanılır ve root grubuna aittir.

     -rwxr-xr-x 

    ifadesi dosya giriş izinlerini gösterir.Bu dosya sahibi tarafından okunabilir (r),yazılabilir(w) ve çalıştırılabilir(x), grup ve diğerleri tarafından okunabilir(r)ve çalıştırılabilir(x).

    İzinleri, her bir biti dosya sahibi, grup ve dıgerleri için tahsis edilmiş 3 bitlik bit vektör gibi düşünebilirsiniz. Şöyle ki r-x bit olarak 101 'e ondalık olarak 4+1=5'e karşılık gelir. r-bit ondalık 4'e, w-bit ondalık 2'ye ve an x-bit de ondalık 1'e karşılık gelir.

    sst
    421
    (discussed
    later)
    rwx
    421
    user
    (owner)
    rwx
    421
    group
     
    rwx
    421
    others
     

    chmod komutu bu izinleri değiştirmek için kullanılabilir. Güvenlik için yalnızca root yada dosya sahibi izinleri değiştirebilir. Chmod ile izinlerin ondalık veya sembolik ifadelerin her ikisi de kullanılır. Sembolik ifade [ugoa][+-][rwx]. Şöyle ki u (kullanıcı=dosya sahibi), g (grup), o(diğerleri), a(herkes=u, g ve o) harflerini izinleri eklemek veya kaldırmak amacıyla + veya - daha sonra da izinlerin sembolik ifadeleri r(read) w(write) x(execute) takip eder. "file.txt" dosyasını herkes için all yazılabilir writable yapmak amacıyla şunu yazın:

    >chmod a+w   file.txt
    or
    >chmod 666   file.txt
    >ls -l   file.txt
    -rw-rw-rw-   1 alice   users   79 Jan 1 16:14 file.txt

    chmod 644 file.txt izinleri "normal"hale yani dosya sahibi için okunabilir+yazılabilir ve diğerleri için sadece okunabilir şekline koyar.

    bir dizindeki değişiklik (cd komutuyla)dizini yürürlüğe koymakla denktir. "Normal"Buna göre bir dizin için "Normal" izinler644 değil 755 dir:

    >chmod 755   mydir
    >ls -ld   mydir
    drwxr-xr-x    2 alice    kullanıcılar    1024 Ar 31 22:32 mydir

    umask ihmal edilen izinlerinizi tanımlar. Bu izinler yeni dosyalar (ve dizinler, vs...) yaratıldığında uygulanır. Kanıt olarak senin koymak istemediğin ondalık ifade şeklindeki bitleri alır.

    umask 022 iyi bir e.g a seçimidir. 022 ile dosyalarını ve "cd" dizinlerinin içini herkes okuyabilir ancak yalnızca sen değişiklik yapabilirsin. Geçerli umask oturumlarını yazdırmak için sadece umask yazın.

    Burada umask ve chmod'un nasıl kullanıldığını gösteren bir örnek var:

    umask iyi bir standart değere yerleştirilir
    >umask
    22

    Editörünüzü seçin ve myscript dosyasını yaratın:
    >nedit   myscript   (or vi myscript ...)
    Doyanın içine aşağıdaki kodu koyun:

    #!/bin/sh
    #myscript
    echo -n "hello "
    whoami
    echo "Bu dosya ( $0 ) aşağıdaki izinlere sahip:"
    ls -l $0 | cut -f1 -d" "

    Yazıyı kaydet.
    Şimdi dosya 644 izinlerine sahip:
    >ls -l  myscript
    -rw-r--r--   1 alice  users  108 Jan 1 myscript

    Dosyayı çalıştırmak için çalışır hale getirmelisin:
    >chmod 755 myscript
    or
    >chmod a+x myscript

    şimdi çalıştırın:
    >./myscript

    Çalıştırılabilir olmasına ihtiyaç duyan normal derli binary'de çalıştırmak için dosyanın okunabilir ve çalıştırılabilir olmasına dikkat edin. Çünkü dosya çevirmen(kabuk) tarafından okunmalı. Dosyayı çalıştırmak şunu üretir:

     
    merhaba alice
    Bu dosya ( ./myscript )aşağıdaki izinlere sahip:
    -rwxr-xr-x
    

    T-bit, SUID and SGID

    Linux'la bir dosya için çalıştıktan sonra büyük olasılıkla burada dosya izinleri için "rwx" bitlerinden çok daha fazlasının olduğunu keşfedersiniz.Dosya sisteminizin içini araştırdığınızda "s" ve"t" yi görürsünüz:

    >ls -ld /usr/bin/crontab  /usr/bin/passwd  /usr/sbin/sendmail  /tmp

    drwxrwxrwt   5 root   root   1024 Jan 1 17:21 /tmp
    -rwsr-xr-x   1 root   root   0328 May 6 1998 /usr/bin/crontab
    -r-sr-xr-x   1 root   bin     5613 Apr 27 1998 /usr/bin/passwd
    -rwsr-sr-x   1 root   mail   89524 Dec 3 22:18 /usr/sbin/sendmail

    Nedir bu "s" ve "t" biti? İzin bitlerinin vektörü gerçekte 4 * 3 bit uzunluğundadır. chmod 755, chmod 0755 nin bir kısaltmasıdır.

    t biti

    t biti (bazen "sticky bit"e karşılık gelir)sadece dizin kombinasyonlarında kullanılabilir. Yukarda gördüğünüz gibi/tmp diziniyle kullanılır.

    Normalde (t-biti dizinlere yerleştirilmeden )dosyaların silinebilmesi için dizinin tuttuğu dosyalar silen kişi tarafından okunabilir olmalı .Böylece herkesin dosya koyabileceği bir dizininiz varsa burada herkes herkesin dosyasını silebilir .

    t-biti bu kuralı değiştirir. t-bitini koymakla yalnızca dosya sahibi yada dizin sahibi dosyaları silebilir. t-bit chmod a+tw veya chmod 1777 ile konabilir .Bir örnek:

    Alice t-bitini koyarak bir dosya yaratır:
    >mkdir mytmp
    chmod 1777 mytmp


    şimdi Bob onun içine bir dosya koyar:
    >ls -al
    drwxrwxrwt   3 alice    users  1024 Jan  1 20:30 ./
    -rw-r--r--  1 bob   users     0 Jan  1 20:31 f.txt

    Bu dosya artık Alice (dizin sahibi) ve Bob (dosya sahibi) tarafından silinebilir ancak Tux tarafından silinemez:

    >whoami
    tux
    rm -f f.txt
    rm: f.txt: Operation not permitted

    S-bit set on the user

    Linux işlemleriyle bir kullanıcı-Idsi altında çalışın. Bu kullanıcıya girebileceği tüm kaynaklara(dosyalar vs...) giriş verir. Burada 2 tane kullanıcı Idsi mevcut. Gerçek kullanıcı-IDsi ve yürürlükteki kullanıcı-IDsi. Yürürlükteki kullanıcı-IDsi dosyaya girişi belirleyendir. Aşağıdaki programı idinfo adı altında kaydedin ve çalışır hale getirin(chmod 755 idinfo).


    #!/bin/sh
    #idinfo: Kullanıcı bilgisini göster
    echo " yürürlükteki kullanıcı-IDsi:"
    id -un
    echo " gerçek kullanıcı-IDsi:"
    id -unr
    echo " grop IDsi:"
    id -gn

    Notları yürürlüğe koyunca yürüyen işlemin aldığı kullanıcı-ID'nizi ve group-ID'nizi göreceksiniz:

     yürürlükteki kullanıcı-IDsi:
    alice
    gerçek kullanıcı-IDsi:
    alice
     grup IDsi:
    kullanıcılar
    

    Tux sizin idinfo programınızı yürütünce tux'un ID'sinde o anda yürütülen işlemleri gösteren benzer çıktılar alır.Programın çıktısı sadece o programı yöneten kullanıcıya bağlıdır dosya sahibine değil.

    Güvenlik nedenleri için s-biti sadece binarilerde (derlenmiş kod) çalışır programlarda(perl programları istisnadır) çalışmaz. Bu yüzden idinfo programımızı çağıracak bir C-programı yaratırız:

    /*suidtest.c*/
    #include <stdio.h>
    #include <unistd.h>
    int main(){
    /*Güvenli secure SUID programları MUST
    *hiçbir kullanıcı girdilerine ve çevre değişkenlerine güvenmemeli !! */

    char *env[]={"PATH=/bin:/usr/bin",NULL};
    char prog[]="/home/alice/idinfo";
    if (access(prog,X_OK)){
        fprintf(stderr,"ERROR: %s not executable\n",prog);
        exit(1);
    }
    printf("running now %s ...\n",prog);
    execle(prog,(const char*)NULL,env);
    perror("suidtest");

    return(1);
    }

    Programı "gcc -o suidtest -Wall suidtest.c"ile derle ve s-bitini program sahibi üzerine yerleştir:

    >chmod 4755   suidtest
    or
    >chmod u+s   suidtest

    Programı yürüt!Ne oluştu? Hiçbir şey mi ?Farklı bir kullanıcı üzerinden yürüt!

    suidtest dosyaları alice'e aittir ve normalde dosya sahibi için x'in yerleştirildiği yerde s-bitine sahiptir. Bu,dosyanın çalıştıran kullanıcınınkinden ziyade dosya sahibi olan kullanıcının yürürlükteki kullanıcı-Idsi altında çalıştırılmasına sebep olur. Tux programı yürüttüğünde aşağıdaki gibi görnür:

    >ls -l suidtest
    -rwsr-xr-x   1 alice   users   4741 Jan 1 21:53 suidtest
    >whoami
    tux

    running now /home/alice/idinfo ...
    yürürlükteki kullanıcı-IDsi:
    alice
    gerçek kullanıcı-IDsi:
    tux
    grup IDsi:
    kullanıcılar

    Bu, özellikle s-biti yerleştirilmiş dosyaya root sahipse çok güçlü bir özelliktir.O zaman hiçbir kullanıcı normalde sadece rootun yapabileceği şeyleri yapamaz.Güvenlik üzerine birkaç kelime. Bir SUID programı yazdıktan sonra bu programın sadece senin planladığın amaç için kullanılabileceğinden emin ol. Her zaman zor şifrelenen hard-coded değere bir yol yerleştir. Asla kullanıcı girdisine (ayar dosyaları, stır komut tartışmaları , vs...) güvenme.Kullanıcı girdisini bit bit kontrol et ve onları göz önüne aldığın geçerli değerlerle karşılaştır.

    Bir SUID programı root tarafındn özelleştirildikten sonra yürürlükteki kullanıcı ve gerçek kullanıcı-ID'leri (setreuid()işlemiyle) yerleştirilebilir.

    Set-UID programları genelde "root" tarafından sıradan kullanıcılara normalde sadece "root" yapabileceği şeylere erişimi vermek için kullanilir. Root gibi siz de diğer bir kullanıcının makinenizde ppp-on/ppp-off programlarını çalıştırması için suidtest.c 'de e.g değişiklik yapabilirsiniz.

    S-bit'in grupta kullanımı

    S-bitine sahip çalıştırılabilir programlar dosya sahibinin group-ID  si altında çalışır. Bu alt paragraftaki kullanıcı s-biti ile çok benzerdir.

    S-bit gruba bir dizin için konduktan sonra grup da bu dizinde yaratılan her dosya için konur. Alice 2 gruba aittir:

    >id
    uid=550(alice)  gid=100(users)  groups=100(users),6(disk)

    Normalde alice için yaratılan dosyalar grupla kullanıcılara ayarlanır. Fakat grupla bir dizin yaratılmışsa diske yerleştirilir ve s-biti gruba yerleştirilir sonra alice'in yarattığı tüm dosyalar grup ID disk:

    ine sahip olur.

    >chmod 2775 .
    >ls -ld .
    drwxrwsr-x  3 tux   disk     1024 Jan 1 23:02 .

    Şimdi alice bu dizinde yeni bir dosya yaratırsa dosyanın grubu diske yerleştirilir.

    >touch newfile
    >ls -l newfile
    -rw-r--r--   1 alice    disk      0 Jan 1 23:02 newfile

    Çok sayıda insanla takım içinde çalışmak istiyorsanız bu iyi bir özelliktir. Bu özellik dosyaların grup ID'lerinin doğru gruba yazılmasını sağlar. Bu da takımın dizinleriyle özellikle kullanıcıların normalde 027 umask'a sahip oldukları bir çevrede çalışmak içindir ki 027 umask, dosyaları grup dışındaki insanlara girilmez kılar.

    Bu sanalyörenin bakımı Miguel Angel Sepulveda tarafından yapılmaktadır.
    © Guido Socher 1999
    LinuxFocus 1999