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
HP-UX