Ubuntuで制限付きSFTPサーバーをセットアップする方法は?


81

ログイン時に公開鍵認証を必要としないroot、sudo、sftpのみのユーザーアカウントを設定する方法を知りたいです。sftpのみのユーザーのホームディレクトリを設定する方法も知りたいです。上位レベルの他のディレクトリにアクセスできません。

回答:


91

Ubuntuを使用してホストマシンでsshサービスのセットアップを開始するのに役立つ最適なリソースは、OpenSSHサーバーです。これにより、SSHファイル転送プロトコル(セキュアファイル転送プロトコル、またはSFTP)を使用して、クライアントマシンからSSH経由でファイルにアクセス、転送、および管理できます。

ソリューションの概要

  • UbuntuではOpenSSH server、ホストマシンでセットアップでき、ユーザーはsshユーザー名とパスワードのみを使用してクライアントからホストのサーバーに接続できます。ただし、公開鍵認証が推奨されることに注意してください。

「SSHサーバーをインストールする前に強力なパスワードを持っていることを確認してください(パスワードを完全無効にすることもできます)」

  • ホストで作成された管理ユーザーアカウントにはsudo特権がありますが、ホストで作成された標準ユーザーアカウントにはありません。

ホストにOpenSSHサーバーをインストールして構成する

ホストにOpenSSHサーバーをインストールするには:

sudo apt-get install openssh-server

ホストに確実に接続できるように、ホストに静的IPアドレスを付与します。

nm-connection-editor

OpenSSHサーバーを設定するには、「まず、sshd_configファイルをホームディレクトリにコピーするか、/ etc / sshで読み取り専用コピーを作成してバックアップを作成します。」

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

sshd_configファイルをバックアップしたら、次のようなテキストエディタで変更できます。」

sudo -H gedit /etc/ssh/sshd_config

これらの変更を有効にするには、ホストでsshサービスを再起動する必要があります

sudo service ssh restart

次のセキュリティ対策を検討してください

  • ルーターでポート転送を有効にしないでください:部外者がルーターにポート22などへの外部者の接続を要求すると、ポート転送を有効にしない限り、ルーターは準拠しません
  • ルートログインを無効にします。コメントアウトしPermitRootLogin without-passwordます。PermitRootLogin noホストに追加/etc/ssh/sshd_config
  • 非標準のSSHポートを選択しPort 22ます。コメントアウトします。Port <new-port-number>ホストに追加/etc/ssh/sshd_config
  • ローカル接続のみを許可:追加 ListenAddress 192.168.0.10
  • 特定のポートの特定のユーザーを許可する:ホストの追加AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>またはAllowUsers <username>@111.222.333.*ホスト/etc/ssh/sshd_config
  • RSAキー(パスワードなし)接続のみを許可:~/.ssh/id_rsa.pub各クライアントからのコンテンツをHostの新しい行として追加し~/.ssh/authorized_keysます。次に、PasswordAuthentication noホストに追加/etc/ssh/sshd_config
  • 遅い攻撃者のクラッキング試行:ホストでufw(複雑でないファイアウォール)を使用して、着信接続のレート制限を10 /分に制限します。 sudo apt-get install ufw && sudo ufw limit OpenSSH
  • その他のアイデアについては、SSHアクセスを安全に保つを参照してください。

必要に応じPasswordAuthenticationて、sshd_configファイルで有効にします

フレーズのある行を見つけPasswordAuthenticationて読みます:

PasswordAuthentication yes

新しいsshd_configファイルを保存して、ホストのsshサービスを再起動します。

sudo service ssh restart

インターネット経由でどこからでもアクセスする必要がある場合は、ローカルルーターでポートフォワーディングを設定して、OpenSSHサーバーにトラフィックを転送します

ホストのsshサービスがsshd_configファイルでリッスンするポートに注意し、ルーターをセットアップして、このポートに向けられたTCP / UDPトラフィックをOpenSSHサーバーのIPアドレスに転送します。

ホストに接続し、コマンドラインまたはターミナル経由でログインします

  • <username>ホストと同様にSFTPシェルターミナルを開くには、クライアントでターミナルを開き、123.123.1.23ホストのIPアドレスに置き換えて次のコマンドを入力します。

    sftp <username>@123.123.1.23
    
    • ホストのOpenSSHサーバーがリッスンするポート番号を変更した場合は、次を実行します。

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • <username>ホストでSSHシェルターミナルを開くには、クライアントでターミナルを開き、123.123.1.23ホストのIPアドレスに置き換えて次のコマンドを入力します。

    ssh <username>@123.123.1.23
    
    • ホストのOpenSSHサーバーがリッスンするポート番号を変更した場合は、次を実行します。

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

