SSH sunucusundaki bir kullanıcıyı yalnızca SSH TUNNELING ayrıcalıklarına izin vermesini nasıl kısıtlayabilirim ? Yani, SSH ile giriş yapmış olsalar bile komutları çalıştıramazlar.
Linux sunucularım Ubuntu 11.04 ve OpenWrt.
SSH sunucusundaki bir kullanıcıyı yalnızca SSH TUNNELING ayrıcalıklarına izin vermesini nasıl kısıtlayabilirim ? Yani, SSH ile giriş yapmış olsalar bile komutları çalıştıramazlar.
Linux sunucularım Ubuntu 11.04 ve OpenWrt.
Yanıtlar:
Sunucu tarafında, kullanıcı kabuklarını ayarlayarak bunu kısıtlayabilirsiniz /bin/true
. Bu, kimliklerini doğrulamasına izin verecek, ancak çalıştırması için bir kabuk almadıkları için aslında hiçbir şeyi çalıştırmayacaklar. Bu, SSH'nin onlara sunduğu şeylerin alt kümesi ile sınırlı kalacakları anlamına geliyor. Eğer liman yönlendirme sunuyorsa, yine de bunu yapabilecekler.
Müşteri tarafında muhtemelen ile bağlantı kurmak isteyeceksiniz -N
. Bu, istemciyi kabuk gibi uzak bir komut için SORULMAYI durdurur, sadece doğrulama bölümü bittikten sonra durur. Bunu işaret eden yorumcular için teşekkürler.
useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
.
Aşağıdakiler, X11 ve SSH ajanı soket iletimlerinin ayrıca izin vermeme avantajına sahiptir; bu, Caleb'lerde yine de izin verilebilir. Diğer bir avantaj, eğer kullanıcı varsayılan kabuğunu başka bir yolla değiştirebiliyorsa, bunun SSH erişimini sadece TCP iletimleri ile sınırlandırması beklenir.
Aşağıdakileri içine yerleştirin /etc/ssh/sshd_config
:
Match User that-restricted-guy
AllowTcpForwarding yes
X11Forwarding no
AllowAgentForwarding no
ForceCommand /bin/false
Kullanıcının that-restricted-guy
SSH etkin makineniz üzerinden herhangi bir TCP bağlantısını iletmesini sağlamak için (bu makineye localhost
bağlantı, hatta bu makineden diğer makinelere bağlantı bile).
Daha da kısıtlayıcı olmasını istiyorsanız (ki bu iyi bir fikirdir) şunları da yapabilirsiniz:
Match User even-more-restricted-guy
PermitOpen 127.0.0.1:12345
X11Forwarding no
AllowAgentForwarding no
ForceCommand /bin/false
Bu, kullanıcının even-more-restricted-guy
yalnızca 127.0.0.1 TCP port 12345'e (SSH özellikli makinenizde görülebildiği gibi) bağlantıları iletmesini sağlar.
Kullanıcı normal olarak bağlandığında, şimdi hiçbir zaman bağlantısı /bin/false
kesilecek, ancak 1 kodu ile anında çıkacak olan komut tetikleneceği için hemen bağlantısı kesilecektir. Bundan kaçınmak ve yönlendirme bağlantınızı açık tutmak için -N
bayrağı ssh
komuta işaretleyin . Bu herhangi bir komut çalıştırmaya çalışmaz, ancak yine de TCP iletme ayarlarına izin verir.
İkinci kurulumda çalışması gereken bir ileri komut örneği:
ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine
İnsanların, ssh sürümünüzün onu destekleyecek kadar yeni olduğunu varsayarak gruplarını eşleştirerek ne yapabileceklerini kontrol edebilirsiniz (openssh 5.x +).
Temel olarak, onlara sftp kullanıcısıymış gibi davranıyoruz, ancak tcp yönlendirmesine izin veriyor ve isteğe bağlı olarak iletebilecekleri hedefleri belirtiyoruz . Onlara bir ev dizini verirseniz, ancak altında herhangi bir dizin oluşturmazsanız, dosyalara izin veremezler çünkü dosyalara izin veremezler.
Match Group nicepeople
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
GatewayPorts no
ChrootDirectory /opt/dummy_location/%u
ForceCommand internal-sftp
AllowTcpForwarding yes
PermitOpen 192.168.0.8:22
PermitOpen 192.168.0.5:8080
# Or leave out the PermitOpen to allow forwarding to anywhere.
HostbasedAuthentication no
RhostsRSAAuthentication no
AllowAgentForwarding no
Banner none
Bu Eşleme Grubu bloklarını, farklı davranış veya kısıtlamalar sağlamak istediğiniz her grup için tekrarlayabilirsiniz .
IPtables kullanarak bu kişinin ağda nereye gidebileceğini de kontrol edebilirsiniz.
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT
Bu, "nicepeople" grubunun GID'nin 500 olduğunu varsayar.
Yukarıdaki ssh seçeneklerinden bazıları openssh'ın eski sürümlerinde bulunur, ancak Eşleme Grubu bölümünde bulunmaz. Maç Grubu OpenSSH 4.x ve daha önceki sürümlerde çok sınırlıdır.