Setuid Erişiminin Etkinleştirilmesi ve İptali
Önceki XXIX. Oylum - Kullanıcılar ve Gruplar Sonraki
Setuid Erişiminin Etkinleştirilmesi ve İptali
Genellikle setuid yazılımlarda bu özel erişime her zaman gerek duyulmaz. Gerekmedikçe bu erişimin kapalı tutulması daha iyidir, böylece tasarlanmamış bir erişime imkan verilmemiş olur.
Sistem _POSIX_SAVED_IDS özelliğini destekliyorsa, bunu seteuid ile yapabilirsiniz. Bir oyunun başlatıldığındaki gerçek kullanıcı kimliği jdoe, etkin kullanıcı kimliği games ise kayıtlı kullanıcı kimliği de games olur. Bu yazılımın her iki kullanıcı kimliğinin çalıştırıldığında kaydedilmesi şöyle yapılır:
user_user_id = getuid ();game_user_id = geteuid ();
Bunun ardından oyun dosyasını erişime şöyle kapatabilirsiniz:
seteuid (user_user_id);
Oyun dosyasını tekrar erişime açmak isterseniz:
seteuid (game_user_id);
Bu işlemler sırasında sürecin gerçek kullanıcı kimliği jdoe ve dosya kullanıcı kimliği games olarak kalır, böylece yazılım etkin kullanıcı kimliğini bunlardan biri yapabilir.
Dosya kullanıcı kimliklerini desteklemeyen sistemlerde, setuid erişimini setreuid kullanarak etkin ve gerçek kullanıcı kimlikler arasında takas edebilirsiniz:
setreuid (geteuid (), getuid ());
Bu daima geçerli bir özel durumdur--hiç başarısız olmaz.
Setuid erişim, gerçek ve etkin kimliklerin takaslanmasından neden etkilenir? Bir oyunun başlatıldığını ve onun gerçek kullanıcı kimliğinin jdoe iken etkin kullanıcı kimliğinin games olduğunu varsayalım. Bu durumda sürecin puanların tutulduğu dosyaya yazabildiğini varsayalım. Eğer bu iki kullanıcı kimlik aralarında yer değiştirirse gerçek kullanıcı kimlik games, etkin kullanıcı kimlik jdoe olur ve süreç artık sadece jdoe erişimine sahip olur ve puanların tutulduğu dosyaya yazamaz. Tekrar yapılan bir takasla puanların tutulduğu dosyaya tekrar erişim sağlanır.
Kayıtlı kullanıcı kimlik özelliğinin desteklendiği ve desteklenmediği her iki sistemde de bu özelliği kullanabilmek için önişlemci yordamlarını kullanabilirsiniz:
#ifdef _POSIX_SAVED_IDS
  seteuid (user_user_id);
#else
  setreuid (geteuid (), getuid ());
#endif
Önceki Üst Ana Başlık Sonraki
Grup Kimliğinin Belirtilmesi Başlangıç Setuid Yazılım Örneği
Bir Linux Kitaplığı Sayfası