Kök erişimi ve ssh anahtarına dayalı kimlik doğrulaması için sudo gerektiren bir sistemde SFTP nasıl kullanılır?


26

Kök izinleri gerektiren dosyaları düzenlemek için SFTP kullanabilmek istiyorum.

SSH Anahtar tabanlı kimlik doğrulama - akıllı kartta rsa anahtar kullanıyorum.

Sistem kök düzeyinde komutları gerçekleştirmek için sudo gerektiriyorsa, bunu nasıl çözebilirim?

Yalnızca SFTP için sudo atlayarak bir yol oluşturabilir miyim?

Sudo ve anahtar kimlik doğrulamasını korumanın bir yolu var mı?

Ubuntu'ya bağlanmak için pencereler kullanıyorum. Mac’in Ubuntu’ya bağlanması ile de çalışması gerekiyor.

Sistem hizmetlerini yönetmek için SSH Tünelini nasıl yapacağımı biliyorum. Şu anda doğrudan kök kullanıcı girişini kullanıyorum, ancak şifre girişi devre dışı bırakılmış. Aynı anda sudo ve SFTP'nin nasıl kullanılacağını anlamadım. Kök olmayan bir kullanıcı olarak giriş yapmayı istemek ve daha sonra sudo kullanımını gerektiren en iyi uygulama, kayıtlara her komut için yükseltilmiş ayrıcalıklar tanındığını kaydeder.

Anahtar tabanlı kimlik doğrulaması kullanırken kendimle bu konuyla ilgilenmeli miyim, yoksa bu güvenlik / kayıt işlemlerinde önemsiz bir fark mı? Anahtar tabanlı kimlik doğrulama, kullanıcının seri numarasını günlüklere kaydeder ve kök kullanıcının her kullanıcıyı tanımlaması için birden çok anahtara sahip olabilirsiniz. Bu bana sudo kullanmakla aynı etki gibi gözüküyor. Yanlış mıyım?


2
Ben sadece kök hesabımı doğrudan anahtar tabanlı kimlik doğrulaması ile kullanırdım ve atlardım sudo.
Martin von Wittich

1
"Kök olmayan bir kullanıcı olarak giriş yapmayı istemek ve ardından sudo kullanımını gerektiren en iyi uygulama gibi görünüyor; çünkü günlükler, her komut için yükseltilmiş ayrıcalıklar verildiğini kaydeder." - ama buna değmez, çünkü kök ayrıcalıklara sahip olan bir kişi kütükleri yine de değiştirebilir.
Martin von Wittich

Kaç dosya
Nils

1
Sadece not etmek için sftp -s "sudo / usr / lib / openssh / sftp-server" targethost.fqdn 'nin bir doğru cevabı var. Sudo şifre gerektiriyorsa, nopasswd için özel bir komutu beyaz listeye ekleyebilirsiniz.
Mikko Ohtamaa

Yanıtlar:


7

SFTP, kullandığınız hesaptaki kısıtlamalarla dosya işlemlerine bir komut erişimidir. Daha fazla idari işlem yapmak için ssh kullanmalısınız, aynı anda sudo ve SFTP kullanımını da imkansız hale getirin. SFTP kullanarak kısıtlama olmadan tüm diske erişmeniz gerekiyorsa, bunu kök hesabını kullanarak yapın. Neyse, sftp ve ssh'de root ile aynı anda iki farklı seans kullanarak giriş yapabilirsiniz.

Güvenlik tuşları, güvenliği arttırır ve klavye girişi gerektirmeksizin günlüğe kaydetmeyi kolaylaştırır. Sadece giriş yapmanıza yardımcı olur, her hesap kullanıcısı için birkaç şifreniz olabilir ve aynı etkiye sahip olabilirsiniz.

EDIT: Unuttum: kullanıcı kimliğini 0 olarak atadıysanız, ancak aynı şekilde tehlikeli olduğu için herhangi bir anlam ifade etmiyorsanız, root ile aynı etkiye sahip başka bir hesap oluşturabilirsiniz. Birisi kök gibi giriş yapmaya çalışırsa şaşırtabilir, ama bunun dışında pek bir anlamı yoktu.


12

Alt sistemi sudo ile çağırmak benim için çalıştı.

Örneğin bir Ubuntu sunucusuna:

sftp -s "sudo /usr/lib/openssh/sftp-server" targethost.fqdn

