読者です 読者をやめる 読者になる 読者になる

KITA Eng.

北海道でサーバー技術者として歩み出したひとが綴るblog。

続・さくらのVPS(Ubuntu14.04)にR Studioをインストールしてみた。==R Studio専用ユーザーの準備とHTTPS対応==

先日、こんな記事を書きました。 kitaeng.hateblo.jp

今日は、これの続編として、R Stusio専用ユーザーの準備HTTPSでのアクセス対応について書きます。

はじめに

前回の最後の方でちらりと書きましたが、R Studio Serverにログインするためのユーザーは、R Studio Serverをインストールした初期状態だと、ローカルユーザーなら誰でもログインできる仕様となっています。一見便利なように見えるんですけど、なんだかセキュリティ的には、そのまま運用するのはどうなんだろうって感じです。特にどっかにログが出てくる訳ではないようなのでsyslogに認証失敗やその他エラーログを出すようですが、ブルートフォースアタックとかで、ログイン情報をとられると、そのままサーバーへのアクセスをも許してしまいかねないというキケンがないわけでもない。

ということで、R Studio Serverへログインするユーザーは、R Studio Serverにだけログインできて、ローカルユーザーとしてはログイン出来ないようにしてあげて、かつ、R Studio Serverへのログイン画面の部分の通信をSSLで守ってあげて、セキュアーなR Studio Serverに近づけてみようと思います。

R Studio Server専用ユーザーをつくる

専用ユーザーを作るといっても、実態としてはローカルユーザーです。FTPのアカウントづくりとかでもよく使う、ログインシェルを持たないユーザーを作ってあげれば良いだけです。

R Studio Server側の認証設定で必要になるので、専用ユーザー用のユーザーグループ(例:rstudio_users)を作成しておきましょう。 sudo groupadd rstudio_users

この専用グループに属するユーザーをつくってみます。ログインシェルを持たないようにしてあげましょう。

"ruser1"というユーザーをログインシェル"/usr/sbin/nologin"で、ユーザーグループ"rstudio_user"で、ホームディレクトリを自動生成して作成する。
sudo useradd -s /usr/sbin/nologin -G rstudio_users -m ruser1
sudo passwd ruser1 <--パスワード設定

一応テスト用にもう二つばかし。

グループを指定してもう一つのアカウントをつくってみる。
sudo useradd -s /usr/sbin/nologin -G rstudio_users -m ruser2
sudo passwd ruser2 <--パスワード設定

あえてグループ指定なしにして、ログインの設定がうまくいっていることの検証に使ってみる。
sudo useradd -s /usr/sbin/nologin -m ruser3
sudo passwd ruser3 <--パスワード設定

R Studio Serverの設定

R Studio Serverの設定ファイルは、公式ページの手順(先日の記事の手順)でやっていれば、"/etc/rstudio"にあります。
cd /etc/rstudio

設定ファイルは2つが用意されていて、"rserver.conf"と"rsession.conf"があります。今回使うのは、"rserver.conf"です。といっても、インストールしたての設定ファイルには、何も記載されていません……。コメントアウトとかにしていてくれれば楽なのにと……。なので、自分で記載していきます。

■"/etc/rstudio/rserver.conf"の記載例

# Server Configuration File
www-port=8787
www-address=127.0.0.1
auth-required-user-group=rstudio_users

"www-port"でリッスンポートを指定します。設定を書かないと既定の8787になるようです。
"www-address"で接続を許可するIPアドレスを指定します。設定を書かないと、既定の0.0.0.0(どこでも)になるようです。
"auth-required-user-group"でユーザー認証に利用するユーザーグループを指定します。設定を書かないと、既定のどのユーザーグループでもになるようです。

ちなみに、公式のドキュメントには、"auth-required-user-group"を記述するファイルは既定ではないので、自分で作れよって書いてますが、この一行のために新しくファイルを置くのも無駄な気がするので、"rserver.conf"に書いています。設定としては、それでもはたらいています。ってことは、rsession.confに書くべき設定も一つにまとめて良いのではと思ったり…。

ここまで設定を書けたら、R Studio Serverを再起動します。
sudo rstudio-server restart

今までアクセス出来ていたアドレスではアクセス出来なくなっているハズ……。ローカルで動かしていたらそりゃつながるけど…。ネットワーク上で動かしている前提でのお話なので……。

NGINXの設定(めっちゃショートカット!)

  • nginxがWEBサーバーとして動いてるよ!
  • HTTPSでもOKだよ!

ということにします。書き出すと長くなる気がするし、ググると良記事いくらでもあるだろうので、割愛。

簡単で、HTTPSの設定をしてあるサーバーディレクティブに、R Studio Server用のlocationディレクティブを入れてあげればOKです。

    location /rstudio/ {
            proxy_pass http://localhost:8787/;
    }

"rstudio"の部分や、"8787"の部分は自分の設定に合わせてください。
"https://www.example.com/rstudio"とアクセスすれば、出てくるはずです。
もちろん、"https://www.example.com"のアクセスで運用したければ、

    location / {
            proxy_pass http://localhost:8787/;
    }

としてあげればOKです。

一応、HTTPSに関わるサーバーディレクティブの記述(https.confというファイルに分けて書いてます)はこんな感じ(最小構成)です。 ■"/etc/nginx/conf.d/https.conf"の記載例

server {
    listen       443 ssl;
    server_name  www.example.com;

    ssl_certificate     /etc/nginx/keys/ssl.crt;
    ssl_certificate_key /etc/nginx/keys/ssl.key;

    access_log  /var/log/nginx/access_https.log main;

    location / {
            root   /var/www/html443;
            index  index.html index.htm;
    }

    location /rstudio/ {
            proxy_pass http://localhost:8787/;
    }
}

設定を書き換え終わったら、NGINXの再起動をお忘れ無く。
sudo service nginx restart

さぁ、試してみよう!

"https://www.example.com/rstudio"にアクセスして出てきたログイン画面で、"ruser1"、"ruser2"だとうまくログイン出来るはずです。"ruser3"だと、"Error: Incorrect or invalid username/password"となってログイン出来ないはずです。


とりあえずこれで、最低限のセキュアなR Studio Serverになったような気がする...。

公式さんの↓曰く、 support.rstudio.com

もうちょっとカスタマイズできる模様。セッションの管理とか。複数人でゴリゴリ使うなら結構重要な設定かも。