Kullanıcılar arası geçiş¶
Root yetkisi¶
Root yetkisi sistemde tam erişime sahip yetki düzeyidir. Bu yetki sayesinde sistemde değişiklik yapılabilmektedir. Örneğin paket kurulumu ve kaldırma gibi işlemler için root yetkisine ihtiyacımız vardır.
Root yetkisi root kullanıcısına aittir. Bu kullanıcının UID ve GID değeri 0dır. Ev dizini ise /root dizinidir.
Root yetkisinin alınması¶
Kullanıcı değiştirmek için su komutu kullanılır. Eğer bu komuta parametre vermezseniz root kullanıcısına geçiş yapılmış olur.
$ su
-> Password:
$ id
-> uid=0(root) gid=0(root) groups=0(root)...
suid kavramı¶
su komutunun çalışabilmesi için suid iznine sahip olması gereklidir. Bunu aşağıdaki gibi kontrol edebiliriz.
# s harfi suid iznini ifade eder.
$ ls -la /bin/su
-> -rws--x--x 1 root root 72816 Jan 14 10:25 /bin/su
suid izni vermek için chmod u+s izni geri almak için ise chmod u-s komutu kullanılır. Bu komutlar sadece root kullanıcısı tarafından çalıştırılabilir.
# yetki vermek için
$ chmod u+s /bin/su
# yetkiyi geri almak için
$ chmod u-s /bin/su
setuid sistem çağrısı¶
suid izni verilen dosyalar setuid() ve setgid() sistem çağrısını kullanabilirler. Örneğin aşağıdaki gibi bir C kodumuz olsun.
#include <unistd.h>
#include <stdlib.h>
int main(){
setuid(0);
setenv("USER","root",1);
return system("sh");
}
Bu C kodunu gcc ile derleyelim ve suid izni verelim. suid yalnızca root kullanıcısı ayarlayabileceği için bu işlem root kullanıcısı ile yapılmalıdır.
$ gcc -o main.c main
$ chmod u+s main
Derlenen ve suid izni ayarlanan dosyamızı normal kullanıcımız ile çalıştırdığımızda root yetkisi alacaktır. su komutumuz bundan yararlanarak çalışmaktadır.
Not: suid iznine sahip dosyalar potansiyel güvenlik açığı oluşturabilir.
suid engelleme¶
Dosya sisteminde suid iznini engellemek için nosuid seçeneği etkinleştirilebilir. /etc/fstab dosyamızda ilgisi satır şu şekilde olabilir.
...
# filesystem mountpoint type options dump/pass
/dev/nvme0n1p2 / ext4 default,rw,nosuid 0 0
...
busybox su¶
Busybox bize su komutu sağlayabilmektedir. Bu komutu kullanmak için öncelikle busyboxun kopyası oluşturulmalı ve ona suid yetkisi verilmelidir. Türkmen varsayılan su komutu olarak busyboxu kullanmaktadır.
$ install /bin/busybox /bin/su
$ chmod u+s /bin/su