2
Bu, yalnızca onu sudo yapmak için bir parolaya ihtiyacınız yoksa veya zaten bir sudo biletiniz varsa ve tty_tickets'i devre dışı bıraktıysanız çalışır. Çoğu modern kurulumda, ikisi de varsayılan değildir.
Çita

Bu, ec2 kullanıcısı olarak bağlandığınız ve sudo'yu şifresiz kullanabileceğiniz varsayılan Amazon Linux sistemlerine bağlantılar için mükemmeldir. +1, teşekkürler! (Amazon Linux'ta komutun biraz farklı olduğunu unutmayın sudo /usr/libexec/openssh/sftp-server.)
MarnixKlooster ReinstateMonica 25:16

Bu çözümü, doğrudan girişin devre dışı bırakıldığı başka bir kullanıcı olarak giriş yapmak için kapsamlı şekilde kullanıyorum (denetim ve giriş amaçları için). Karınca gibi araçların bu alt sistemi göstermemesi küçük bir şey. Bununla birlikte, asla kökünden sudo yapmamayı, ancak ihtiyaç duyduğunuz şeyi yapma yetkisine sahip başka bir kullanıcıya tavsiyelerde bulunabilirim . Başa çıkılması gereken sorun, tüm unix ortamlarının aynı olmaması ve sftp alt sisteminin @MarnixKlooster
YoYo

Amazon Linux için bütün komut şudur: "sftp - s 'sudo / usr / libexec / openssh / sftp-server' targethost.fqdn"
johntellsall

7

MartinVonWittich'in yukarıdaki yorumlarda önerdiklerinin ötesinde , sadece bu aktivite için özel bir SSH anahtar çifti kurabilir ve onları /root/.ssh/authorized_keyssadece tek bir komutla sınırlandırarak kök kullanıcının dosyasına ekleyebilirsiniz .

# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host

Bu, bu çiftin ilgili anahtarına sahip başka bir sistemin bu sisteme SFTP'ye kök olarak izin vermesini sağlayacaktır. Siz syslogve / veya secure.logdosyalarınızda hala bu bağlantının kaydını tutabiliyordunuz (dağıtımınızın bu günlük kaydı sağladığını varsayalım).

NOT: Bu yöntemde sunucuya erişen kişi, kartların açık alan erişimine sahip olacaktır, bu nedenle akıllıca kullanın. Daha iyisi okumaya devam edin ve bu kısıtlamayı, kısıtlı kısıtlamalar oluşturmak ve kök olarak belirli konumlara hedefli erişim sağlamak için chroot ve salt okunur erişim ile birleştirin.

chroot & salt okunur

Burada yararlanabileceğiniz diğer teknik, SFTP bağlantısını, SSH anahtarının kullanılmasına bağlı olarak kök olarak belirli konumlara chroot'lanacak şekilde sınırlamak olacaktır. Daha fazla ayrıntı için şu U&L Soru-Cevap bölümüne bakınız: " SFTP ile şifresiz yedeklemeyi kısıtla ".

Ayrıca ve sftp-serverve düğmelerini de kontrol edebilirsiniz .-R-d

 -d start_directory
         specifies an alternate starting directory for users.  The pathname 
         may contain the following tokens that are expanded at runtime: %%
         is replaced by a literal '%', %h is replaced by the home directory
         of the user being authenticated, and %u is replaced by the user‐
         name of that user.  The default is to use the user's home 
         directory.  This option is useful in conjunction with the 
         sshd_config(5) ChrootDirectory option.

 -R      Places this instance of sftp-server into a read-only mode.  
         Attempts to open files for writing, as well as other operations 
         that change the state of the filesystem, will be denied.

Hmm, ama emri sınırlamak sftp-serveronu daha güvenli kılmaz, değil mi? Bir saldırgan bu hesaba erişirse, SFTP'yi kullanarak kendine kolayca bir kök kabuğu verebilir. Bu yüzden komut sınırlaması güvenlik açısından oldukça işe yaramaz :)
Martin von Wittich

@MartinvonWittich - dahil ettiğim örnekte yok. Bu potansiyel göstermek için daha fazla oldu. Kesin kullanım durumlarını bilmeden, gerçek bir dünya örneği göstermek zordur. rootHerhangi bir biçimde SFTP erişimi vermek , özellikle chrooted olmadığında sadece sorun yaratır.
slm

3

