Chrooted SFTP kullanıcı yazma izinleri


10

Sadece sftp kullanıcıları ile bir kurulum var:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Aşağıdaki iletiyi secure.log dosyasına alıyorum:

fatal: bad ownership or modes for chroot directory

Match anahtar sözcüğü ile birlikte bazı güvenlik öğeleri gelir ... dizinlerin kök sahip olması gerekir ve dizinlerin chmod 755 (drwxr-xr-x) olması gerekir. Bu nedenle, yalnızca kullanıcı köküne yazılabilir ve ssh'ın güvenliği nedeniyle gruplar için yazılamayacak şekilde ayarlanmışsa, kullanıcının klasörlere yazma izinlerine sahip olması imkansız hale gelir.

Birisi etrafta iyi bir iş biliyor mu?


Do chrootKullanıcılar kendi ed ChrootDirectory? Erişebilirler mi?
John WH Smith

Yanıtlar:


2

Sunucumuzda aynı ayarlara sahibim. Aynı SSHD yapılandırmasını kullanıyoruz. Kullanıcıların ev dizinleri köklere aittir ve bunların içinde klasörler vardır documentsve public_htmlilgili kullanıcılara aittir. Kullanıcılar daha sonra SFTP kullanarak oturum açar ve bu klasörlere yazarlar (doğrudan eve değil). SSH'ye onlar için izin verilmediğinden, mükemmel çalışır. / Etc / skel / dizinindeki yeni kullanıcılar için hangi dizinlerin oluşturulacağını ayarlayabilirsiniz (en azından openSUSE içinde, diğer dağıtımlara pek aşina değilim).

Başka bir olasılık ACL ( openSUSE belgeleri ) olacaktır - kendi kullanıcı dizini için ilgili kullanıcı için yazma izni ekleyebilir.


1
Benim için Debian Jessie'de (8.10), kullanıcının evinde bir ACL ayarlamak işe yaramıyor. Kullanıcı SFTP ile giriş yapmaya çalıştığındapacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Drew Chapin

7

Son zamanlarda şu şekilde bir çözüm bulduk:

/ Etc / SSH / sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

dizin izinleri:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Şimdi /homekarşılar gereksinimleri ChrootDirectoryve sınırlı kullanıcılar tarafından listelenen edilemez, ancak sftponlykullanıcıların kendi ev dizinleri (her zamanki gibi ayarlanmış olup olmadığını giriş yapmaya mümkün olmayacaktır /home/$LOGNAME): chroot altında kendi dizinleri değil içerde /homeancak doğrudan altında root ( /).

geçici çözüm 1

Kısıtlı kullanıcıların evlerini chroot altında görünme biçimlerine ayarlayın:

root@server:~ # usermod -d /username username

caveate 1

Sınırsız kullanıcılara veya bazı yönetim komut kullandığı bash en tilde genişleme biri gibi olursa ~usernameo kadar genişleyecektir /usernamekastedilen olmadığı, şimdi.

Ayrıca, sftponlykullanıcıları oluşturan yöneticinin varsayılan olmayan ev kullanmayı hatırlaması gerekir. Bir script ile çözülebilir. Yöneticinin kullanmayı hatırlaması gereken.

geçici çözüm 2

Bu, kullandığımız öncekine bir alternatiftir:

root@server:~ # ln -s . /home/home

Bu, /homekendi dizin adına bir sembolik bağlantı oluşturmaktır . Şimdi chroot altında, chroot /home/usernameolmadan aynı dizine işaret eder. Sftp ile giriş yapan kısıtlı kullanıcı için olarak görünür /username. Bu dizin sahibine yazılabilir (kısıtlı kullanıcı). Kısıtlı kullanıcı, kardeşlerinden herhangi birinin üst veya ev dizinlerini ada göre listeleyemez.

Bir sftponlykullanıcı hakkında özel olan tek şey sftponlygruba katılımıdır . Geçici çözüm 1'den daha kolay başa çıktık.

caveates 2

  1. Bir giriş dizini içeren 'home' adlı kullanıcınız olamaz /home/home
  2. /homeHiyerarşiyi aşan ve sembolik bağlantıları izleyen komut dosyalarına dikkat etmelisiniz .

Merhaba artm ya da diğer okuyucular, bu eski bir yazı olduğunu biliyorum ama bana geçici çözüm 2 anlamak yardımcı olabilir misiniz? Kendi dizine (/ home / ftpuser /) hapsedilmesi gereken bir kullanıcı (ftpuser) var, bu ı can ı can ama / home / ftpuser 755 tabii ki olması gerekir. Kendi dizinde nad klasörleri oluşturmak için ftpuser gerekir. hangi symlink'i oluşturmam gerekiyor ve ChrootDirectory'mın değeri nedir?
Blatant

4

Kullanıcının giriş dizini içinde, içeri ve dışarı dizinler gibi bir yapı oluşturmanız gerekir. Bu dizinler kullanıcıya ait olmalı ve orada dosya ekleyip dosya alabilecek.


0

Aşağıdaki dizin yapısını oluşturmanız gerekir:

/ev kullanıcısı

/ home / user / home / user <- kullanıcının erişebileceği gerçek dizin

İsteğe bağlı olarak:

/home/user/.ssh/authorized_keys <- açık bir anahtarla kimlik doğrulaması yapmak istiyorsanız


0

@Artm (ki ben sadece test) cevap 'dizin izinleri' bölümüne referansla .. Ben buldum:

root@server:~ # chmod 111 /home <- Does not work

Sftp bağlantısının ubuntu üzerinde çalışmasına izin vermez, yalnızca her şeyde izinleri yerine getirir, yani 111.

Onu buldum:

root@server:~ # chmod 555 /home

Okuma ve Yürütme izinleriyle sftp bağlantısıyla çalışır, yani 555. Debian ve diğer tatların farklı olup olmadığından emin değilim, ancak ubuntu yüklemelerimde bu işe yarar.


0

Bir kullanıcı oluşturduğunuzda, chownher kullanıcı için her bir dir için sahipliği ayarlamanız gerekir .

Örneğin:

sudo chown usertest:groupsftp /home/rootsftp/usertest
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.