今回、Djangoでroot権限でのアクセスを拒否して一般ユーザーでアクセスしてみたので投稿したいと思います。サーバーはConoHaVPSを使用しています。ConoHaVPSでDjangoを始める方法については他のサイトでも詳しく解説されていますのでそちらをご覧ください。こちらではOS:Ubuntu 20.04(64bit)、アプリケーション:Djangoでサーバーを構築しています。敢えてsudo apt update、sudo apt upgradeは行わずに進めていますので必要に応じて行ってください。
まずはコードから
Djangoの操作に慣れている方や、詳しく読み返さなくても大丈夫な方はここだけでいいと思います。
#一般ユーザーの作成
adduser ユーザー名
#グループに追加
sudo gpasswd -a ユーザー名
sudo
#sudo権限の付与
usermod -G sudo ユーザー名
#rootでのアクセス拒否(34行目付近)
cd /etc/ssh
sudo vim sshd_config
PermitRootLogin yes
→ no
#サーバーの再起動
reboot
ローカルで作成したプロジェクトを、FTPソフトなどでVPSのhomeディレクトリ直下に配置。
VPSのetc/apache2/apache2.confのユーザー名とプロジェクト名を変更。
WSGIScriptAlias / /home/ユーザー名
/プロジェクト名
/プロジェクト名
/wsgi.py
WSGIPythonPath /home/ユーザー名
/プロジェクト名
<Directory //usr/local/lib/python3.8/dist-packages/django/contrib//admin/static>
Require all granted
</Directory>
<Directory /home/ユーザー名
/プロジェクト名
/プロジェクト名
>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
settings.pyの修正
ALLOWED_HOSTS = ['163.**.**.**'
]
#apacheの再起動
service apache2 restart
これで作成したプロジェクトが公開できたと思います。
では細かく見ていきます。上記を見て分かった方はこれ以降は見なくても構いません。
一般ユーザーの作成
ConoHaVPSのコンソールやTeratermなどでVPSサーバーにアクセスし一般ユーザーを作成します。今回、ユーザー名は「foo」とします。
adduser foo
ここでまずパスワードを設定します。確認のためにNew passwordとRetype new passwordの2回聞かれますので間違わないように入力しましょう。文字数の制限は無いようです。1文字からでも登録できました。パスワードはリスクを最大限に考慮された上で自己責任で決めて下さい。
パスワードが設定できましたら色々聞かれますがEnterで飛ばしましょう。最後にIs the information correct?と聞かれますので「y」と入力します。
次に作成したユーザーをグループに追加します。ユーザー名は先ほど使用しました「foo」としたいと思います。
sudo gpasswd -a foo
sudo
sudo権限を付与します。
usermod -G sudo foo
rootでのログインを拒否する
root権限でのログインを拒否します。etcの中のsshディレクトリにあるsshd_configを編集します。
cd /etc/ssh
sudo vim sshd_config
PermitRootLogin yes
→ no
ここでは「cd /etc/ssh」としていますが、「cd /」→「cd ssh」と順にディレクトリを変更していっても構いません。「ls」コマンドでディレクトリの中身を確認しながら進んでもいいと思います。また、cdなどのコマンドの後でディレクトリ名やファイル名の頭文字2~3文字を入力してからTabキーを押すと候補を表示してくれるので入力ミスを防ぐことができます。
sudo vim sshd_configでsshd_configファイルを開きます。「sudo」を付けないと後でファイルを閉じるときにエラーが表示されます。「:set number」とすることで行番号を表示することができます。「:行番号」とすると目的の行にジャンプすることができます。vimコマンドでファイルを編集するときは「i」キーを押してINSERTモードに変更してから入力します。 34行目付近にPermitRootLoginがあります。yesになっておりrootでのログインが許可されている状態ですのでnoに変更します。
変更したらEscキーを押してINSERTモードから抜けます。キーボードで「:wq」と入力することでファイルを保存した状態でsshd_configファイルを閉じることができます。ここで「:wq」ではなく「:q」とすると保存せずに閉じることになります。ファイルを閉じたらrebootでサーバーを再起動します。
#サーバーの再起動
reboot
この時点でrootでサーバーにログインできなくなりました。でも、またサーバーを再構築すればログインできるようになります。
プロジェクトをサーバーに送信
次にローカルで作成したプロジェクトをFileZillaなどのFTPソフトでサーバーに送信します。VPSに接続する際は、root権限ではアクセスできなくなっていますので先ほど作成した一般ユーザー(ここではfoo)でアクセスしてください。
FTPソフトで見ると分かりやすいのですが一番上のディレクトリの中のhomeの中には、djangoディレクトリと先ほど作成したユーザーのfooディレクトリがあると思います。このfooディレクトリの中にローカルで作成したプロジェクトを送信します。djangoディレクトリの中にはsampleファイルが入っています。これはデフォルトの「The install worked successfully!(ロケット)」のプロジェクトですので削除してしまって構いません。削除しないとfooディレクトリに入っているつもりがdjangoディレクトリで作業してしまうというミスが起こるかもしれません。削除してしまっても、また必要になればサーバー再構築した時に現れます。
VPSのetc/apache2/apache2.confを編集します。apache2.confファイルの開き方はroot権限でのログインを拒否した時にsshd_configを開いたのと同じ方法です。ターミナルでcd /etc/apache2とした後、sudo vim apache2.confでファイルを開いてください。
234行目付近の、以下に示している黄色いところユーザー名×3か所、プロジェクト名×5か所の合計8か所を変更します。
WSGIScriptAlias / /home/foo
/プロジェクト名
/プロジェクト名
/wsgi.py
WSGIPythonPath /home/foo
/プロジェクト名
<Directory //usr/local/lib/python3.8/dist-packages/django/contrib//admin/static>
Require all granted
</Directory>
<Directory /home/foo
/プロジェクト名
/プロジェクト名
>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
settings.pyのALLOWED_HOSTを編集します。settings.pyはプロジェクト名/プロジェクト名ディレクトリ内にあります。cd /home/foo/fooを実行してディレクトリを移動します。その後にsudo vim settings.pyを実行してsettings.pyを開き、「i」キーを押し編集モードに切り替えます。28行目付近にALLOWED_HOSTがありますのでカッコの中にIPアドレスを入力します。カンマで区切ってドメインを一緒に設定することもできます。「Esc」キーを押して編集モードから抜けて「:wq」とすることで保存して終了します。
ALLOWED_HOSTS = ['163.**.**.**', 'sample.com'
]
apacheの再起動をすると設定が反映されます。ブラウザのアドレスバーにIPアドレスを入力するとプロジェクトが表示されます。
#apacheの再起動
service apache2 restart
ここまでで最低限の設定ができたのですが、settings.pyの26行目のDEBUG = TrueをFalseに変えることを忘れないでください。Trueだと「開発中=はい」の状態になっています。他の人がアクセスしたときにエラーが発生した場合、プロジェクト内部のディレクトリの構成などがみられてしまいます。
以上になります。
分かりにくい部分などありましたらお知らせ頂けると助かります。お知らせいただいた内容は公開されることはありません。どの記事から投稿されたかは分かるようにしています。