Sınırlandırılmış FTP hesabı nasıl oluşturulur ?

Hp-Ux

Çoğu zaman, sunucu üzerinde belli bir dizine dosya atmak, ya da çeşitli uygulamaların ya da diğer kullanıcıların bıraktığı dosyalara ftp ile erişilmek istenildiğine dair talepler gelir. Kullanıcının ihtiyacı sadece belli bir dizin üzerinde işlem yapmaktır. Normal bir kullanıcı hesabı ile ftp imkanı sağladığınızda burada dikkat edilmesi gereken bir nokta vardır. O da kullanıcı bu hesapla sunucu üzerindeki bütün dosya sistemine erişebilmektedir. İşte bu doküman sınırlandırılmış, kullanıcının belli bir dizine hapsedildiği ftp hesabının nasıl oluşturulduğunu anlatmaktadır.
Kullanılacak prosedür  ftp server yazılımına göre değişiklik gösterdiği için sunucunuzda hangisini çalıştırıyorsanız o prosedürü uygulamanız gerekiyor. wu-ftp, pro-ftpd,vsftpd  ve sftp ye göre uyarlanmış prosedürleri aşağıda bulabilirsiniz.

 


Wu-FTP


Öncelikle kullanıcıyı bir dizin içerisinde kısıtlandırabilmemiz için kısıtlandırılmış kullanıcılar grubunda olması gerekiyor. Bunun için yoksa böyle bir grup ekliyoruz.

#groupadd ftponly

Bu grubun bu şekilde atandığını ise /etc/ftpd/ftpaccess dosyasında belirtiyoruz. Bu dosya /etc altında yoksa kullanılmıyor demektir. Kullanıma almak için newconfig dizininden kopyalayıp gerekli satırı ekliyoruz.

    # cp /usr/newconfig/ /etc/ftpd/ftpaccess // dosya etc altında yoksa
    #  echo “guestgroup ftponly” >> /etc/ftpd/ftpaccess

Ftpd daemon unun ftpaccess dosyasını kullanmasını sağlıyoruz. Bunun için /etc/inetd.conf içerisinde ftp satırının sonuna –a ekliyoruz.

 

 ftp stream tcp6 nowait root /usr/lbin/ftpd  ftpd -l –a

Ve inetd konfigurasyon dosyasının tekrar okunmasını sağlıyoruz.

# inetd –c

Ssh ya da telnet ile sunucuya erişmemesi için passwd dosyası içerisindeki shell belirtilen kısma yalancı bir shell koymamız gerekiyor. Bunun için /usr/bin/ftponly dosyasını oluşturup içerisine exit komutunu ekleyip, çalıştırılabilirliğini ayarlayalım.

# cat “exit 0” > /usr/bin/ftponly
# chmod 555 /usr/bin/ftponly
# chown bin:bin /usr/bin/ftponly

/etc/passwd dosyasında tanımlayacağımız kabuklar sistem üzerinde ön tanımlı kabuklardan olmalıdır. Farklı bir kabuk tanımlamak istiyorsak /etc/shells dosyasını oluşturup ön tanımlı kabuklarla birlikte oluşturduğumuzu da eklemeliyiz.

/sbin/sh
/usr/bin/sh
/usr/bin/rsh
/usr/bin/ksh
/usr/bin/rksh
/usr/bin/csh
/usr/bin/keysh
/usr/bin/ftponly

Artık kullanıcıyı ekleyebiliriz. Eklediğimiz kullanıcı sahip olduğu grubuyla  birlikte ftponly grubuna da dahil etmemiz gerek.

# useradd –m –g user –G ftponly –d /home/ftpusr/./ -s /usr/bin/ftponly ftpusr

Dikkat edeceğiniz üzere home dizinini verirken sonuna ./ ibaresi koyduk ve kabugu bizim oluşturduğumuz kabuğu verdik.
Kullanıcı ftp ile bağlandığında artık düştüğü dizin olarak home dizininin tam yolunu değil / kök dizini görmelidir. Yalnız dosyaları listeleyememektedir şu anki durumda. Çünkü tanımlı olduğu çevrede listeleme yapan bir komut mevcut değil. Bu yüzden ls komutunu home dizinine kopyalamamız lazım.

