私はCentOSベースのサーバーをSFTPサーバーとしてインストールしました。
/mnt/inbound/フォルダに移動するにはすべての着信ファイルが必要なので、SFTP経由でログインしているこのホストのすべてのユーザーが/mnt/inbound/を開始点として持っていることを確認したいと思います。他の場所に行けないということです。
SFTPクライアントを使用してテストユーザーと接続でき、ユーザーがそのフォルダに閉じ込められていることを確認できましたが、ユーザーはファイルをアップロードできません。
これまで私がしたことは次のとおりです。
- すべての顧客インバウンドユーザーを含むようにsftponlyというグループを作成します。
$ groupadd sftponly
- 内部SFTPサブシステムを使用するように/etc/ssh/sshd_configを変更します。
# Enable built-in implementation of SFTP Subsystem sftp internal-sftp
- 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
- SFTPを使用するユーザーを追加する:
$ sudo useradd -g sftponly testuser
- ユーザーフォルダは/mnt/inboundの下に作成する必要があります。
$ sudo mkdir /mnt/inbound/testuser
これで、FileZilla(または他のクライアント)を使用してこのホストへのSFTP接続を確立でき、ユーザーが/mnt/inbound/testuserフォルダに制限されていることがわかります。ただし、ユーザーはファイルをアップロードできません。
ユーザーテストがアクセスできるように/mnt/inbound/testフォルダーの権限を変更しようとしましたが、これによりユーザーがSFTP経由で接続できなくなりました。
フォルダの所有者をルート以外のユーザーに変更することはできません。それでは、ユーザーがそのフォルダを読み書きできるようにするにはどうすればよいですか?
インターネット上で同様の質問(StackExchangeを含む)に対する回答を何度も見ましたが、すべて1つまたは2つが欠けているようです。回答に記載されている指示に従うと、常にSFTP設定が破損します。ケース。
ありがとう、P。
ベストアンサー1
はい、#openssh IRCチャンネルでいくつかのアドバイスを得ました。私の解決策に欠けているものは次のとおりです。
ChrootDirectoryで指定されたディレクトリは、ルートが所有する必要があります。上記のファイルで変数をsshd_config
指定したため、各ユーザーは自分のユーザー名に基づいて独自のルートディレクトリを持ち(例:)、これらのディレクトリはすべてルートが所有する必要があります。コマンドが上昇するため、これは実際にディレクトリを作成したときのデフォルトです。%u
testuser
/mnt/inbound/testuser/
sudo mkdir /mnt/inbound/<username>
mkdir
sudo
だから私がしなければならないのは、下にサブディレクトリを作成し、/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
行はincludeに変更されました-d /uploads
。これは、ユーザーがログインした後のデフォルトディレクトリがあることを意味します/uploads
。構成の前の行に指定されているため、新しいルートとは見なされませ/uploads
ん。/mnt/inbound/%u/uploads
/mnt/inbound/%u
ChrootDirectory /mnt/inbound/
その後、仕様を実行すると、ルートアカウントが所有する必要がある新しいルートディレクトリになり、エンドユーザーが所有するフォルダをForceCommand internal-sftp -d /%u
作成できます。ただし、ユーザーは親フォルダに移動して、他のすべてのアカウントのディレクトリ名を表示できます。私はそれに反対することにしました:)/mnt/inbound/<username>
/mnt/inbound