web-dev-qa-db-ja.com

SFTPの起動フォルダーを/ home / username以外に設定すると、権限の問題が発生します

CentOSベースのSFTPサーバーとして機能するようにインストールしました。

すべての受信ファイルを/ mnt/inbound /フォルダーに移動する必要があるため、SFTPを介してログインするこのホストからのすべてのユーザーが/ mnt/inbound /を開始点として取得し、移動できないことを確認したいどこか他の。

SFTPクライアントを使用してテストユーザーと接続でき、ユーザーがそれぞれのフォルダーに投獄されていることを確認できましたが、ユーザーはファイルをアップロードできません...

これが私がこれまでに行ったことです:

  1. Sftponlyというグループを作成し、すべての顧客インバウンドユーザーを含めます。

$ groupadd sftponly

  1. Internal-sftpサブシステムを使用するように/ etc/ssh/sshd_configを変更します。

# Enable built-in implementation of SFTP Subsystem sftp internal-sftp

  1. Sshd_confの最後に以下を追加します。

Match Group sftponly # Force the connection to use the built-in SFTP support ForceCommand internal-sftp # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Disable network tunneling PermitTunnel no # Disable authentication agent forwarding AllowAgentForwarding no # Disable TCP connection forwarding AllowTcpForwarding no # Disable X11 remote desktop forwarding X11Forwarding no

  1. Sftpを使用するユーザーを追加する:

$ Sudo useradd -g sftponly testuser

  1. / mnt/inboundの下にユーザーフォルダーを作成する必要があります。

$ Sudo mkdir /mnt/inbound/testuser

FileZilla(またはその他のクライアント)を使用して、このホストへのSFTP接続を実行できます。ユーザーが/ mnt/inbound/testuserフォルダーに投獄されていることがわかります。ただし、ユーザーはファイルをアップロードできません。

/ mnt/inbound/testフォルダーの権限を変更してユーザーテストにアクセスできるようにしましたが、SFTP経由で接続するユーザーの機能が損なわれました。

フォルダーの所有者をroot以外に変更できないので、ユーザーがそれぞれのフォルダーに対して読み取りと書き込みを行えるようにするにはどうすればよいですか?

インターネット(StackExchangeを含む)で同様の質問に答えようとする試みを何度か見たことがありますが、回答に記載されている手順を実行しようとすると、常に壊れたSFTPセットアップになってしまうため、すべて1つまたは2つ欠けているようです。

よろしく、P.

4
pmdci

#openssh IRCチャンネルでなんとかアドバイスを得ることができました、そしてここに私の解決策から欠けていたものがあります:

ChrootDirectoryで指定されたディレクトリは、ルートによって所有されている必要があります。上記のsshd_configファイルでは%u変数を指定しているため、すべてのユーザーが自分のユーザー名に基づいて独自のルートディレクトリを持っています(たとえば、testuser/mnt/inbound/testuser/になります)。これらのディレクトリのうち、ルートが所有している必要があります。 mkdirコマンドはSudoを介して昇格されるため、これは実際にSudo mkdir /mnt/inbound/<username>を実行するディレクトリを作成するときのデフォルトです。

つまり、/mnt/inbound/<username>の下にサブディレクトリを作成し、そのディレクトリにユーザーのアクセス許可を与える必要があります。私の場合、このディレクトリをuploadsと呼びました。

そこで、次のように構成を少​​し変更しました。

Match Group sftponly # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Force the connection to use the built-in SFTP support ForceCommand internal-sftp -d /uploads

ForceCommand行は-d /uploadsを含むように変更されました。つまり、ユーザーがログインした後のデフォルトディレクトリは/uploadsです。これは/uploadsではなく/mnt/inbound/%u/uploadsであることに注意してください。これは、構成の前の行で/mnt/inbound/%uが新しいルートとして指定されたことを考慮しているためです。

ChrootDirectory /mnt/inbound/を実行し、次にForceCommand internal-sftp -d /%uを指定すると、/mnt/inbound/<username>が所有する必要がある新しいルートディレクトリになるため、/mnt/inboundフォルダーをエンドユーザーが所有するようにできます。 rootアカウントによって。ただし、ユーザーは親フォルダに移動して、他のすべてのアカウントのディレクトリ名を確認できます。私はそれに対して反対しました:)

8
pmdci

/ mnt/inboundフォルダーをrootアカウントに変更し、inboundフォルダーに同じ名前のユーザーフォルダーを作成して、それらに完全な権限を与える必要があります。

Chrootオプションを使用して、各ユーザーがそれ自身のフォルダーのみを持ち、上に移動できないようにすることができます。

しかし、そのソリューションを使用して共通のアップロードフォルダーを持つことはできません。

0
Tim Connor