Sunday, March 2, 2014

SFTP Chroot ile kısıtlı ve güvenli erişim sağlama

Sunucumda bulunan www.truvakitap.com sitesinin kredi kartı ödeme modülünün güncellemesi için erişim yetkisi vermem gerekiyor. Erişimi isteyen firma FTP erişimi istedi ben de FTP yerine daha güvenli olan SFTP (Secure FTP) erişimi vermeyi seçtim. Erişimi isteyen firmanın sadece truvakitap web dizinine erişmesi için chroot ile kısıtlama yapacağız.

benden tavsiye, var olan bir kullanıcıyı değiştirmek yerine önce yeni bir kullanıcı yaratın
useradd myuser
mkdir /home/myuser
usermod -d /home/myuser myuser
passwd myuser

/home/myuser  dizinin haklarını ayarlayalım.
chown root:root /home/myuser
chmod 755 /home/myuser

/home/myuser dizinin root:root olması önemli! Eğer myuser:myuser olursa ayrıca sftp çalışmayacaktır! myuser:root veya root:root olması gerekiyor çalışması için güvenlik için root:root yapın.

shell atanmasını değiştirelim 
usermod -s /bin/false myuser

şimdi sftp erişimi için yeni bir grup oluşturalım
addgroup sftpusers

myuser'ın grubunu değiştirelim
usermod -g sftpusers myuser

şimdi ssh erişimi deneyelim
ssh myuser@truvakitap.com
Welcome to Ubuntu xxxx
Connection to truvakitap.com closed

kullanıcı önce login oldu  "Welcome to Ubuntu" yazısı çıktı sonra shell'i /bin/false olduğu için bağlantıyı kopardı.

Şimdi /etc/ssh/sshd_config dosyasını edit edelim
öncelikle aşağıda ki satırı bulup başına # koyun
#Subsystem sftp /usr/lib/openssh/sftp-server
ve şunu ekleyin
Subsystem sftp internal-sftp

Şimdi dosyanın en altına aşağıdaki komutları ekleyin
Match Group sftpusers
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
ve ssh restart
service ssh restart

şimdi ssh erişimini bir daha deneyelim
This service allows sftp connections only.
Connection to truvakitap.com closed.

artık hoşgeldin Ubuntu'dan önce ssh bizi baştan kabul etmeden sadece sftp'ye iizn veriyorum deyip attı.

şimdi ssh yerine sftp komutu deniyelim veya direk bir SFTP istemcisi kullanın örneğin Filezilla'yı kullanabilirsiniz.
sftp myuser@truvakitap.com
sftp>

evet içerdeyiz fakat bir sorun var kullanıcı sistemde ki tüm dizinleri görebilir durumda şu an biz onu kendi /home dizinine hapsetmek istiyoruz.
O zaman aşağıda ki kırmızı satırı ekliyelim.
Match Group  sftpusers
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

ssh restart yapalım
service ssh restart

tekrar sftp deneyelim vola! artık başka dizinleri gezinme yok!

Şimdi asıl erişim vermek istediğiniz diziniyeni kullanıcının home dizinine   bağlamamız gerekiyor.
örneğin ben var olan /var/www/truvakitap/public dizinini bağlayacağım.
yeni bir public dizini oluşturun
mkdir /home/myuser/public
şimdi bağlayalım
mount --bind /var/www/truvakitap/public  /home/myuser/public

Şimdi Filezilla'dan ayarları yaptım başarı ile giriş yaptım
Dosya yüklemeyi denedim Filezilla'dan
"Could not transfer" hatası aldım.

truvakitap dizinin hakları www-data:www-data olması problem çıkardı

chmod -R g+s /home/myuser/public
g+s ile yaratılan dosyaların dizinin kendi grubuna ait olmasını sağladık
Şimdi tekrar deneyelim Filezilla'yı.
Dosya transferi başarılı :-)
Yeni oluşan dosyalar muser:www-data olarak oluşacaktır.
Fakat var olan www-data:www-data dosyalarını SFTP üzerine yazamaz. Üzerine de yazsın istiyorsanız
chown -R myuser:www-data /home/myuser/public yaptığımızda artık
/var/www/truvakitap/public altında ki dosyalar www-data:www-data'dan myuser:www-data dönüşür ve üzerine yazabilirsiniz.

No comments:

Post a Comment