Amazon EC2 Centos'taki '/ var / www / html / website_abc' klasörüne SFTP / FTP erişimi olan kullanıcı nasıl eklenir?


19

Olası Çoğaltma:
Linux dizin izinleri

Bazı üçüncü taraf geliştiricilerle çalışıyorum ve üzerinde çalıştıkları bir web sitesi için kök klasöre SFTP (veya FTP) erişimi vermek istiyorum, '/var/www/html/website_abc'böylece dosyaları oraya yükleyebilirler. Diğer web sitelerimi aynı EC2 örneğinde barındırdığımı unutmayın '/var/www/html/website_xyz'.

Sadece tek bir EC2 örneğinde birden fazla web sitesi ile çalıştığımı vurgulamak için, web sitelerinin yapısı aşağıdaki gibidir:

/ var / www / html /
/ var / www / html / website_abc
...
/ var / www / html / website_xyz

Hedeflerim şöyle:

  • 'Adeveloper' kullanıcısı '/ var / www / html / website_abc' ve yalnızca '/ var / www / html / website_abc' erişimine sahiptir
    • Kullanıcı 'uygun' kullanıcı SFTP (veya FTP) oturum açmak için kullanıcı adı olarak 'adeveloper @ [elastik IP]' kullanacak, doğru mu?
  • 'Adeveloper' kullanıcısının '/ var / www / html /' veya EC2 örneğimdeki diğer dizinlere erişimi yok
  • Özel anahtar dosyası nasıl olur?
    • Özel anahtar dosyamı üçüncü taraf geliştiricilere aktarıyor muyum? Bunu yapmak tavsiye edilir mi?
    • Onlar için farklı bir özel anahtar dosyası oluşturmanın veya bunun yerine kullanıcı adı ve şifre ile giriş yapmalarına izin vermenin bir yolu var mı?

Arama yaptım, ancak çoğu kişi zaten WinSCP'yi kullanabildiğim SF2 üzerinden EC2'ye nasıl erişileceğinden bahsediyordu.

Açıklamalar:

  • /var/www/html/website_abc'Yazma' izni olan şeyleri yükleyebilmek için 'yeterli' olmalıyım
  • Altında herhangi bir dosya / dizin için 'yazma' iznine sahip olmamak için 'yeterli' /var/www/html/ve hatta ideal olarak 'okuma' iznine ihtiyacım yok
  • Ancak, burada büyük bir sorun var gibi görünüyor:
    • /var/www/html/bu benim DocumentRoot klasörüm olduğu için zaten 777 iznine sahip. Peki, 'uygun' diğer web siteme erişmesini nasıl durdurabilirim?

Kısmen çözdüm, OpenSSH kullanarak hedeflerime ulaştım (/ var / www / html / website_abc / içinde .ssh klasörü oluşturdum ve özel anahtar üretip üçüncü taraf geliştiricilere verdim). AWS'nin bana verdiği özel anahtar dosyasını asla vermemem gerektiğini de öğrendim. Hala chroot öğreniyor.


1
Üzgünüm @lain ama beni yanlış anlamış olmalısın. Sanırım böyle yanlış yargılamadan daha anlamlı bir şey yapmak için zaman harcayabilirsiniz. Belki de sorumu dikkatlice okursanız, SSH / SFTP ile Linux dosya / klasör izinlerinden daha fazla ilgisi olurdu, ya da daha çok arasındaki bir karışıklıktı (neden kafam karıştı? Bilmiyorum, bu yüzden Yardıma ihtiyacım vardı). Bu, gördüğünüz gibi diğer iş parçacığının tam bir kopyası değildir. Her neyse, OpenSSH kullanarak hedeflerime ulaşmayı başardım. Hala Tom H ve bazı arama sonuçları tarafından önerildiği gibi chroot öğreniyorum. Teşekkürler
ericn

"AWS'nin bana verdiği özel anahtar dosyasını asla vermemem gerektiğini de öğrendim" Neden .....
Michael Bailey

Yanıtlar:


11

Varsayılan olarak, ssh veya telnet gibi bir uzak kabuk veya sftp gibi komutlar için etkileşimli bir uzaktan oturum sağlayan hizmetler, yerel bir kullanıcının izinlerine sahip oldukları herhangi bir dizine geçmesine ve erişim sahibi oldukları herhangi bir dosyanın kopyasını almasına izin verir.

Genel bir güvenlik yapılandırması olarak bu talihsiz bir durumdur çünkü dünya çapında okunabilir olan birçok dosya ve dizin vardır. Örneğin, burada bazı uzak CentOS kutusunda kök olmayan bir kullanıcı var;

$ cd /etc
-bash-3.2$ ls -1
acpi
adjtime
aliases
...

Örneğin, ideal olarak yerel erişim sağlamak istediğiniz bazı bilinmeyen kullanıcılardan kısıtlamak isteyeceğiniz pek çok şeye erişebilirim.

İşte /etc/passwddosyada yapılandırılmış tüm yerel kullanıcılara bakıyorum ;

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

Unix sistemleri , kullanıcının dosya sistemi hiyerarşisindeki bir dizine chrootsıfırlanmasına izin veren komutu sağlar. /Burada "daha yüksek" dosyalara ve dizinlere erişemezler.

Ancak sizin durumunuzda, uzak kabuk hizmeti tarafından uygulanan bir sanal kroot sağlamak uygun olacaktır. sftp, yerel bir kullanıcıyı, sistemdeki bir yapılandırmayı kullanarak dosya sisteminin belirli bir alt kümesiyle sınırlayacak şekilde kolayca yapılandırılabilir.

dolayısıyla senin durumunda, istediğiniz içine kullanıcı dizininde.chrootadeveloper/var/www/html/website_abc

Kullanıcınızın bunları aşağıdaki /var/www/html/website_abcgibi alt dizine sınırlaması için bir chroot dizini ayarlayabilirsiniz /etc/ssh/sshd_config;

Bu şey 4.8? 'Den sonra opensh-server gerektirir, bu yüzden muhtemelen CentOS 6.2 gerektirir

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(test edilmedi, man sshd_configsözdizimini onaylama konusuna bakın )

ve sonra bu kullanıcıları sftp grubuna ekleyin;

 groupadd sftp
 usermod -d /var/www/html/website_abc adeveloper
 usermod -G sftp adeveloper

Paylaşılan anahtarlarla ilgili

daha iyi kullanıcılar için ek bir anahtar çifti oluşturmalı ve bunu danışmanınıza göndermelisiniz. (veya alternatif olarak, ortak anahtarlarınızı göndermelerini ve için yetkili_anahtarlar dosyasına eklemelerini isteyin adeveloper)

özel anahtarınızı asla bırakmayın, bu yüzden özel olarak adlandırılır ;-)

geleneksel ftp alternatifleri

vsftp / proftp etc de chroot yapılandırmalarını destekler, ancak bu günümüzde ssh tabanlı yapılandırmalar normal yoldur ve ftp desteği yalnızca tarihseldir.

burada öğreticilere birkaç bağlantı var;
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229

http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny


Şu ana kadar kroot bulamadım ama hala öğreniyorum ve henüz pes etmedim. Yine de OpenSSH kullanarak yukarıda belirtilen hedeflerime ulaşmayı başardım. Tekrar teşekkürler
ericn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.