ホストに接続し、GUIファイルマネージャ(例:Nautilus)を介してログインして、より視覚的なSFTPアクセスでファイル転送を可能にします

  1. クライアントでNautilusを開く
  2. [ファイル]> [サーバーに接続]を選択します
  3. タイプ: SSH
  4. サーバー:ホストのIPアドレスを入力します
  5. ポート:ホストのsshd_configファイルで指定されたポート番号
  6. ユーザー名:ユーザー名
  7. パスワード:パスワード

ここに画像の説明を入力してください

14.04で:

  1. クライアントでNautilusを開く
  2. サーバーに接続
  3. タイプ: `ssh @ 123.123.1.23:

ホスト上の標準ユーザーアカウントを作成し、ホームフォルダー以外のファイルアクセスを制限します

ホスト上に適切なファイル許可を設定すると、ホスト上で作成する各標準ユーザー(sudo特権なし)が/home/new_userディレクトリを所有することを保証しますが、ディレクトリ構造の残りの部分では許可が制限されます。

  • 制限されたアクセス許可は、必ずしもファイル名とディレクトリ構造を表示できないことを意味しません。

お役に立てば幸いです!


9
非常に包括的なように見えますが、実際にはOPの質問の最も難しい部分「上位レベルの他のディレクトリにアクセスできない場所」に答えることはできません。上記のように実装すると、ユーザーはディレクトリ構造の大部分を読み取ることができます。
オスターガード

2
@ajostergaardのコメントを拡張するために、これにより通常のUNIXユーザーが作成され、SSHおよびSFTPアクセスが許可されます。通常のUNIXユーザー(root以外)は、Webサーバーの構成など、非常に多くの機密ファイルにアクセスして表示できます。これは間違いなく安全ではなく、OPが要求する制限を確実に満たしません。
サイモンウッドサイド

50

手順1:OpenSSHパッケージがインストールされていない場合はインストールする

sudo apt-get install openssh-server

ステップ2:SFTPユーザー用に個別のグループを作成します。

sudo addgroup ftpaccess

ステップ3:/etc/ssh/sshd_configファイルを編集し、次のように変更します。以下の行を見つけてコメントします。

#Subsystem sftp /usr/lib/openssh/sftp-server

これらの行をファイルの最後に追加します。

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

ステップ4:sshdサービスを再起動します。

sudo service ssh restart

ステップ5:ftpaccessグループでユーザーを追加し、パスワードを作成します。

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

手順6:ホームディレクトリのアクセス許可を変更します。

sudo chown root:root /home/paul

ステップ7:アップロード用のホーム内にディレクトリを作成し、グループで権限を変更します。

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

それでおしまい 。

参照:UbuntuでのSFTPのセットアップ


これは正しい答えのようです。私はそれをテストしませんでしたが、少なくともブラウジングパスを制限する主な困難について言及しました。
モハメッドヌールディン

ホームフォルダーの既定のアクセス許可が755であるため、テストしましたが、あまりにも寛容でしsudo chmod 711た。ホームフォルダーに対して行った結果、wwwフォルダーにのみftpできました。これまでのところは良さそうですが、多分他の人がチャイムを鳴らすことができます
...-moodboom

0

Denyhostsは、「jtd」で言及されているもののほかに見たいツールです。SSHサーバーへの繰り返しの接続試行を自動的にブロックできます。Ubuntuリポジトリにインストールできます。


Paket denyhostsは、明快(10.04LTS)および正確(12.04LTS)でのみ使用可能です。packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB

DenyhostsはUbuntuリポジトリでは使用できなくなりましたが、別の方法でインストールすることはできますが、長い間更新されていません。したがって、Denyhostsを使用するのは賢明ではありません。
ファイザンアクラムダー

0

ユーザーへのアクセスを制限する

ここでは、ユーザーにファイル転送のみを許可し、ターミナルアクセスを無効にします。

そのために、構成ファイルの下部に次のコードを追加します。

$ sudo nano /etc/ssh/sshd_config

これで、ファイルが開き、コードが貼り付けられます。

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

filemgユーザー名に置き換えます。次に、ファイルを保存して閉じます。

それでおしまい。

参照:Ubuntu 16.04でSFTPを使用する方法

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