[toc]
研究部門の人からUbuntu ServerにRStuido Serverを入れてブラウザでRを操作したいと要望があったのでRStuido Serverをインストールしました。その時に操作した内容を紹介します。また、OpenLDAPを使っているので、RStudioにLDAPアカウントでログインできるようにしました。
動作環境
- Ubuntu 16.04.02 LTS
$ 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アカウントもしくはサーバ内のローカルアカウントのユーザ名とパスワードを入力してログインできれば完了です!