Linux Sunucularda SFTP Kullanıcı Tanımlama

Hülya Adak
Turk Telekom Bulut Teknolojileri
4 min readMay 13, 2022

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

RESIM-1 Oluşturulan kullanıcılar gruba dahil

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

RESIM-2 Kullanıcı home dizini yetki görünümü

*Root olarak göreceği dizinin üst dizin yetkilendirmesi aşağıdaki gibi yapılır.

chmod 700 /home/prf1sftp/

chmod 700 /home/prf2sftp/

RESIM-3 Kullanıcı home üst dizin yetki görünümü

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.

RESIM-4 Restricted SFTP kullanıcı dizin değiştirme testi

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.

RESIM-5 sshd_config manuel subsytem açıklama

Faydalı olması dileğiyle ,

İyi Çalışmalar Dilerim.

--

--