Linux Sunucularda SFTP Kullanıcı Tanımlama
Genellikle kurumsal şirketler kullanıcı yönetimlerini merkezi kimlik yönetimi sistemleri ile yönetmektedir. Merkezi kimlik yönetimi sistemine dahil olmayan/olamayan sistemler için lokal kullanıcı tanımlanma ihtiyacı olmaktadır. Linux sunucularda ortamlar arasında SFTP ile dosya aktarımı/yönetimi yapabilmek için sftp kullanıcının nasıl tanımlandığını paylaşacağım.
· SFTP kullanıcı konfigürasyonunu 2 türlü yapabiliriz.
*Grup bazlı
*Kullanıcı bazlı
· Konfigürasyon için kullanacağımız grup ,kullanıcı ve home dizin bilgisi aşağıda belirtilmiştir. Belirtilen değerleri kendinize göre değiştirebilirsiniz.
sftp grup adı : sftponly
kullanıcı 1 : prj1sftp
kullanıcı 1 home dizini : /home/prj1sftp/sftp
kullanıcı 2 : prj2sftp
kullanıcı 2 home dizini : /home/prj2sftp/sftp
Grup Bazlı SFTP Kullanıcı Tanımı
Proje bazlı birden fazla kullanıcı ihtiyacımız varsa ve kullanıcı yönetimini kolaylaştırmak için grup bazlı oluşturmayı tercih edebiliriz.
1. Öncelikle sftp kullanıcılarımızı üye yapacağımız grubumuzu (sftponly) bir defaya mahsus aşağıdaki gibi oluşturalım.
groupadd sftponly
2. Oluşturduğumuz grup altında ihtiyacımız olan kullanıcılarımızı aşağıdaki komutlar ile önce home dizinlerini sonra kullanıcıyı oluşturuyoruz. “/sbin/nologin” shell seçmemizin nedeni sftp kullanıcısının ssh oturum açmasını engellemektir.
mkdir -p /home/prj1sftp/sftp
useradd –d /home/prj1sftp/sftp -g sftponly -s /sbin/nologin prj1sftp
mkdir -p /home/prj1sftp/sftp
useradd –d /home/prj2sftp/sftp -g sftponly -s /sbin/nologin prj2sftp
NOT: Komutlarda kullandığımız seçeneklerin(options) açıklamaları aşağıda verilmiştir.
-p : recursive olarak dizin oluşmasını sağlar.
-d : kullanıcının kök dizin olarak göreceği home dizini belirlememizi sağlar.
-g : kullanıcının üye olacağı gruba dahil olmasını sağlar.
-s : kullanıcının shelli belirlememizi sağlar.
3. Kullanıcımızı oluşturduk ve aşağıdaki gibi şifremizi belirleyelim.
passwd prj1sftp
passwd prj2sftp
4. Kullanıcının üst dizinlerde gezintiye çıkarak sistem dosyalarına erişerek güvenlik açığı oluşturmayı istemeyiz. Bu nedenle yapılacak iki konfigürasyonumuz bulunmaktadır.İlk konfigürasyon aşağıda belirtilmiştir.Diğer konfigürasyon ChrootDirectory ile yapılacaktır.
* Kullanıcının kendi home pathini root dizini olarak görmesi için aşağıdaki dizin yetkilendirilmeleri yapılmalıdır.
chown root:root /home/prf1sftp/sftp
chmod 555 /home/prf1sftp/sftp
chown root:root /home/prf2sftp/sftp
chmod 555 /home/prf2sftp/sftp
*Root olarak göreceği dizinin üst dizin yetkilendirmesi aşağıdaki gibi yapılır.
chmod 700 /home/prf1sftp/
chmod 700 /home/prf2sftp/
5. sftp openssh üzerinden çalışmaktadır. Bu nedenle kullanıcı ve grup tanımlarını yaptıktan sonra “/etc/ssh/sshd_config” dosyamızı herhangi bir editör programı (vi,vim,nano…vb.) ile açarak dosyanın en sonuna aşağıdaki satırlar eklenir.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
NOT: Bu adımda dikkat edilecek kısım default açık olan aşağıdaki satırın başına # işareti ekleyerek kapatılmalıdır.
#Subsystem sftp /usr/libexec/openssh/sftp-server
6. Tanımımızın aktif olabilmesi için ssh servisi/deamon restart edilir.
systemctl restart sshd
service sshd restart (debian tabanlı linux için)
Kullanıcı Bazlı SFTP Kullanıcı Tanımı
· Grup bazlı sftp kullanıcı oluşturma ile ortak adımları tekrar yazmayacağım.Grup bazlı tanımdan farkı;
- grup oluşturma (1. Adım) ihtiyacımız bulunmamaktadır.
- 5. adımda konfigürasyon farklılaşmaktadır. Aşağıda uygulama adımları belirtilmiştir.
1. Grup bazlı SFTP kullanıcı tanımlama bölümündeki 2. ,3. Ve 4. adımlar her iki kullanıcı için aynen uygulanır.
2. Her iki kullanıcı için “/etc/ssh/sshd_config” dosyasının en sonuna aşağıdaki satırlar eklenir ve 6. Adım uygulanarak ssh servisi restart edilir.
“#Subsystem sftp /usr/libexec/openssh/sftp-server” satırının yorum olarak düzenlenmesi (# işareti eklenmesi) unutulmamalıdır.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Subsystem sftp internal-sftp
Match User prj1sftp
ChrootDirectory %h
ForceCommand internal-sftp
Subsystem sftp internal-sftp
Match User prj2sftp
ChrootDirectory %h
ForceCommand internal-sftp
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Sonuç olarak ;
Grup bazlı tanımda; grup oluşturma ve “/etc/ssh/sshd_config” dosyasına konfigürasyon eklenmesi bir seferliğine yapılan operasyonlardır.Yeni kullanıcı ihtiyacı olduğunda, kullanıcı tanımı yapıldıktan sonra oluşturulmuş olan mevcut gruba üye yapmanız yeterli olacaktır.
Kullanıcı bazlı tanımda ise kullanıcıyı tanımladıktan sonra “/etc/ssh/sshd_config” dosyasının sonuna her yeni kullanıcı için konfigürasyon ekleyerek ssh servisinizi restart etmeniz gerekecektir.
Her iki konfigürasyonda oluşturulan kullanıcı ile sftp yaptığımızda sınırlandırılmış olarak tanımlanmış olduğunu (sistem dizinleri arasında geçiş yapılamadığını) aşağıdaki resimde görebiliyoruz.
NOT 1: openssh-server paketinin kurulu olduğu varsayılmıştır.Kurulu değilse işletim sisteminizin paket yöneticisi (yum/dnf/apt/rpm/dpkg) ile kurulum yapılmalıdır.
NOT 2: sftp-server yerine internal-sftp kullanmamızın nedeni ChrootDirectory kullanmak içindir. sshd_config manuel’inde ilgili açıklamayı görebiliriz.
Faydalı olması dileğiyle ,
İyi Çalışmalar Dilerim.