「Linux」カテゴリーアーカイブ

【Linux】【Laravel】Auth機能を実装する。

LaravelにAuth機能(要はログイン機能)を実装します。

Laravelって便利なもので、デフォルトで簡単に実装できる機能があるんですよ。

まず、データベースなんですが、Laravel初期像体で、すでにmigrateの記述が出来上がっているので、migrateするだけでデータベースの準備はOKです。

ログインページですが、以下のコマンドを実行します。

$ php artisan make:auth

これだけで実装完了です。

Laravelを起動してブラウザからアクセスしてみましょう。

右上にRegisterとLoginのリンクがありますので、まずはRegisterでユーザー登録を行います。

名前、メールアドレス、パスワードを入力してボタン押下。

ログインした状態です。

一回ログアウトして、ログインページへ行ってみましょう。

ログインページです。

ユーザー登録した内容を入力すると、先程のログイン後のページが表示されるはずです。

本当は、パスワードを忘れたときのためにパスワードリセット機能もあるのですが、メールでリセットするため、SMTPの設定がないと動作しません。

なので、この機能は後々削除する予定。

【Linux】【Laravel】Laravelからデータベースにアクセスする。

Laravelからmysqlにアクセスできるところまでやりました。

mysqlのインストール

$ sudo apt-get install mysql-server

mysqlの初期設定

$ sudo mysql_secure_installation

基本的にyを選択すれば良い。

rootでログイン

$ sudo mysql -u root -p

データベースの作成

mysql> create database <データベース名>;

ユーザーの追加

mysql> create user <ユーザー名> identified by '<パスワード>';

ユーザーに権限を付与

mysql> grant all on . to <ユーザー名>;

Laravelにデータベースの設定を記入

database.phpの設定を変更。

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', '<データベース名>'),
            'username' => env('DB_USERNAME', '<ユーザー名>'),
            'password' => env('DB_PASSWORD', '<パスワード>'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

migrateの実行

$ php artisan migrate

エラーが出た。

could not find driver

PHPに、データベースにアクセスするPDOがない、ということなので、mysqlにアクセスするモジュールを追加。

$ sudo apt-get install php7.2-mysql

これでmigrateが成功すればOK。

適当なテーブルを追加する

$ php artisan make:migration create_test_table

CreateTestTableクラスが出来上がるので、以下のように書き換える。

    public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->text('text');
            $table->timestamps();
        });
    }
$ php artisan migrate

Laravelからデータベースにアクセス

$ php artisan tinker
>>> DB::table('test')->get();
DB::table('test')->insert(['test' => 'insert'])
DB::table('test')->get();

データが表示されれればOK。

【Linux】【Laravel】Laravel5.5をインストールする。

オイラのLinux PCにLaravel5.5をインストールしました。

使用ディストリビューションはUbuntu18.04です。

composerのインストール

$ sudo apt-get install composer

Laravelのインストール

$ composer global require "laravel/installer"

プロジェクトの作成

$ composer create-project --prefer-dist laravel/laravel <プロジェクト名> "5.5.*"

実行すると

You can also run php --ini inside terminal to see which files are used by PHP in CLI mode.

というエラーが出たので、PHPのモジュールを追加。

$ sudo apt-get install php7.2-mbstring
$ sudo apt-get install php7.2-xml

Laravelの実行

$ php artisan serve

を実行した状態で、ブラウザから

http://localhost:8000

にアクセスする。

この画面が表示されればOK。

パーミッション変更

これをやらないとダメらしい。

$ chmod 777 storage/
$ chmod 777 bootstrap/cache/

HTTPSに対応してみた。

https://taki-lab.site/bocci

多分、上のリンクにアクセスできるはず。

HTTPS化することはSEO対策的にも有効らしい。

で、HTTPS化するのには証明書を発行して貰う必要があるのですが、Let’s Encriptを使用すると、無料で信頼できる証明書を発行してくれるらしい。

まずはクライアントツールをインストール。

あとあとめんどいので、rootで作業します。

# apt-get -y install letsencrypt
# letsencrypt certonly --webroot -w /var/www/html -d taki-lab.site

nginxの設定に以下を追加して、ポート443を受け付けれるようにする。

server {

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate     /etc/letsencrypt/live/taki-lab.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/taki-lab.site/privkey.pem;

}

そして、nginxを再起動する

# systemctl restart nginx

証明書の有効期間は90日なので、定期的に証明書を更新する必要があります。

# letsencrypt renew

今回はこちらのサイトを参考にさせて頂きました。

https://www.server-world.info/query?os=Ubuntu_16.04&p=ssl&f=2

https://webjin.work/set-up-ssl-certificate-of-lets-encrypt/

Linuxでメモリを増設する!

コンピュータでメモリは重要。

一般的な使い方をする場合ならメモリは4GBで十分かもしれないけど、やはり快適に使うには8GBはほしい。

ソフトウェア開発者なら16GB、動画編集とかだったらより多くのメモリが必要だったりします。

なぜメモリが必要なのか?

コンピュータはプログラムを実行するのにメモリを使用します。

なのでたくさんコンピュータにお仕事させると、それだけたくさんメモリを消費します。

でもメモリの量は有限なので、たくさん仕事させると、いつかはメモリが足りなくなります。

そうなった場合、コンピュータはメモリ領域を確保するために、メモリのデータをストレージに吐き出し、メモリの容量を確保します。

このデータ領域を仮想メモリ、こういった処理をスワッピングまたはページングといいます。

この機能があるがために、少ないメモリでもコンピュータは動作できるのですが、この処理が頻発すると、ストレージのアクセスが多くなり、大幅な遅延が発生します。