Ben takip Basit yaklaşım sadece sftp oldu ve (bir sahne alan üzerinde dosya koymak mkdirile hedefe oradan dosyaları taşımak için SSH tekrar o zaman sunucu üzerinde izinlere sahip yeni bir dizin) ve sudo cpya sudo mv.


1

Benzer bir problemim vardı, vimdiff'ı, çoğunlukla benzer ana bilgisayar grubundaki konfigürasyon dosyalarını cssh ve sudo ile düzenlemek için kullanmak istedim ve çözümümü iş akışınıza uyarlayabilirsiniz.

sudoedit (sudo'nun bir kısmı), yazma izniniz olmayan bir dosyayı düzenlemek için normal bir kullanıcı olarak herhangi bir düzenleyiciyi kullanmanıza izin verir ve düzenleyiciyi bir ortam değişkeniyle belirleyebilirsiniz. sudoedit, dosyaları kopyalar, editörü kopyaların adlarıyla çağırır ve editörün çıkmasını bekler, sonra değiştirilen kopyayı bulunduğu yere geri kopyalar. bu yüzden düzenleme yapmayan bir 'editör' oluşturdum, sadece daha sonra kullanmak üzere dosyayı not eder ve bekler ve bu işaretçiyi kullanan bir paketleyiciye sarılır.

ilk dosya ~ / .bin / redit

#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $file = $ENV{HOME}.'/.var/redit/'.hostname();
sub cmkdir($){
    my $_=shift;
    mkdir $_ unless -d $_;
}
cmkdir $ENV{HOME}.'/.var/';
cmkdir $ENV{HOME}.'/.var/redit/';
foreach (@ARGV){
    my $fh;
    open $fh, '>', $file.'na' or warn;
    print {$fh} $_;
    close $fh;
    symlink $_, $file or die;
    print;
    <STDIN>;
    unlink $file or die;
    unlink $file.'na' or die;
}

ikincisi ~ / .bin / redit1

#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $h=hostname();
@ARGV=qw(host1 host2 host3 host4) unless @ARGV;
print join " ", qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;
exec qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;

Onları kullanmamın yolu, dört ana bilgisayarın hepsine bağlantı açmak için cssh kullanıp sonra da bir komut kullanmak EDITOR=~/.bin/redit sudoedit /etc/conf/fileve sonra farklı bir pencerede çalıştırmak ~/.bin/redit1, değişiklikleri yapmak, kaydetmek ve çıkmak, cssh'e geri dönmek ve değişiklikleri yapmak için enter tuşuna basın. ve sudoedit'ten çıkın (birden fazla dosyayı düzenlemediğim sürece bu durumda redit, listede bir sonraki dosyaya ilerler ve bir sonraki dosya için redit1'i tekrar çalıştırırsınız.)

Yaptığınız şey daha az karmaşık olduğundan, yalnızca bir uzak ana bilgisayarla çalıştığı için redit1'e ihtiyacınız yoktur, sftp editörünüzü host: .var / redit / host ya da eşdeğerine yönlendirebilirsiniz.


1

Yaptığım şey (ler) ftp yerine scp kullanmak ve sudo su -WinSCP'de kabuğunu değiştirmek bu Advanced \ SCP \ Shell'de, ancak bu sadece scp protokolüyle çalışıyor.


0

Sftp için: ssh shell sudo erişimine sahipseniz, kullanıcı adınızı / etc / group içindeki kök kullanıcı grubuna ekleyebilir ve daha sonra erişmek istediğiniz klasörlere bu gruba rx izinleri verebilirsiniz.


Bu benim ilk girişimdi ve işe yaramadı. Bir kullanıcı oluşturdum ve rootgruba ekledim , sftp ile bağlanıyorum ama yine de '/ etc' ve benzeri konumlardan dosya indirmeme izin vermiyor. Yanlış bir şey yaptığımdan emin değilim ama bu cevabın işe yaramadığından şüpheleniyorum.
Pere,

0

Sunucu tarafında sshd_config dosyanıza ekleyebilirsiniz:

Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

NOPASSWD sudo hakkına sahip olan bu şekilde, köklü bir sftp erişimi elde edilir.


Nedir Subsystemkomut? Ubuntu 16.04'te, "komut bulunamadı" ifadesini alıyorum
inspirednz

Bu bir komut değil / / etc / ssh / sshd_config
dosyasındaki

0

Bu satırı / etc / ssh / sshd_config dosyasına eklemek benim için bir düzeltmeydi ve mevcut alt sistem satırını yorumladı Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

sonra sudo systemctl sshd restart

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.