ルートアクセスとsshキーベースの認証にsudoを必要とするシステムでSFTPを使用する方法は?


26

ルート許可が必要なファイルを編集するためにSFTPを使用できるようにしたい。

SSHキーベースの認証-スマートカードのrsaキーを使用しています。

システムがルートレベルのコマンドを実行するためにsudoを必要とする場合、これを回避するにはどうすればよいですか?

SFTPのみに対してsudoをバイパスする方法を作成できますか?

sudoおよびキー認証を保持する方法はありますか。

Windowsを使用してUbuntuに接続しています。Ubuntuに接続するMacでも同様に機能するために必要です。

システムサービスを管理するためにSSHトンネリングを行う方法を理解しています。現在、rootユーザーログインを直接使用していますが、パスワードログインは無効になっています。sudoとSFTPを同時に使用する方法がわかりませんでした。ログには各コマンドの昇格された権限が付与されたことが記録されるため、非rootユーザーとしてログインし、sudoを使用する必要があるのがベストプラクティスのようです。

キーベースの認証を使用する場合、これに気を付ける必要がありますか、これはセキュリティ/ロギングの些細な違いですか?キーベースの認証はユーザーのシリアル番号をログに記録するようで、ルートユーザーが各ユーザーを識別するために複数のキーを持つことができます。これは、sudoを使用するのと同じ効果のようです。私が間違っている?


2
キーベース認証でルートアカウントを直接使用し、スキップしsudoます。
マーティン・フォン・ウィッティヒ14年

1
「非ルートユーザーとしてログインし、sudoの使用を要求するのがベストプラクティスのようです。ログには、各コマンドに対して昇格された特権が与えられたユーザーが記録されるためです。」-しかし、それはあまり価値がありません。ルート権限を取得した人は、とにかくログを改ざんできるからです。
マーティン・フォン・ウィッティヒ14年

ファイルはいくつですか?
ニルス14年

1
以下に、sftp -s "sudo / usr / lib / openssh / sftp-server" targethost.fqdnの正しい答えが1つあることに注意してください。sudoがパスワードを要求する場合、nopasswdのこの特定のコマンドをホワイトリストに登録できます。
ミッコオタマー

回答:


7

SFTPは、ファイル操作へのコマンドアクセスであり、使用するアカウントの制限があります。より多くの管理操作を行うにはsshを使用する必要があり、sudoとSFTPを同時に使用できなくなります。SFTPを使用して制限なしでディスク全体にアクセスする必要がある場合は、rootアカウントを使用してアクセスしてください。とにかく、もちろん2つの異なるセッションを使用して、sftpとsshで同時にrootでログインできます。

セキュリティキーはセキュリティを向上させ、キーボード入力を必要とせずにロギングをより簡単にします。ログインに役立つだけで、アカウントユーザーごとに複数のパスワードを設定でき、同じ効果が得られます。

編集:私は忘れました:ユーザーIDを0に割り当てると、rootと同じ効果を持つ別のアカウントを作成できますが、同じように危険であり、意味がありません。誰かがrootのようにログインしようとすると難読化される可能性がありますが、それ以外はあまり意味がありません。


12

サブシステムをsudoで呼び出すとうまくいきました。

たとえば、Ubuntuホストへ:

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

2
これは、sudoにパスワードが必要ない場合、または既にsudoチケットがあり、tty_ticketsが無効になっている場合にのみ機能します。最近のほとんどのインストールでは、どちらもデフォルトではありません。
チーター

これは、ユーザーec2-userとして接続するデフォルトのAmazon Linuxシステムへの接続に最適であり、パスワードなしでsudoを使用できます。+1、ありがとう!(Amazon Linuxでは、コマンドが少し異なりますsudo /usr/libexec/openssh/sftp-server。)
MarnixKlooster ReinstateMonica

このソリューションを広範囲に使用して、直接ログインが無効になっている別のユーザーとしてログインします(監査およびログ記録の目的)antのようなツールがこのサブシステムを公開しないのはささいなことです。ただし、絶対にrootにsudo するのではなく、必要なことを行うのに十分な特権を持つ別のユーザーにsudo することをお勧めします。対処すべき問題は、すべてのUNIX環境が同じではなく、@ MarnixKlooster
YoYo

アマゾンLinuxの場合、全体のコマンドは次のとおりです。 "SFTP -s 'sudoのは/ usr / libexecに/のopenssh / SFTPサーバー' targethost.fqdn"
johntellsall

7

上記のコメントで@MartinVonWittichが提案したことを超えて、このアクティビティ専用のSSHキーペアをセットアップし、それらをrootユーザーの/root/.ssh/authorized_keysファイルに追加して、スコープを単一のコマンドに限定することができます。

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

