GNU/Linux >> Linux の 問題 >  >> Linux

接続ユーザーの公開鍵に応じたchrootを使用したSFTP

<ブロック引用>

chroot=... は機能しません。

いいえ、sshd のマニュアル ページにはそのようなものはありません。 、 authorized_keys のフォーマットを記述 ファイル。

chroot を command= に入れる場合 、 internal-sftp を使用できません 、 sshd 内の内部関数呼び出しの置換であるため .

分離が必要な場合は、より多くのユーザーを設定することをお勧めします。 internal-sftp への引数を使用することもできます 、厳密に分離する必要がない場合 (たとえば、作業ディレクトリが異なるだけ)、

command="internal-sftp -d /backup/client-1/data" ssh-rsa (key1)

-P を使用してリクエストの量を制限することも可能です sftp-server のマニュアルページのオプション .


<ブロック引用>

または、私が望むことを実行できる他の SFTP サーバーはありますか?

はい、proftpd を使用できます

ユーザー環境を準備します。 ProFTPD では、有効なシェルをユーザーに提供する必要はありません。

# useradd -m -d /vhosts/backup/user1/ -s /sbin/nologin user1
# passwd --lock user1
Locking password for user user1.
passwd: Success

# mkdir /vhosts/backup/user1/.sftp/
# touch /vhosts/backup/user1/.sftp/authorized_keys

# chown -R user1:user1 /vhosts/backup/user1/
# chmod -R 700 /vhosts/backup/user1/

SFTPAuthorizedUserKeys で OpenSSH 公開鍵を使用するには、それらを RFC4716 形式に変換する必要があります。これは ssh-keygen ツールで行うことができます:

# ssh-keygen -e -f user1.public.key > /vhosts/backup/user1/.sftp/authorized_keys

ProFTPD のセットアップ

ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer off

LoadModule mod_tls.c
LoadModule mod_sftp.c
LoadModule mod_rewrite.c

TLSProtocol TLSv1 TLSv1.1 TLSv1.2

# Disable default ftp server
Port 0

UseReverseDNS off
IdentLookups off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

# PersistentPasswd causes problems with NIS/LDAP.
PersistentPasswd off

MaxInstances 30

# Set the user and group under which the server will run.
User nobody
Group nobody

# Normally, we want files to be overwriteable.
AllowOverwrite                  on

TimesGMT off
SetEnv TZ :/etc/localtime

<VirtualHost sftp.example.net>
    ServerName "SFTP: Backup server."
    DefaultRoot ~
    Umask 002
    Port 2121

    RootRevoke on

    SFTPEngine on
    SFTPLog /var/log/proftpd/sftp.log

    SFTPHostKey /etc/ssh/ssh_host_rsa_key
    SFTPHostKey /etc/ssh/ssh_host_dsa_key
    SFTPDHParamFile /etc/pki/proftpd/dhparam_2048.pem
    SFTPAuthorizedUserKeys file:~/.sftp/authorized_keys

    SFTPCompression delayed
    SFTPAuthMethods publickey
</VirtualHost>

<Global>
    RequireValidShell off
    AllowOverwrite yes

    DenyFilter \*.*/

    <Limit SITE_CHMOD>
        DenyAll
    </Limit>
</Global>

LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth    "%v [%P] %h %t \"%r\" %s"
ExtendedLog /var/log/proftpd/access.log read,write

DH (Diffie-Hellman ) グループ パラメータを作成します。

# openssl dhparam -out /etc/pki/proftpd/dhparam_2048.pem 2048

SFTP クライアントを構成します。 FileZilla を使用しました

ProFPTD をデバッグ モードで実行する場合

# proftpd -n -d 3 

コンソールには次のようなものが表示されます

