Dosya Erişim İzinlerinin Sınanması
Önceki Dosya Öznitelikleri Sonraki
Dosya Erişim İzinlerinin Sınanması
Bazı durumlarda kullanıcının erişim yetkisi olmayan bazı dosyalara ya da aygıtlara yazılım üzerinden erişebilmesi istenir. Olası bir çözüm yazılımın setuid bitini etkinleştirmektir. Böyle bir yazılım çalıştırılırsa, sürecin etkin kullanıcı kimliği yazılım dosyasının sahibi olarak değiştirilir. Böylece, yazılımın sahibi root yapılıp setuid biti de etkinleştirilerek, normalde sadece ayrıcalıklı kullanıcı tarafından erişilebilen /etc/passwd gibi dosyalara, yazma erişimi sağlanabilir.
Bunun yanında bir kullanıcının erişim izni olmayan dosyalara erişmesine izin vermeyecek bir düzenleme de düşünülebilir. Bu durumda yazılım, bir dosyayı okumadan ya da ona yazmadan önce kullanıcının gerekli erişim izinlerine sahip olup olmadığını sınamalıdır.
Bunu yapmak için, sürecin etkin kullanıcı kimliğine değil gerçek kullanıcı kimliğine dayalı erişim izinlerini sınayan access işlevi kullanılır. (Setuid özelliği gerçek kullanıcı kimliği değiştirmez, böylece yazılımı gerçekte kimin çalıştırdığı saptanır.)
Bu erişimi sınamanın daha kolay açıklanabilen bir yolu daha vardır, ama onun da kullanımı zordur. Bu yöntemde işlem dosya kip bitlerini öğrenerek ve sistemin kendi erişim hesaplaması taklit edilerek yapılır. Bu yöntemin kullanılması pek tercih edilmez, çünkü bir çok sistem ek erişim denetim özelliklerine sahiptir ve yazılımınız farklı sistemlerin farklı erişim özelliklerini taşınabilir olarak taklit etmek zorunda kalacaktır. access işlevi bu işlemleri sizin yerinize yapar.
access işlevi sadece ve sadece setuid yazılımlarda kullanmak için değildir. Setuid olmayan bir yazılım daima gerçek kimlik yerine etkin kimliği kullanır.
Bu bölümdeki semboller unistd.h başlık dosyasında bildirilmiştir.
int access
(const char *dosyaismi,
 int         nasıl)
işlev
access işlevi ismi dosyaismi ile belirtilen dosyaya nasıl ile belirtilen yolla erişilip erişilemeyeceğini sınar. nasıl argümanında belirtilebilecek değer ya R_OK, W_OK ve X_OK seçeneklerinin bit seviyesinde VEYA'lanmışı ya da F_OK varlık sınaması olabilir.
Bu işlev erişim izinlerini sınamak için sürecin etkin kullanıcı ve grup kimliklerini değil, gerçek kullanıcı ve grup kimliklerini kullanır. Sonuç olarak, bu işlevi bir setuid veya setgid yazılımda (Bir Sürecin Aidiyeti Nasıl Değiştirilir?) kullanıyorsanız, işlev yazılımı gerçekte hangi kullanıcı çalıştırıyorsa o kullanıcıya göre bilgi verir.
Erişime izin verilmişse işlev 0 ile, aksi takdirde -1 ile döner. (Başka bir deyişle, eğer istenen erişime izin verilmezse, access işlevi, bir isnat işlevi gibi düşünülerek doğru ile döner.)
Dosya ismi hatalarına ek olarak aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
EACCES
nasıl ile belirtilen erişime izin verilmiyor.
ENOENT
Dosya mevcut değil.
EROFS
Salt-okunur bağlı bir dosya sistemi üzerindeki bir dosya için yazma izni istendi.
access işlevinin nasıl argümanında kullanmak için tasarlanmış olan bu makrolar tamsayı sabitler olarak unistd.h başlık dosyasında tanımlanmıştır:
int R_OK
makro
Okuma izni için sınama seçeneği.
int W_OK
makro
Yazma izni için sınama seçeneği.
int X_OK
makro
çalıştırma/arama izni için sınama seçeneği.
int F_OK
makro
Dosyanın mevcut olup olmadığını sınama seçeneği.
Önceki Üst Ana Başlık Sonraki
Dosya İzinlerinin Atanması Başlangıç Dosya Zamanları
Bir Linux Kitaplığı Sayfası