# cd ~ftpusr
# mkdir –p usr/bin
# cp /sbin/ls usr/bin/
# chmod –R 555 usr
# chown –R bin:bin usr

 

ProFTP

 

Proftp wu-ftp ye göre daha gelişmiş bir ftp sunucu yazılımıdır. Sınırlamak istediğimiz kullanıcılar bir grubun altında olması gerekiyor. Gerekli konfigurasyonun yapılabilmesi için ayar dosyası olan /usr/local/etc/proftpd.conf e her kullanıcının kendi home dizinine sıkıştırılması için alttaki satır eklenir. Ftponly kullanıcının olduğu gruptur. Dizini değiştirmek istersek ~yerine istediğimiz dizini yazabiliriz.

DefaultRoot    ~    ftponly

 

Bu işlemden sonra proftpd servisini yeniden başlatmamız gerekmektedir.

vsFTPD

vsFtpd ftp sunusunda ayar dosyasındaki ilgili satır değiştirilir.

# vi vsftpd.conf
 chroot_local_user=YES

Bu durumda bütün kullanıcılar kendi home dizinlerine hapsedileceklerdir. Hapsolmasını istemediğimiz kullanıcıları bir dosya içerisinde belirtip bu dosyayı aktif hale getirmemiz gerek.

chroot_list_enable=YES
chroot_list_file=/etc/vsftp_chroot_list

Bu dosya içerisinde jail olmamasını istediğimiz kullanıcıların listesi bulunmalı. Bu işlemden sonra vsftpd daemonunu yeniden başlatmamız lazım.

sFTP

1. Yöntem


HP-UX Secure Shell 5.xx versiyonundan itibaren sFTP içerisine chrooted ftp için bir ibare eklenmiştir. Aktif olması için sshd_config dosyası içerisinde bazı değişiklikler yapıp secure shell i tekrar başlatmak gerekiyor.
Subsystem sftp /opt/ssh/libexec/sftp-server satırını aşağıdaki şekilde değiştiriyoruz.

Subsystem sftp internal-sftp

Örneğin /newroot/ftpuser1 dizini jail yapmak istediğimiz dizin olsun. Ve Kullanıcı adımızın ftpuser1 olduğunu varsayarsak alttaki satırları sshd_config içerisine ekliyoruz.

Match user ftpuser1
ChrootDirectory /newroot/ftpuser1

Daha sonra Secure Shell i yeniden başlatıyoruz.

#/sbin/init.d/secsh stop;/sbin/init.d/secsh start

Bu konfigurasyonun çalışabilmesi için /newroot/ftpuser1 dizininin owneri root olması gerekiyor. Peki bu dizine ftpuser1 kullanıcısı nasıl yazacak derseniz orda bir sıkıntı var. Bunu da ftpuser1 dizini altında owneri ftpuser1 başka bir dizin açarak çözüyoruz. Kullanıcı buraya ftp yapıyor.

ChrootDirectory ibaresinden sonra %h %u gibi değişkenleri de kullanmamız mümkün. Bu durumda %h kullanıcıların home dizinlerini % u ise kullanıcı adlarını göstermektedir.


2. Yöntemde /opt/ssh/utils/ssh_chroot_setup.sh scripti ile kullanıcının home dizinini farkı bir dizin içerisine atıp, ihtiyaç duyacağı sistem dosyalarını bu dizine atılıyor. Kullanıcı ftp ile login olduğunda etc bin v.s. dizinleri görüyor fakat bu Dizinler işletim sisteminin kendi dizinleri değil kullanıcının home dizininin altındakilerdir.

sshd_config altında oluşturacağımız kullanıcı için girdi olduğunu varsayalım

Match user ftpuser1
ChrootDirectory /newroot/ftpuser1

Kullanıcıyı oluşturduktan sonra yukarda yolu verilen scripti çalıştırıyoruz. Ve Ekrana gelen menüden sftp konfigure etmesini seçiyoruz.  Root directory soran kısma da yukarda verdiğimiz root dizinini veriyoruz.

Enter the new root directory for ftpusr2 with absolute path (or press return for default(/newroot)): /newroot/ftpusr1

Secure Shell i yeniden başlatıyoruz.

#/sbin/init.d/secsh stop;/sbin/init.d/secsh start



 

Yorum ekle

Güvenlik kodu
Yenile