これにより、このペアに対応するキーを持つ別のシステムが、ルートとしてこのシステムにSFTPできるようになります。この接続の記録は、syslogおよび/またはsecure.logファイルにまだあります(ディストリビューションがこのレベルのログを提供すると仮定します)。

注:この方法でサーバーにアクセスするユーザーはだれでもアクセスできるので、賢く使用してください。引き続き読み取りを続け、この機能をchrootおよび読み取り専用アクセスと組み合わせて、特定の場所への厳しいアクセス制限とターゲットアクセスをルートとして構築します。

chrootおよび読み取り専用

ここで利用できる他の手法は、SFTP接続を制限して、使用されたSSHキーに基づいて、ルートとして特定の場所にchrootされるようにすることです。詳細については、このU&LのQ&A「SFTPによるパスワードなしのバックアップの制限」への私の回答をご覧ください。

またsftp-server、スイッチ-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.

うーん、しかし、コマンドを制限sftp-serverすることはそれをより安全にしませんか?攻撃者がこのアカウントにアクセスすると、SFTPを使用して簡単にルートシェルを取得できます。したがって、セキュリティの観点からは、コマンドの制限はほとんど役に立たない:)
マーティンフォンヴィッティッヒ14年

@MartinvonWittich-いいえ、私が含めた例にはありません。それは可能性を示すことでした。正確なユースケースを知らなければ、実際の例を示すことは困難です。与えるroot任意の形式でSFTPアクセスすると、それはchrootしていない場合は特に、ただトラブルです。
slm

3

私が従った単純なアプローチは、sftpでファイルをステージ領域(mkdirサーバーのアクセス権を持つ新しいディレクトリ)に配置し、sshをもう一度使用して、そこからsudo cpまたはで宛先にファイルを移動することsudo mvでした。


1

同様の問題がありました。vimdiffを使用して、csshとsudoを使用して、ほとんど同様のホストのグループで構成ファイルを編集したいので、ワークフローにソリューションを適合させることができます。

sudoedit(sudoの一部)を使用すると、エディターを通常のユーザーとして使用して、書き込み権限のないファイルを編集できます。また、エディターを環境変数で指定できます。sudoeditはファイルをコピーし、コピーの名前でエディターを呼び出し、エディターが終了するのを待ってから、変更されたコピーを元の場所にコピーします。そのため、編集せずに、後で使用するためにファイルをメモして待機する「エディター」と、そのマーカーを使用するvimdiffのラッパーを作成しました。

最初のファイルは〜/ .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;
}

2番目は〜/ .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;

それらを使用する方法は、csshを使用して4つすべてのホストへの接続を開き、次のようなコマンドを使用してからEDITOR=~/.bin/redit sudoedit /etc/conf/file、別のウィンドウで実行し~/.bin/redit1、変更を行い、保存して終了し、csshに切り替えてEnterを押して変更をコミットしますsudoeditを終了します(複数のファイルを編集している場合を除き、reditはリスト内の次のファイルに進み、次のファイルに対してredit1を再度実行します)。

あなたがしていることはそれほど複雑ではないので、1つのリモートホストだけで作業するため、redit1は必要ありません。sftpエディタをhost:.var / redit / hostまたは同等のものに向けることができます。


1

私がしているのは、(s)ftpの代わりにscpを使用し、シェルをsudo su -WinSCPに変更することです。これはAdvanced \ SCP \ Shellにありますが、これはscpプロトコルでのみ機能します。


0

sftpの場合:ssh shell sudo accessがある場合、ユーザー名を/ etc / groupのrootユーザーグループに追加し、そのグループにアクセスしたいフォルダーへのrx許可を与えることができます。


これは私の最初の試みであり、機能していません。ユーザーを作成し、rootグループに追加しました。sftpで接続していますが、それでも「/ etc」などの場所からファイルをダウンロードできません。私は何か間違ったことをしているかどうかはわかりませんが、この答えはうまくいかないと思います。
ペレ

0

サーバー側でsshd_configファイルに挿入できます。

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

この方法で、NOPASSWD sudo権限を持っている人は誰でも、ルート化されたsftpアクセスを取得できます。


Subsystemのコマンドは?Ubuntuの16.04で、私は「コマンドが見つかりません」を取得
inspirednz

これは、コマンドが、中には、/ etc / ssh / sshd_configのエントリーはありません
ヤーノシュKonkoly

0

この行を/ etc / ssh / sshd_configに追加することは私にとって修正であり、既存のサブシステム行をコメントします Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

それから sudo systemctl sshd restart

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.