代わりに/ 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.









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



All Articles