2016-02-21 22:12:48,275 sftp.example.net proftpd[50511]: using PCRE 7.8 2008-09-05
2016-02-21 22:12:48,279 sftp.example.net proftpd[50511]: mod_sftp/0.9.9: using OpenSSL 1.0.1e-fips 11 Feb 2013
2016-02-21 22:12:48,462 sftp.example.net proftpd[50511] sftp.example.net: set core resource limits for daemon
2016-02-21 22:12:48,462 sftp.example.net proftpd[50511] sftp.example.net: ProFTPD 1.3.5a (maint) (built Sun Feb 21 2016 21:22:00 UTC) standalone mode STARTUP
2016-02-21 22:12:59,780 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): mod_cap/1.1: adding CAP_SETUID and CAP_SETGID capabilities
2016-02-21 22:12:59,780 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): SSH2 session opened.
2016-02-21 22:12:59,863 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): Preparing to chroot to directory '/vhosts/backup/user1'
2016-02-21 22:12:59,863 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): Environment successfully chroot()ed
2016-02-21 22:12:59,863 sftp.example.net proftpd[50512] sftp.example.net (192.168.1.2[192.168.1.2]): USER user1: Login successful

/var/log/sftp.log の次の行

2016-02-21 22:12:48,735 mod_sftp/0.9.9[50309]: sending acceptable userauth methods: publickey
2016-02-21 22:12:48,735 mod_sftp/0.9.9[50309]: public key MD5 fingerprint: c2:2f:a3:93:59:5d:e4:38:99:4b:fd:b1:6e:fc:54:6c
2016-02-21 22:12:48,735 mod_sftp/0.9.9[50309]: sending publickey OK
2016-02-21 22:12:59,789 mod_sftp/0.9.9[50309]: public key MD5 fingerprint: c2:2f:a3:93:59:5d:e4:38:99:4b:fd:b1:6e:fc:54:6c
2016-02-21 22:12:59,790 mod_sftp/0.9.9[50309]: sending userauth success
2016-02-21 22:12:59,790 mod_sftp/0.9.9[50309]: user 'user1' authenticated via 'publickey' method

追伸

承認されたキー (SFTPAuthorizedUserKeys) を含むファイルの構成済みパス ) %u を使用できます この変数は、認証されているユーザーの名前で補間されます。この機能は、ユーザーが独自の承認済みキーを管理することを要求 (または許可) するのではなく、中央の場所に常駐する承認済みキーのユーザーごとのファイルを持つことをサポートします。例:

SFTPAuthorizedUserKeys file:/etc/sftp/authorized_keys/%u
<ブロック引用>

複数のクライアントがサーバーにファイルを保存できるようにしたいと考えています。各クライアントは、他のクライアントのファイルを表示できないようにする必要があります。サーバーに何十ものユーザー アカウントを散らかしたくないので、クライアントがユーザー アカウントを共有し、お互いのファイルにアクセスできないようにするための簡単に管理できるソリューションが必要です。

ProFTPD を使えばそれも可能です。初期設定を少し変更する必要があります

<VirtualHost sftp.example.net>
    ...   
    SFTPAuthorizedUserKeys file:/etc/proftpd/sftp_authorized_keys
    AuthUserFile /etc/proftpd/sftp_users.passwd

    CreateHome on 0700 dirmode 0700 uid 99 gid 99

    RewriteHome on
    RewriteEngine on
    RewriteLog /var/log/proftpd/rewrite.log
    RewriteCondition %m REWRITE_HOME
    RewriteRule (.*) /vhosts/backup/%u
</VirtualHost>

仮想アカウントを 1 つ作成

# ftpasswd --passwd --file /etc/proftpd/sftp_users.passwd --sha512 --gid 99 --uid 99 --shell /sbin/nologin --name user1 --home /vhosts/backup

それで全部です。追加のアカウントごとに必要なのは、彼の公開鍵を /etc/proftpd/sftp_authorized_keys に追加することだけです

注:ファイルの最後に改行を含める必要があります。重要です。


Linux
  1. Ssh –公開鍵認証を使用したSshでパスワードプロンプトを引き続き取得しますか?

  2. Linuxでのファイルパーミッションと例

  3. Mac OS で Cron を使用して自作を更新する方法

  1. ISPConfig3.1でNextcloudをインストールする方法

  2. Linuxのchrootjailを設定する方法

  3. plinkとcmdと公開鍵を使用してsshサーバーに接続する方法

  1. Gpg:ユーザーによってキャンセルされましたか?

  2. Ssh-copy-idの公開鍵のユーザー名とホスト名?

  3. chrootを使用した後、SFTPユーザーをバインドマウントします