以非root身份运行shiny服务器

sar*_*gas 5 linux shiny shiny-server

我在虚拟机中安装了shiny服务器(VirtualBox中的ubuntu服务器14.04.4)

shiny-server --version

Shiny Server v1.4.2.786
Node.js v0.10.40
Run Code Online (Sandbox Code Playgroud)

总而言之,服务器运行良好并按预期启动应用程序。

我唯一缺少和未能实现的是闪亮的服务器作为非特权用户运行。我什至完全设置了一个新的虚拟机和闪亮的服务器,以确保没有试用配置更改仍然生效。

我更改了我的配置,使其不包含任何需要 root 权限的文件夹:

$ cat /etc/shiny-server/shiny-server.conf
# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server {
  listen 3838;

  # Define a location at the base URL
  location / {

    # Host the directory of Shiny Apps stored in this directory
    # site_dir /srv/shiny-server;
    site_dir /home/shiny/shiny_sitedir/apps; 

    # Log all Shiny output to files in this directory
    # log_dir /var/log/shiny-server;
    log_dir /home/shiny/shiny_sitedir/logs;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  }
}


# privileges of shiny user
uid=1000(shiny) gid=1000(shiny) groups=1000(shiny),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lpadmin),111(sambashare)

# owner of /etc/shiny-server
-rw-r--r--  1 root root shiny-server.conf

# trying to start shiny server as user shiny without sudo
$ start shiny-server 
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.6" (uid=1000 pid=1134 comm="start shiny-server ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init ")
Run Code Online (Sandbox Code Playgroud)

服务器日志告诉我与我从 htop 输出中看到的一样,闪亮的服务器以 root 身份运行。(旁注:shiny server仍然使用/var/log/shiny-server.log而不是/home/shiny/shiny_sitedir/logs,这也让我烦恼)

[...] [INFO] shiny-server - Shiny Server v1.4.2.786 (Node.js v0.10.40)
[...] [INFO] shiny-server - Using pidfile /var/run/shiny-server.pid
[...] [INFO] shiny-server - Using config file "/etc/shiny-server/shiny-server.conf"
[...] [WARN] shiny-server - Running as root unnecessarily is a security risk! You could be running more securely as non-root.
[...] [INFO] shiny-server - Starting listener on 0.0.0.0:3838
Run Code Online (Sandbox Code Playgroud)

闪亮的服务器文档http://docs.rstudio.com/shiny-server/#running-shiny-server-with-root-privileges列出了非 root 使用需要满足的要求列表。实际上它定义了闪亮服务器需要以 root 身份运行的状态:

  1. 如果为任何位置启用了 user_apps 或 user_dirs。为了以不同的用户身份托管应用程序,Shiny Server 必须具有 root 权限。
    • 查看。我的shiny-server.conf既不使用user_apps也不使用user_dirs
  2. 如果您的配置使用 run_as 作为多个不同用户生成应用程序。
    • 查看。run_as 将shiny定义为唯一用户
  3. 如果您在特权端口(1-1024 范围内的端口)上运行任何服务器。
    • 查看。闪亮的服务器侦听端口 3838

尽管我认为安装满足要求,但闪亮的服务器仍然以 root 身份运行。

  • 如何强制闪亮服务器以闪亮用户甚至不属于 sudoers 组的用户身份运行?
  • shiny-server.conf 需要定位到其他地方吗?
  • 那么我该如何让闪亮服务器知道这个新位置呢?
  • 我需要更改/opt/shiny-server/config/中的任何内容或任何权限吗/etc/shiny-server/

在 @warmoverflow 发表评论后进行编辑,我/etc/init/shiny-server.conf移至~/.init. 现在,闪亮的服务器不会在启动时自动启动。但两者都没有start shiny-server成功,因为新贵不知道该~/.init文件夹。从一些论坛帖子来看,dbus 似乎需要启动,它通常通过启动图形环境来完成。因为我运行的是 Ubuntu 服务器,所以不会发生这种情况。创建新贵手册中提到的两个文件http://upstart.ubuntu.com/cookbook/#session-init也没有帮助,因为作业无法启动。

有人提示如何继续或我可以在哪里找到一些信息吗?

Xio*_*Jin 4

如果您的唯一目标是确保以shiny-server非 root 用户身份运行,并且您可以开始shiny-server使用 sudo (即使它是使用 sudo 启动的,它也可以作为非 root 用户运行)。

编辑/etc/init/shiny-server.conf,并且

  1. 在开头添加以下两行

    setuid shiny
    setgid shiny
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将倒数第三行更改为

    exec shiny-server --pidfile=/home/shiny/shiny-server.pid >> /home/shiny/shiny-server.log 2>&1
    
    Run Code Online (Sandbox Code Playgroud)

请注意,Shiny 有两个默认日志文件位置。

  1. /var/log/shiny-server.log包含服务器本身的日志,并在中定义/etc/init/shiny-server.conf

  2. /var/log/shiny-server/是包含应用程序日志文件的文件夹,在/etc/shiny-server/shiny-server.conf.

一旦您进行了上述更改并更改了run_as用户,请使用 再次启动shiny-server sudo start shiny-server,您会注意到它shiny-server实际上是以非root用户身份运行的,并且日志文件中的警告也将消失。