本日も乙

ただの自己満足な備忘録。

Ubuntu ServerにRStudio Serverをインストールしてみた

[toc]

研究部門の人からUbuntu ServerにRStuido Serverを入れてブラウザでRを操作したいと要望があったのでRStuido Serverをインストールしました。その時に操作した内容を紹介します。また、OpenLDAPを使っているので、RStudioにLDAPアカウントでログインできるようにしました。

動作環境

$ uname -srvmo
Linux 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 GNU/Linux
  • RStudio Server v1.0.143

インストール

ここに書いてある通りにすすめていきます。

$ sudo su -
% apt-get install r-base
% apt-get install gdebi-core
% wget https://download2.rstudio.org/rstudio-server-1.0.136-amd64.deb
% gdebi rstudio-server-1.0.136-amd64.deb
% rm -f rstudio-server-1.0.136-amd64.deb

% ps aux | grep [r]studio
rstudio+  7400  0.0  0.0 186088  6940 ?        Ssl  15:36   0:00 /usr/lib/rstudio-server/bin/rserver

% netstat -tanp | grep rserver
tcp        0      0 0.0.0.0:8787            0.0.0.0:*               LISTEN      7400/rserver

デフォルトで8787ポートが使われているようです。

LDAPとの連携

RStudio Serverはデフォルトではサーバ上のユーザ情報を使って認証します。今回はLDAPアカウントで認証をできるようにしたいので、pam_ldapを使えばLDAP認証が可能になります。 しかし、SSHに未ログインだとホームディレクトリ(/home/USER)が存在せず、RStdio Serverにログインする際に、/home/USER.rstudio が作成できずログインに失敗してしまう問題がありました。

USERはご自身のユーザ名に置き換えてください。

以下は、ログイン失敗時のログです。

Apr 18 15:07:55 ip-10-158-54-25 rsession-__USER__[5117]: ERROR system error 13 (Permission denied) [path=/home/__USER__/.rstudio, target-dir=]; OCCURRED AT: rstudio::core::Error rstudio::core::FilePath::createDirectory(const string&) const /home/ubuntu/rstudio/src/cpp/core/FilePath.cpp:826; LOGGED FROM: int main(int, char* const*) /home/ubuntu/rstudio/src/cpp/session/SessionMain.cpp:3303

pam_mkhomedir を使ってホームディレクトリを自動作成しようと試みたのですが、それでも上手くいきませんでした。どうやらPAMの認証後の時点で/home/USER/.rstudioを作成しようとしているのが原因のようです。そこで、認証時点でホームディレクトリを自動作成してみました。

以下のようなスクリプト(/usr/local/bin/mkhomedir.sh)を用意します。

#!/bin/sh

if [ ! -d /home/$PAM___USER__ ]; then
  mkhomedir_helper $PAM___USER__ 0077 /etc/skel
fi

実行権限を付与します。

% chmod +x /usr/local/bin/mkhomedir.sh

PAMの設定

LDAP認証に加え、ローカルで作成したアカウントでの認証もしたいという要望だったので次のように設定しました。

# /etc/pam.d/rstudio
auth            required                        pam_succeed_if.so uid >= 1000
auth            required                        pam_exec.so /usr/local/bin/mkhomedir.sh
auth            [success=2 default=ignore]      pam_ldap.so
auth            [success=1 default=ignore]      pam_unix.so
auth            requisite                       pam_deny.so
auth            requisite                       pam_permit.so

account         [success=2 default=ignore]      pam_ldap.so
account         [success=1 default=ignore]      pam_unix.so
account         requisite                       pam_deny.so
account         requisite                       pam_permit.so

session         required                        pam_ldap.so
session         optional                        pam_unix.so
# /etc/pam.d/rstudio-session
auth            required                        pam_succeed_if.so uid >= 1000
auth            required                        pam_exec.so /usr/local/bin/mkhomedir.sh
auth            [success=2 default=ignore]      pam_ldap.so
auth            [success=1 default=ignore]      pam_unix.so
auth            requisite                       pam_deny.so
auth            requisite                       pam_permit.so

account         [success=2 default=ignore]      pam_ldap.so
account         [success=1 default=ignore]      pam_unix.so
account         requisite                       pam_deny.so
account         requisite                       pam_permit.so

session         required                        pam_ldap.so
session         optional                        pam_unix.so

認証のテスト

正しく認証が通るかテストします。pamtesterというのをインストールします。

% apt-get install pamtester
# 一旦ホームディレクトリを削除する
% rm -rf /home/__USER__

% pamtester --verbose rstudio __USER__ authenticate
pamtester: invoking pam_start(rstudio, __USER__, ...)
pamtester: performing operation - authenticate
Password:
pamtester: successfully authenticated

% pamtester --verbose rstudio __USER__ acct_mgmt
pamtester: invoking pam_start(rstudio, __USER__, ...)
pamtester: performing operation - acct_mgmt
pamtester: account management done.

% pamtester --verbose rstudio __USER__ open_session
pamtester: invoking pam_start(rstudio, __USER__, ...)
pamtester: performing operation - open_session
pamtester: successfully opened a session

successfullyと表示されて、/home/USERが作成されていればダイジョブです。

nginx

http://<IPアドレス>:7878でRStdio Serverにアクセスできるのですが、 セキュリティと利便性の観点からnginxをリバースプロキシとて前段に置くことにします。

% apt-get install nginx

設定

nginxの基本設定は要件やお好みに合わせて設定してください。 VirtualHostとして/etc/nginx/conf.d/rstudio.confを新規に作成します。 HTTP(ポート80番)で設定していますが、よりセキュアにするにはHTTPS(ポート443番)で設定してください。 その際には、SSL証明書が必要です(こちらの方法で無料のSSL証明書を取得できます)。

# /etc/nginx/conf.d/rstudio.conf
upstream rstudio-server {
  server 127.0.0.1:8787;
}

server {
  listen 80 default_server;
  server_name rstudio.example.com;
  access_log /var/log/nginx/rstudio.access.log ltsv;

  ssl off;
  root /var/lib/rstudio-server/;

  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto https;
  proxy_pass_request_headers on;
  proxy_connect_timeout   1;
  proxy_send_timeout      300;
  proxy_read_timeout      300;
  proxy_redirect off;

  error_page 404 =404 /404.html;
  error_page 503 =503 /503.json;

  location / {
    proxy_pass http://rstudio-server/;
  }
}
% service nginx restart

http://rstudio.example.com にアクセスするとRStudioのGUIが表示されるはずです。(ドメインはご自身で取得されてDNSの設定なども済ませてください) LDAPアカウントもしくはサーバ内のローカルアカウントのユーザ名とパスワードを入力してログインできれば完了です!

rstudio_login

参考