RStudio は R のための統合開発環境 (IDE) です。RStudio には 2 つのエディションがあります。デスクトップアプリケーションとして利用する RStudio Desktop と、Linux 上でサービスとして動作させてリモート PC からウェブブラウザでアクセスして利用する RStudio Server です。
普段は RStudio Desktop (デスクトップ版と呼ぶことにします)を利用しているのですが、ある事情で RStudio Server の方も使うことになりました、RStudio Server はリモート PC から利用できますが、もちろんサーバである localhostでもウェブブラウザ上で利用できます。ポートは 8787です。ウェブブラウザ上で RStudio を利用する以外はデスクトップ版と使用感はほとんど違いません。
Sign In 画面は表示されるが…
RedHat/CentOS 用のパッケージ rstudio-server-rhel-1.1.456-x86_64.rpmをダウンロードして [1]Fedora 28の環境へインストールしました。
早速 Google Chrome を起動して localhost:8787 にアクセスすると、RStudio への Sign In ウィンドウが表示されます。ログインしている Linux (Fedora) のユーザーアカウント(この例では bitwalk)とそのパスワードを入力して、Sign Inボタンをクリックします。
しばし待つと、「サービスに接続できませんでした」という意味のエラーメッセージが表示され、Sign In に失敗してしまいます。
SELinux を一時的に無効にする
Fedora では SELinux がデフォルトで有効になっていますので、まずは SELinux が影響しているかどうかを確認するため、次のように SELinux を一時的に無効(enforcing → permissive)にします。
$ sudo setenforce 0
[sudo] bitwalk のパスワード:
$
ウェブブラウザ上で前述の URL を再読み込みさせると無事 Sign In に成功します。どうやら SELinux が影響しているようです。
SELinux について
SELinux (Security-Enhanced-Linux) は Linux ディストリビューションの名前ではなく、カーネルに強制アクセス制御機能を加えるモジュールの名称です。ディレクトリやファイルに割り当てられているパーミッションとは別に、SELinux はプロセスごとにアクセス制限し、root を含む全てのユーザに対する制限をかけることで、root に権限が集中することを防ぎ、高いセキュリティを持ったシステムを構築できるようにしています。
これは、コンピュータウィルスのような外部からの不正侵入に対して完全な防御をする、というものではなく、被害を最小限に食い止めるというアプローチです。
SELinux を簡単に無効にはしたくない
では、SELinux を無効にして RStudio Server を使うのか?そういう簡単な選択もできるでしょう。しかし SELinux を全て無効にしてしまうことは、愛用している Linux マシンのセキュリティレベルをむざむざ下げることになります。
業務で使っている Windows PC では、コンピュータウィルスなどの外部からの不正侵入を防ぐため、ウィルス対策ソフトウェアをインストールして、適切に運用することが社内的に義務づけられています。そのため、Winodws PC では自分が使う用途ばかりでなく、常にウィルス対策のためのタスクに相応のリソース(と人的な確認の手間)を割いています。
Linux にウィルス対策ソフトウェアをインストールせずにいろいろな環境で安心して使っていられるのは、(エンドユーザーには)ポピュラーではない OS である、という事情もありますが、Windows OS にはない堅牢なシステムの構造があるからです。
SELinux を扱うのに不慣れだという理由で無効にすることは避けたいので、今回は SELinux と向き合ってみることにしました。
SELinux Troubleshooter を使う
GNOME3 のデスクトップの場合、アプリケーションの一覧にある「諸ツール」から SELinux Troubleshooter を起動します。
SELinux Troubleshooter の起動すると、SELinux が検出した問題と、原因プロセス、試行したアクセス、対象が表示されます。トラブルシュートボタンをクリックすると解決策が表示されます。
端末エミュレータを起動し、解決策を実行します。
$ sudo ausearch -c 'rserver' --raw | audit2allow -M my-rserver
[sudo] bitwalk のパスワード:
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i my-rserver.pp
$ sudo semodule -X 300 -i my-rserver.pp
$
残念ながら、これだけでは RStudio Server に Sign In できず、状況は変わりませんでした。
めげずに、再度 SELinux Treoubleshooter を起動すると、前回と異る原因プロセスが表示されています。
再び端末エミュレータ上で、解決策を実行します。
$ sudo ausearch -c 'rsession' --raw | audit2allow -M my-rsession
[sudo] bitwalk のパスワード:
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i my-rsession.pp
$ sudo semodule -X 300 -i my-rsession.pp
$
今後は、ウェブブラウザ上で RStudio を利用できるようになりました。
これで全てが問題なく動くようになったかどうかは解りませんが、不具合に遭遇した時に SELinux の影響が考えられる場合には同じやり方で対処できそうです。
参考サイト

にほんブログ村