Soru 1
Sorum şu: Komutu, üretilen ortak anahtardaki bu SFTP aktarımıyla nasıl kısıtlayabilirim?
Bunu yapmak için 2 yöntem vardır.
1. - sshd ile kısıtlama
Bu yöntem, SSH arka plan programınızda SFTP özelliğinin ayarlanmasını içerir sshd
. Bu, /etc/ssh/sshd_config
yapılandırma dosyası aracılığıyla kontrol edilir . NOT: Bu, kullanıcının backup
sunucuya SFTP'sine izin verilmesini kısıtlar .
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
2. - yetkili_anahtarlarla kısıtlama
Bu yöntem sshd_config
dosyada herhangi bir değişiklik içermez . Sorunuzda command=
daha önce bahsettiğiniz özellik sayesinde bir kullanıcıyı + SSH anahtarını tek bir komutla sınırlayabilirsiniz . Hile hangi komutu eklediğinizde. command=
SFTP sunucusunu, sshd_config
dosyanızda SFTP sunucusunu kurmakla aynı etkiye sahip olan bu satıra koyabilirsiniz .
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
NOT: kullanıcının yazma erişimi varsa, ~/.ssh/authorized_keys
okuyabilir ve / veya değiştirebilir. Örneğin, onu indirebilir, düzenleyebilir ve sıyırma işlemini geri yükleyebilir commmand=...
ve kabuk da dahil olmak üzere ona izin verilmeyen komut erişimi verebilir . Kullanıcının yazma erişimi varsa, ~/.ssh
dosyanın bağlantısını kaldırabilir ve yeniden oluşturabilir ya chmod
da yazma erişimi oluşturabilir. ~/.ssh/authorized_keys
Dosyaları kullanıcı tarafından yazılamayan bir yere koymak gibi birçok olası çözüm vardır, örneğin :
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
Soru 2
Dinamik bir IP adresinde olduğum için, IP'im her değiştiğinde "eksik bilinen ana bilgisayar" sorununun üstesinden nasıl gelebilirim?
Bu daha zordur ancak dosya from=
içindeki özelliği kullanarak da yapılabilir authorized_keys
. Burada sadece ana bilgisayardan erişimi kısıtlıyoruz somehost.dyndns.org
.
from = "somehost.dyndns.org", komut = "/ usr / libexec / openssh / sftp-server", bağlantı noktası yönlendirme yok, X11 yönlendirme yok, ajan yok yönlendirme, no-pty ssh-dss AAAAC8ghi9ldw == yedekleme @ host
command=
SSH anahtarının kullanımını daha da sınırlayacağından, 'den sonraki ek ayarlar da aynı derecede önemlidir.
özelliklerin dökümü
from='hostname1,hostname2,''
- Belirtilen IP veya ana bilgisayar adı modellerinden erişimi kısıtlar
command='command'
- Kimlik doğrulamasından sonra belirtilen komutu çalıştırır
no-pty
- Bir pty ayırmaz (etkileşimli girişe izin vermez)
no-port-forwarding
- Bağlantı noktası iletmeye izin vermez
no-X11-forwarding
- kullanıcı X11 ekran GUI'lerini kaldıramaz
no-agent-forwarding
- kullanıcı bu ana bilgisayar üzerinden diğer dahili ana bilgisayarlara yönlendiremez
"Bilinen eksik ana makineler" hakkındaki mesajdan kurtulmak için, aşağıdaki gibi bağlandığında istemciye bu SSH seçeneğini ekleyebilirsiniz:
$ ssh -o StrictHostKeyChecking=no ....
ssh_config
Bu anahtarla ilgili tüm ayrıntılar için kılavuz sayfasına bakın .
Kullanıcının kabuğunu kısıtlama
Yukarıdaki her iki çözüm için de, backup
bu kullanıcının kabuğundaki /etc/passwd
dosyada da sınırlama yaparak kullanıcıyı kilitlemek isteyeceksiniz . Genellikle bunu ayarlamak istersiniz scponly
, ancak bunun için başka seçenekler de vardır. U & L Q & A bu başlıklı Bkz: " Eğer SCP için bir kabuk gerekiyor mu? " Bunu yapmanın yollarını.
Yukarıdaki # 1/sbin/nologin
' sshd_config
de belirtildiği gibi chroot özelliğini kullanmayı tercih ederseniz,' nın kullanımı da kullanılabilir . Ancak # 2'de özetlenen yöntemi kullanmayı seçerseniz , kullanıcının kabuğu için muhtemelen başka bir şey kullanmanız gerekir .scponly
/etc/passwd
BONUS - Yukarıdaki # 2'yi genişletme
Bu kullanıcı için bir dizi komutu göstermeniz gerekiyorsa bunu da yapabilirsiniz. Bunun gibi bir komut dosyası oluşturun /home/backup/commands.sh
:
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
Daha sonra authorized_keys
dosyayı şu şekilde ayarlarsınız:
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
backup
Kullanıcı daha sonra şöyle bu komutları çalıştırabilirsiniz:
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql
Referanslar