Yalnızca belirli klasörlere erişme iznine sahip bir SSH kullanıcısı oluşturmak için


47

SSH'yi yükledim, ancak Ubuntu'da oturum açmak için orijinal hesabımı kullanırsam çok fazla izne sahip olduğumu öğrendim.

Kullanıcının yalnızca Ubuntu'daki belirli klasörler için izinlere sahip olmasını kısıtlamak istiyorum. Böyle bir kullanıcıyı nasıl yapılandırabilirim?

Yanıtlar:


49

Bu basit. Sadece giriş dizini, erişebilmeniz için ihtiyacınız olana ayarlanmış yeni bir kullanıcı oluşturun (bu komutun sudokök kabuğun altında veya altında olması gerekir ):

adduser --home /restricted/directory restricted_user

Bu bir kullanıcı yaratacak restricted_user, dizin /restricted/directoryve dizindeki izinler kullanıcının yazabileceği şekilde ayarlanacaktır. Varsayılan olarak başka bir dizine yazma yeteneğine sahip olmaz.

Eğer dizininiz zaten varsa, eklenmiş adduserbir --no-create-homeseçenekle komutu çalıştırabilir ve izinleri manuel olarak (ayrıca root haklarıyla da) ayarlayabilirsiniz:

chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory

Dünyaca yazılabilir dizinleri bile bu kullanıcı için erişilemez duruma getirmeniz gerekiyorsa, iki seçenek vardır.

1) Kullanıcıya etkileşimli bir kabuk oturumu sağlamak istiyorsanız, bir chroot hapishanesi oluştururken bu kılavuzu izlemeyi düşünün (içinde /restricted/directory).

Bundan sonra, aşağıdakini aşağıdakilere ekleyin sshd_config:

Match user restricted_user
  ChrootDirectory /restricted/directory

2) Bağlantının bitiş noktası ile sunucunuz arasındaki dosyaları kopyalaması için ona ihtiyacınız varsa, her şey çok daha kolaydır. Şunun sonuna şu satırları ekleyin sshd_config:

Match user restricted_user
  ForceCommand internal-sftp
  ChrootDirectory /restricted/directory

Subsystem       sftp    internal-sftp

Ardından, başına Subsystem sftp /usr/lib/openssh/sftp-serverbir ( #) işareti koyarak .

SSH sunucunuzu yeniden başlattıktan sonra (yeniden başlatma sırasında etkileşimli oturumları sonlandırmaz, bu nedenle bir şeyi yanlış yapılandırmış olsanız bile güvenlidir; ayrıca, hala oturum açabildiğinizi kontrol etmeden önce çalışan oturumunuzu kapatmaz), her şey çalışmalıdır. istendiği gibi.


1
Denedim ama görünen o ki hala cd .. ve üst dizine göz atabiliyorum. ve üst dizinde vi a.txt kullandığımda, şunu gösteriyor: devam etmek için enter veya command tuşuna basın ve vi'den çıkamıyorum
Foolish

1
Kullanıcının yalnızca sshfs erişimi olması gerekiyorsa, seçenek 2'yi kullanabilir miyim?
flickerfly

1
Yazma iznim olmadığı sürece her şey yolunda gider. Bu sınırlı dizine ilişkin yazma iznini nasıl ayarlayabilirim? Chmod 775 kullanırsam, kullanıcı artık giriş yapamaz.
İsmim-

3
Subsystem sftp internal-sftpSatırı ikinci örneğinizde Matchbloğun üzerine yazmalısınız . Aksi halde ssh bir hata çıktısı alır ve başlamaz.
Tik0

1
Spoiler uyarısı: scp ile çalışmıyor
bisiklet

5

Belirli bir dizinde dolaşamayan (örneğin, üst dizine vb.) Kısıtlı bir kullanıcı oluşturmanın ve sınırlı / seçili bir komut kümesine sahip olmanın en kolay yolu, bir Kısıtlı Kabuk kullanmaktır. Ref:

http://man.he.net/man1/rbash

İlk önce rbash(kök kullanıcı olarak çalıştırma) adlı bir sembolik bağlantı oluşturun .

ln -s /bin/bash /bin/rbash

Sonra bu Sınırlı Kabuk ile normal bir kullanıcı oluşturun ve ana dizini istediğiniz klasöre ayarlayın:

useradd -s /bin/rbash -d /home/restricted_folder username

Kısıtlanmış Kabuk olmasa bile, bu kullanıcıyı açıkça sudoer listesine veya herhangi bir özel gruba eklemezseniz, varsayılan olarak sınırlandırılır.

Kısıtlanmış Kabuk ile aşağıdakilere izin verilmez veya uygulanmaz:

  • cd ile dizinleri değiştirme

  • SHELL, PATH, ENV veya BASH_ENV değerlerini ayarlama veya ayarlama

  • / içeren komut adlarını belirtme

  • a / as argümanı içeren bir dosya adı belirtmek. yerleşik komut

  • Bir eğik çizgi içeren dosya adını, hasp builtin komutuna -p seçeneğinin argümanı olarak belirtme

  • Başlangıçta kabuk ortamından işlev tanımları alma

  • SHELLOPTS'ın başlangıçta kabuk ortamından ayrıştırılması

  • >,> |, <>,> &, &> ve >> yönlendirme işleçlerini kullanarak çıktının yönlendirilmesi

  • Kabuğu başka bir komutla değiştirmek için exec builtin komutunu kullanma

  • enable yerleşik komutuna -f ve -d seçenekleriyle yerleşik komutları ekleme veya silme

  • Devre dışı bırakılmış kabuk yerleşiklerini etkinleştirmek için enable builtin komutunu kullanma

  • komut yerleşik komutuna -p seçeneğini belirterek

  • set + r veya set + o ile kısıtlanmış modun kapatılması.

Bu kısıtlamalar, başlangıç ​​dosyalarından sonra uygulanır.

Ayrıca / İsteğe bağlı olarak, kullanıcıyı sınırlı / seçilmiş bir komut kümesiyle kısıtlamak için, söz konusu kullanıcıyla salt okunur bir .bash_profile oluşturabilirsiniz.

PATH=$HOME/bin

ve bu kullanıcıya ~ / bin klasörüne izin verdiğiniz komutları symlink:

ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm

vb.

HTH


/ root dizini içeren dosya sistemindeki herhangi bir dosyayı bulabilir ve bu dosyaları okuyabilirim. Kullanıcı klasörü dışındaki herhangi bir şeyi görme veya herhangi bir ağ paketini yakalama veya okuma / var / log içeriğini okuma erişimini nasıl daha fazla kısıtlayacağınızı merak ediyorum
16851556
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.