TL; DR - "Kısıtlamaları uygulama" cevabının en altına gidin
Kısıtlı kullanıcı ekleme iki bölümden oluşur: 1. Kullanıcı oluşturma 2. SSH arka planını yapılandırma (sshd)
Sshd'yi yapılandırma
SSH'nin olanaklarını bilmenin en iyi yeri ilgili kılavuz sayfalarını okumaktır:
SSH istemcisi nerede işlem yapabilir?
Bir şeyi kısıtlamadan önce, SSH'nin özelliklerini bilmeniz gerekir. Manuel sayfalara göz atma sonucu:
- Shell komutları yürütme
- Sftp üzerinden dosya yükleme
- Liman yönlendirme
- İstemci sunucuya bir (un) kullanılmış bağlantı noktası iletir
- Sunucu, bağlantı noktasını istemciye iletir.
- Sunucu, istemciye başka bir ana bilgisayarın bağlantı noktasını iletir (proxy-ish)
- X11 yönlendirme (ekran yönlendirme)
- Kimlik doğrulama aracısı iletme
- Bir tünel cihazının iletilmesi
Gönderen Kimlik bölümünde sshd (8) manuel sayfa :
Müşteri başarıyla kimliğini doğrularsa, oturumu hazırlamak için bir iletişim kutusu girilir. Şu anda müşteri, takma ad ayırma, X11 bağlantılarını iletme, TCP bağlantılarını iletme veya kimlik doğrulama aracısı bağlantısını güvenli kanal üzerinden iletme gibi şeyler talep edebilir
.
Bundan sonra müşteri ya bir kabuk ister ya da bir komutun yürütülmesini ister . İki taraf daha sonra oturum moduna girer. Bu modda, her iki taraf da herhangi bir zamanda veri gönderebilir ve bu veriler sunucu tarafındaki kabuk veya komuttan ve istemci tarafındaki kullanıcı terminalinden iletilir.
SSH özelliklerini kısıtlama seçenekleri
Davranış değiştiren dosyalar ve seçenekleri şunlardır:
~/.ssh/authorized_keys
- bağlanmasına izin verilen ve seçenek verilebilecek anahtarları içerir:
command="command"
- Kullanıcı tarafından verilen komut (varsa) dikkate alınmaz. İstemcinin, açıkça yasaklanmadıkça, TCP ve / veya X11 iletme belirtebileceğini unutmayın . Bu seçeneğin kabuk, komut veya alt sistem yürütme için geçerli olduğunu unutmayın.
no-agent-forwarding
- Bu anahtar kimlik doğrulama için kullanıldığında kimlik doğrulama aracısının iletilmesini yasaklar.
no-port-forwarding
- Bu anahtar kimlik doğrulama için kullanıldığında, TCP iletmeyi yasaklar
no-X11-forwarding
- "Bu anahtar kimlik doğrulaması için kullanıldığında X11 yönlendirmesini yasaklar."
permitopen="host:port"
- Yerel 'ssh -L' bağlantı noktasını yalnızca belirtilen ana bilgisayara ve bağlantı noktasına bağlanabilecek şekilde sınırlayın.
~/.ssh/environment
- Bu dosya giriş sırasında ortama okunur (varsa). Ortam işleme varsayılan olarak devre dışıdır ve PermitUserEnvironment seçeneği ile kontrol edilir
~/.ssh/rc
- Kullanıcının giriş dizini erişilebilir olmadan çalıştırılacak başlatma rutinlerini içerir.
/etc/ssh/sshd_config
- sistem genelinde yapılandırma dosyası
AllowAgentForwarding
- ssh-agent (1) iletiminin izin verilip verilmeyeceğini belirtir.
AllowTcpForwarding
ForceCommand
- "ForceCommand tarafından belirtilen komutun yürütülmesini zorlar, müşteri tarafından sağlanan herhangi bir komutu yok sayar ve varsa ~ / .ssh / rc komutunu çalıştırır. Komut, kullanıcının oturum açma kabuğunu -c seçeneği ile başlatır."
GatewayPorts
- "Uzak ana makinelerin istemci için iletilen bağlantı noktalarına bağlanmasına izin verilip verilmeyeceğini belirtir. Varsayılan olarak, sshd (8) uzak bağlantı noktası iletimlerini geridöngü adrese bağlar. Bu, diğer uzak ana makinelerin yönlendirilmiş bağlantı noktalarına bağlanmasını önler. GatewayPorts, belirtmek için kullanılabilir sshd, uzak bağlantı noktalarının geridöngü olmayan adreslere bağlanmasına, böylece diğer ana bilgisayarların bağlanmasına izin vermelidir. "
PermitOpen
:
TCP port iletmeye izin verilen varış yerlerini belirtir. Yönlendirme şartnamesi aşağıdaki formlardan biri olmalıdır:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
Çoklu boşluklar, boşluklarla ayrılarak belirlenebilir. 'Any' argümanı, tüm kısıtlamaları kaldırmak ve herhangi bir yönlendirme isteğine izin vermek için kullanılabilir. Varsayılan olarak tüm bağlantı noktası yönlendirme isteklerine izin verilir.
PermitTunnel
- Tun (4) cihazının yönlendirilmesine izin verilip verilmeyeceğini belirtir. Varsayılan 'hayır'
X11Forwarding
- X11 yönlendirmesine izin verilip verilmeyeceğini belirtir. Varsayılan 'hayır'
Kısıtlamaları uygulamak
Sistem genelinde yapılandırma dosyasının değiştirilmesi, /etc/ssh/sshd_config
parola tabanlı kimlik doğrulaması uygulandığında veya kısıtlamaların ~/.ssh/authorized_keys
yanlışlıkla kaldırılması durumunda bile yapılandırmanın uygulanmasına izin verir . Genel varsayılanları değiştirdiyseniz, seçeneklere uygun şekilde yorum yazmalısınız.
Match User limited-user
#AllowTcpForwarding yes
#X11Forwarding no
#PermitTunnel no
#GatewayPorts no
AllowAgentForwarding no
PermitOpen localhost:62222
ForceCommand echo 'This account can only be used for [reason]'
Şimdi bir kullanıcı ekle:
sudo useradd -m limited-user
ForceCommand
Kabuk bir şey yapmaz gibi /bin/false
(veya /bin/true
) gibi bir kabuğa benzemezse seçenek atlanabilir /bin/false -c [command]
.
Artık istemci, sunucunun geridöngü adresindeki 62222 numaralı bağlantı noktasına SSH üzerinden bağlanabilir (genel IP adresini dinlemez)
Devre dışı bırakılması AllowTcpForwarding
da kullanımına izin vermeyecek ve -R
böylelikle tek bir bağlantı noktasını iletmek için böyle kısıtlı bir hesabın kullanılmasını engelleyecektir. PermitOpen localhost:62222
İstemci mutlu bir şekilde bağlanabildiği ve dinleyebildiği için sunucudaki 62222 numaralı bağlantı noktasının hiçbir zaman kullanılmadığını varsayar.
Sistem genelinde yapılandırma ve devre dışı parola tabanlı kimlik doğrulamasında TCP iletme işlemine izin verilirse, tuş başına ayarları da kullanabilirsiniz. Düzenleyin ~/.ssh/authorized_keys
ve önce gelecek seçenekleri eklemek ssh-
(seçenekler ve arasında bir boşluk ssh-
):
command="echo 'This account can only be used for [reason]'",no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62222"
Doğrulamak
Beklendiği gibi çalıştığından emin olmak için bazı test durumlarının çalıştırılması gerekir. Aşağıdaki komutlarda, host
ayarlanmadıysa, gerçek girişle değiştirilmelidir ~/.ssh/config
. Komutun arkasında, istemcide veya sunucuda (belirtildiği gibi) yürütülmesi gereken bir komut gösterilir.
# connection closed:
ssh host
# connection closed (/bin/date is not executed):
ssh host /bin/date
# administratively prohibited (2x):
ssh host -N -D 62222 # client: curl -I --socks5 localhost:62222 example.com
ssh host -N -L 8080:example.com:80 # client: curl -I localhost:8080
sftp host
# should be possible because the client should forward his SSH server
ssh host -N -R 8080:example.com:80 # server: curl -I localhost:8080
# This works, it forwards the client SSH to the server
ssh host -N -R 62222:localhost:22
# unfortunately, the client can listen on that port too. Not a big issue
ssh host -N -L 1234:localhost:62222
Sonuç
Kontrol Listesi: SSH kullanıcısı şunları yapamaz:
- kabuk komutlarını çalıştır - bitti
- dosyalara erişmek veya sunucuya dosya yüklemek - yapılan
- Sunucuyu proxy olarak kullan (ör. web proxy) - bitti
- Güvenlik duvarı nedeniyle başka bir yerde halka açık olmayan yerel hizmetlere erişme - kısmen , istemci 62222 dışındaki bağlantı noktalarına erişemez, ancak sunucudaki 62222 bağlantı noktasını dinleyebilir ve bağlanabilir.
- Sunucuyu öldür - bitti
(bu kontrollerin SSH sunucusuyla sınırlı olduğunu unutmayın. Makinede savunmasız başka bir hizmetiniz varsa, olası bir saldırganın komut çalıştırmasına, sunucuyu öldürmesine vb. izin verebilir)