私は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
答え2
更新されたソリューションを投稿していただきありがとうございます(@pmdci)。 Ubuntu 18の特定のユーザーの/ homeディレクトリで動作するようにいくつかの変更を加える必要がありました。はい、この種の操作はホーム以外のフォルダを使用する特定の目標を破棄しますが、他の人が試すのに役立ちます。同様のもの。
SFTPアクセス用に新しいシステムユーザー(この例ではこのユーザーを「yournewuser」と呼びます)を作成し(Ubuntuは「adduser」入力中にホームディレクトリを自動的に作成する必要があります)、パスワードを設定した後に新しいユーザーをグループに追加します。 SFTPの制御グループとして設定します。この例では、これを「yoursftpgroup」と呼びます。
このユーザーがログインしたくない場合は、次のように設定します。 sudo usermod -s /sbin/nologon yournewuser
指摘したように、新しいユーザーのディレクトリが「CHOWNルート」を使用して、ルートが所有していることを確認してください。はい、これを行う必要があり、sudoはそれを処理する必要があります。しかし、もしケースに備えて明示的に行いました...
この新しいユーザーディレクトリ「/home/newuser/」の権限(CHMOD)を755に設定します。 -Rスイッチを使用する必要はありません(スイッチを参照)。注:この権限には、少なくとも他のユーザーと同じ権限が必要です。私の場合は。そうしないと、SFTPログイン中にアクセス拒否の問題が発生します(WinSCPを使用してテスト)。
/home/yournewuser/uploads にアップロードするための新しいディレクトリを作成します。これをsudoとして実行する必要があるかもしれませんので、yournewuserを使用してそのユーザーに所有権を再転送する必要があります。 yoursftpgroup CHOWN /home/yournewuser/uploads
次に、このディレクトリの権限を700:CHMOD 700 /home/yournewuser/uploadsに設定します。
/etc/ssh/sshd_configファイルを変更し、最後に次の行を追加します(この場合は行を調整するだけです)。
Subsystem sftp internal-sftp Match Group yoursftpgroup ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp -d /uploads
次のコマンドを使用してSSHサービスを再起動します。 sudo service ssh restart
テストアクセス
答え3
/mnt/inboundフォルダの所有権をrootアカウントに付与し、inboundフォルダに他のユーザーと同じ名前のフォルダを作成し、そのユーザーに完全な権限を付与する必要があります。
chrootオプションを使用すると、各ユーザーが自分のフォルダのみを持ち、そのフォルダにアクセスできなくなります。
ただし、このソリューションではユニバーサルアップロードフォルダを持つことはできません。