この処理を減らすにはメモリの量を増やすしかありません。快適に作業するにはメモリを増やすのが一番良かったりします。

では、Linuxでメモリを確認する方法。

ターミナルを起動し、以下のコマンドを入力します。

$ sudo lshw

ハードウェアの情報を出力します。

その中にこんな表示があります。

bank0が元々搭載されていたメモリ、bank1が新たに追加したメモリです。

詳細の項目にSODIMMとあるのは、これはノートPC用のメモリであるということを示しています。デスクトップ用とノート要はパーツのサイズが違うので、物理的に増設することができません。

また、DDR3というのはメモリの種類、1600MHzというのはメモリの動作環境です。これらは元々積んであるメモリと同じ型を選択したほうがいいでしょう。

というわけで、追加したメモリと同じ物を買いました。

そして、増設後はlshwの出力はこうなりました。

メモリのサイズが4GBから16GBに増えました!

これでこのPCも開発用PCです!!

VPSのFTPポートを変更する

これはえらい人からの指示で調べた。

まずは、vsftpsにポート設定を書き足す。

$ sudo vi /etc/vsftpd.conf

listen_port=制御用ポート番号
pasv_enable=YES
pasv_min_port=データ通信用ポート番号(下限)
pasv_max_port=データ通信用ポート番号(上限)

まぁ、この設定を書き込むには、FTPの仕組みを理解しなければいけないわけで。

FTPは制御用ポートとデータ用ポートの2つを使用します。

デフォルトでは制御用ポートが20、データ用ポートが21です。

なので、iptablesの設定も、両方のポートを開ける必要がありました。

FTPのポート番号を変える場合はパッシブモードにする必要があります。

パッシブモードにした場合、データ用ポートはサーバ側でランダムに決定されます。

でも、本当にランダムだと、ファイアーウォールの設定が面倒なので、

そのポート番号の範囲を決めてあげる必要があります。

その下限をpasv_min_portで、上限をpasv_max_portで設定します。

つまり、ここでポートを指定してあげれば、ファイアーウォールはその部分だけ開ければ良いことになります。

まぁ、今回はめんどうなので、上限も下限も同じ値にして、データ用ポート番号も固定にしました。

FTPサーバを再起動

$ sudo /etc/init.d/vsftpd restart

iptableのポートを開けます

$ sudo iptables -I INPUT  -p tcp –dport 制御用ポート番号 -j ACCEPT

$ sudo iptables -I INPUT  -p tcp –dport データ用ポート番号(下限):データ用ポート番号(上限) -j ACCEPT

この時点で、新しいポート番号でデータ転送ができることを確認。

変更前のポート番号を閉じる

まずは、iptableの設定一覧を表示

$ sudo iptables -nL –line-number

一覧の中から削除する設定番号を指定する。

$ sudo iptables -D INPUT 設定番号

iptableの設定を保存

$ sudo iptables-save

これで完了です!

iptableの設定を保存する

VPSでiptableの設定しましたが、

これだけでは再起動すると設定が消えてしまいます。

これを解決します。

# apt-get install iptables-persistent

これをインストールすると設定が保存できます。

保存には、

# iptables-save

と撃ち込めばOK。

これをやっておけば、再起動してもiptableの設定が復元します。

VPSにファイアーウォールを設定する

今回はVPSにファイアーウォールを設定します。

使用するのはiptablesです。

これを設定しないと、全ポートが解放されている状態となり、

仮に、サーバに悪意のあるソフトが仕込まれ、ポートをlistenしている状態になっていると、

攻撃者はそのポートにアクセスするだけで簡単にサーバを書き換えることができてしまいます。

しかし、iptableを設定することで、外からの許可されたポート以外は全てiptablesでブロックしてくれます。

まずは、現状を確認

# iptables -nL

たぶん全ポート開放状態です。

データを持たないパケットを破棄

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

SYNflood攻撃と思われる接続を破棄

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

ステルススキャンと思われる接続を破棄

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

localhostからの通信とpingを許可

# iptables -A INPUT -i lo -j ACCEPT

httpによるアクセスを許可

# iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT

その他、使用しているサービスのポートを許可する

# iptables -A INPUT -p tcp -m tcp –dport [ポート番号] -j ACCEPT

確立済みの通信を許可に設定

# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

許可した通信以外のサーバに受信するパケットを拒否し、サーバから送信するパケットを許可

# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT

この状態で、使用しているサーバアクセスが一通りできることを確認する。

できなければ、そのポートを開放する。

で、この設定を保存するんだけど、通常ならservice iptables saveでできるはずなんだけど、

なぜかできないので、スクリプトを作って、再起動する度に設定を行うようにする。(めんどくせー)

これでファイアーウォールの設定できました!

独自ドメインのメールアドレスを取得する。

最初はVPSにメールサーバを立てようかと思ったけど、

いろいろ設定がめんどくさいのと、

セキュリティ的に怖いので、やめた。

ソフトはpostfixとDovecotを使用するんだけど、

まず、DNSの設定を変えなくちゃ行けない。

MXレコードとTXTレコードね。

あと、問題はスパムメール。

これを防げる自信は無い。

みんながいつも受け取っているメールの量の二倍ぐらいはスパムメール飛び交っているんだぞ。

で、お名前.comの共用メールサーバを借りることにした。

特に難しい設定はいらない。

ただ、ドメインの正引きが変わるので、メールサーバのDNS設定を忘れないこと。

設定はお名前.comの設定と同じ。

うん、簡単。