代わりに/ FTPの代わりにSSH FTP(SFTP)

最近、サーバーファイルへのアクセスを整理するタスクがありました。 より正確には、アクセスはありましたが、何らかの理由でFTPサーバーが機能しなくなりました。 理由を理解するのが面倒で、さらに、FTPプロトコルをより信頼性の高いものに置き換えたいとずっと思っていました。

親愛なるHabrasocietyに、FTPが暗号化されていない形式でデータを転送することを知らせてください。 そして、私たち、この世界の妄想、私たちのサーバーとそこに保存されているデータは少し怖いです。

したがって、私はSFTPを支持してFTPを完全に放棄することにしました。 私はUbuntu Serverを使用し、デフォルトのOpenSSHがインストールされています。また、デフォルトでSFTPをサポートしていることもわかっているので、タスクは非常に簡単に思え、すぐに実行に移しました。 タスクが実行されたのと同じ速度で、OpenSSHはデフォルトでユーザーにファイルシステム全体、つまり/ -ルートへのアクセスを許可するという不幸な事実に出会いました。

この事実は私には合わないでしょうし、あなたもそうなると思います。 つまり、一方では、大丈夫のようです。なぜなら、ユーザーには、どこにでも書けるだけの権限を与えないアクセス権があるからです。 しかし、セキュリティ上の理由から、彼はこのニンジンを持ってはいけません。

ここで、必要なディレクトリのユーザースレッドをchrootするために、Ubuntu LinuxでOpenSSHサーバーを調整する方法を詳しく説明します。

チューニングと言っているのはなぜですか?

-はい、単純に、私が言ったように、SFTPが機能するためには、それだけで十分です。

sudo aptitude install openssh-server

サーバーのインストールと起動につながり、デフォルトでポート22も開きます。 に接続して、たとえば Filezillaでは、 ENCRYPTEDプロトコルを使用してリモートコンピューター/サーバーのファイルシステムにアクセスできます。

しかし、すでに示唆したように、デフォルトの設定は私たちには適していません。

そのため、OpenSSHサーバーの構成ファイルsudo mcedit 1 /etc/ssh/sshd_config 、そこに何かを変更/追加します。

Subsystemオプションを見つけて、次の形式を指定します。

Subsystem sftp internal-sftp

さらに、次のオプションを追加します。

Match User test
ChrootDirectory %h
ForceCommand internal-sftp


OpenSSH sudo service ssh restartと、準備ができたようです。
ゲームオーバー?

- いいえ!

おそらく既に推測したように、システム2アカウントを持っているユーザーは、SFTPプロトコルを使用してシステムに入る権利を持ちます。 したがって、ファイルを操作するアカウントを作成する必要があります。 上記のMatch User test記述されているため、ユーザーアカウントテストを作成する必要があります。

adduser test
ユーザーが作成され、パスワードが設定され、デフォルトのホームディレクトリは/home/test ...

これで、サーバーに接続してファイルを転送できます。 まず、ログにアクセスしてプロセスを観察します...
tail -f /var/log/auth.log
timestamp host sshd[2558]: Accepted password for test from IP_ port 59667 ssh2
timestamp host sshd[2558]: pam_unix(sshd:session): session opened for user test by (uid=0)
timestamp host sshd[2596]: fatal: bad ownership or modes for chroot directory "/home/test"
timestamp host sshd[2558]: pam_unix(sshd:session): session closed for user test

あなたが見ることができるように、ログは言います:
-セッションは、UID = 0、つまりルートユーザーの識別子を使用してユーザーテスト用に開かれています
- /home/testでchroot-scamするための不正な所有権

問題は、ディレクトリ/home/testに対して、rootユーザーを所有者として設定する必要があることです。
sudo chown root /home/test

接続され、ログで観察されます:
timestamp host sshd[2630]: Accepted password for test from IP_ port 50152 ssh2
timestamp host sshd[2630]: pam_unix(sshd:session): session opened for user test by (uid=0)
timestamp host sshd[2669]: subsystem request for sftp

ミッション完了


詳細


OpenSSH設定では、 ユーザーの一致テストオプションについて説明しました。これは、それ自体が個々の特定のユーザーへのアクセスを意味します。

-そして、たくさんある場合は?

各ユーザーの説明は少なくともコーシャではありません...つまり、Match Groupを使用してユーザーグループを使用できるという事実についてお話したいと思います。

そして、設定は次のようになります。

Match Group sites
ChrootDirectory /srv/www%h
ForceCommand internal-sftp

/etc/passwdユーザーアカウントは次のようになります。
<output omitted>
site1:x:5000:1000 3 ::/example.com/:/bin/false
site2:x:5001:1000::/example.org/:/bin/false
site3:x:5002:1000::/example.net/:/bin/false
<output omitted>

例からわかるように、ユーザーには相対ホームディレクトリがあります。つまり、ルート/にはディレクトリ/example.com/などがありません。
これらのディレクトリは/srv/www/あり、OpenSSHは次のように機能します。
- /etc/passwdからユーザーのホームディレクトリを/srv/www追加し、最終的に/srv/www/example.comなどを取得し/srv/www/example.com

ユーザーがchrootするディレクトリの所有者はrootでなければならないことを忘れないでください。 所有者のグループは、サイトを配置してフルアクセスを許可する必要があります。
ユーザーがコマンドラインにアクセスできないように、ユーザーシェルとして/ bin / falseを設定することもお勧めします。

:
1 - mcedit - .
2 - - : .
3 - 1000 - sites.


ミッション完了とゲームオーバー

Source: https://habr.com/ru/post/J89473/


All Articles