1.問題の声明
与えられたすぐに使えるDebianサーバー(ディストリビューションからインストール)
挑戦するサーバー上のいくつかのプロジェクトの作業を整理して、それらを処理する人々が近隣のプロジェクトにアクセスできないようにします。
- ファイルシステムを参照する機能を、プロジェクトユーザーの特定のフォルダーに制限します。
- ユーザーがバイナリを実行する機能を制限する
- サーバーでポートを開く機能を制限します(何らかの方法でそれを異なる方法で作成する必要があります)
- システムへのユーザーの追加の自動化:フォルダー、Apache構成、mysqlまたはpostgresユーザーの作成
2.決定
- 2.0システムアップデート
- 2.1 SSH
- 2.2ファイルシステム
- 2.3 Apache
- 2.3.1ユーザー権利[apache2-mpm-itk]
- 2.3.2サイトごとに個別のtmp
- 2.3.3 Sendmail
- 2.4 FTP
- 2.5 MySQL + Postgres
- 2.6ファイアウォール
- 2.7 chroot
- 2.8自動化
2.0更新
パッケージの最新バージョンを配置します。 リポジトリのリストは次のとおりです。
debian:~
2.1 SSHのキーの生成
パスフレーズを傍受する可能性を排除するために、サーバーに入るためのrsaキーを生成します。
neoveneficus@book:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/neoveneficus/.ssh/id_rsa): /home/neoveneficus/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/neoveneficus/.ssh/id_rsa. Your public key has been saved in /home/neoveneficus/.ssh/id_rsa.pub. The key fingerprint is: cb:07:dd:67:21:37:ab:93:e1:60:40:ce:0e:b8:b8:e3 neoveneficus@book The key's randomart image is: +--[ RSA 2048]----+ | . | | . + | |. . + . + | |.. o . . + + | |+ . o S . oo | |.o . + = . o | |.E . * o | | . o | | . | +-----------------+
注意してください-作業マシン上でキーが生成され、公開キーがサーバーにアップロードされます:
neoveneficus@book:~/.ssh$ scp ~/.ssh/id_rsa.pub root@217.212.252.146:.ssh/authorized_keys neoveneficus@book:~/.ssh$ cat ~/.ssh/id_rsa.pub | ssh root@217.212.252.146 "cat > ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"
これで、設定に応じて、キーを使用して、パスワードの有無にかかわらず、サーバーを入力できます。 パスワードなしでキーを生成した場合、サーバーのセキュリティレベルは、マシン上の秘密キーのセキュリティレベルと同等であることを強調したいと思います。 注意してキーを保管してください。
2.2ファイルシステム。 ユーザーの権利。
ファイルシステムについて話しましょう。 ファイルシステムのルートにあるサイトに個別のフォルダーを割り当てることをお勧めします。
debian:~
ユーザーのホームフォルダーは次のようになります。
- / web / site1
- / web / site2
ユーザーを作成し、権限を設定します。
debian:~
ユーザーsite1には、ホームフォルダー/ web / site1があります。 -mスイッチは、フォルダーが自動的に作成されることを意味します。 -U-ユーザーが配置される場所と同じグループが作成されます。 ユーザーにはシェルがありません。 Webからアクセスできるすべてのものは、public_htmlフォルダーに配置されます。 サブドメインが必要な場合は、wwwの隣のフォルダーにサブドメインを配置します。
2.3 Apache
2.3.1ユーザーの権利。 Apacheの変更[apache2-mpm-itk]
私たちが知っているように、デフォルトでは、Apache Webサーバーはサーバー上のすべてのサイトの単一ユーザーで実行されます。 これは、Webシェルを使用して、隣接プロジェクトのファイルを読み取ることができることを意味します。
この誤解を修正するには、修正版のapacheをインストールする必要があります。 このパッケージは、apache2-mpm-itkと呼ばれます。 パッケージをインストールした後、ファイルの構成で、サイトを処理するときにどのユーザーとグループのApacheを使用するかを指定できます。
debian:~
ユーザーとグループは、構成内の行で指定されます。
AssignUserId site1 site1
同時に、Webシェルを使用して、o + w権限を持つファイルを除き、プロジェクトのファイルを編集することはできません。
drwxr-xr-- 2 site1 site1 4096 5 10:17 . drwxr-xr-x 3 site1 site1 4096 5 10:14 .. -rwxr-x--- 1 site1 site1 0 5 10:14 index.php -rwxrw---- 1 site1 site1 0 5 10:17 tmp.txt
これを行うには、設定で次のように記述します。
AssignUserId www-data site1
したがって、Apacheはindex.phpを読み取り、実行してブラウザに送信できますが、変更することはできません。 また、tmp.txtは変更できます。
重要なポイント-ユーザーwww-dataからコンソールを禁止する必要があります
debian:~
2.3.2サイトごとに個別のtmp
近隣サイトからのセッションが含まれないようにします。 + phpがユーザーのホームディレクトリ上で終了しないようにします。
私たちのサイトの設定では、ディレクティブopen_basedir、upload_tmp_dir、session.save_pathを追加する必要があります
このような最小限の設定を取得します。
構成を作成したら、次のコマンドを使用してサイトをアクティブにする必要があります。
debian:~
そして、構成を再読み取りします。
debian:~
2.3.3 Sendmail
Sendmailを別のアイテムとして取り出したのはなぜですか? デフォルトでは機能しなかったからです。 私はいじくり回さなければなりませんでした。 最も簡単な方法をお教えします。 phpがレターを送信できるようにするために、次の操作を実行します。
Exim4構成用のexim4-configパッケージがあります(デフォルトではメール転送エージェントとして使用されます)。 次のように使用できます。
debian:~
その後、彼らは質問を始めます。 最初の(メール構成の一般的なタイプ)で答えます:
- ウェブサイト SMTPを使用して直接メールを送受信する
そして、構成の最後までEnterキーを押します。 これですべてが機能するはずです。
2.4 vsftpd
次に、FTPを扱いましょう。 Vsftpdがジョブに選択されました。
debian:~
次に、構成を変更します。
vsftpdデーモンに設定を再読み込みするように指示します。
debian:~
2.5 MySQL + PostgreSQL
MySQLを置きます debian:~
新しいユーザーを作成します。
debian:~
Postgresを入れます debian:~
postgresユーザーのパスワードを変更します。
debian:~
postgresユーザーのrootパスワードを設定した後、設定を修正する必要があります。 デフォルトでは、ローカルユーザーはパスワードを入力せずにスーパーユーザー権限でpsqlを実行できます。 修正中です。
/etc/phppgadmin/apache.confで、外部からアクセスを開きます。
order deny,allow deny from all allow from 127.0.0.0/255.0.0.0 ::1/128
変更先:
order deny,allow deny from all allow from 127.0.0.0/255.0.0.0 ::1/128
apacheに設定を再読み込みするよう指示します。
debian:~
Postgresには注意点が1つあります。 ユーザーには常に隣接するデータベースの名前が表示されます。 ユーザーがphppgadminのユーザーに注目しないように、構成を編集します。
ユーザーは次のコマンドで作成されます。
debian:~
2.6ファイアウォール
私たちの場合、目標は単純です-攻撃者がポートを開くのを防ぐためです。 したがって、解決策は簡単です。iptablesルールのニュアンスには触れませんが、arno-iptables-firewallパッケージを使用すると、生活が簡素化されます。 彼自身がインストール時に欲しいものを尋ねてきます。 以下の質問への回答。
debian:~
2.7 chroot環境でのApache2の起動[libapache2-mod-chroot経由]
chroot'ingとは何ですか? これは、環境から分離された特別な環境(サンドボックス)の作成です。 Apacheプロセスがホームフォルダーにアクセスできないようにします。 同時に、隔離された環境では、作業に必要なすべてのものを用意する必要があります。 最も簡単な方法は、libapache2-mod-chrootを使用することです。
debian:~
Chrootingは、Apacheに加えて、通常、追加のプログラム、ライブラリ、およびツールの束が通常必要であるという事実に関連した問題の束を持つ興味深いトピックです。 したがって、私は記事に記事を掲載せず、このトピックに関する優れた資料を紹介します。 lddプログラムを使用して、必要なものをすべて隔離された環境に持ち込みます。
sudouser.com/zapusk-web-servera-apache2-v-srede-chroot-v-debian-i-ubuntu.html2.8新規ユーザーの追加の自動化
私は台本を書き始め、何でもできるモンスターは使うのが不便であることを悟りました。 この記事では、すべてのコマンドは、shスクリプトに簡単に押し込めるように作成されています。 したがって、数分で各ユーザーは自分にとって必要で便利なスクリプトを簡単に作成できると思います。
追記
コメントをお待ちしております。 chrootについての考えは特に興味深いです。 誰が簡単なレシピを知っていますか?