最近、サーバーファイルへのアクセスを整理するタスクがありました。 より正確には、アクセスはありましたが、何らかの理由で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.
ミッション完了とゲームオーバー