系统相关
首页 > 系统相关> > linux – 以非root身份运行闪亮服务器

linux – 以非root身份运行闪亮服务器

作者:互联网

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

shiny-server --version

Shiny Server v1.4.2.786
Node.js v0.10.40

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

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

我将配置更改为不包含任何需要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 ")

服务器日志告诉我,我从htop输出看到闪亮服务器以root身份运行. (旁注:闪亮的服务器仍然使用/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

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

>如果为任何位置启用了user_apps或user_dirs.为了将应用程序作为各种用户托管,Shiny Server必须具有root权限.

>检查.我的shiny-server.conf既不使用user_apps也不使用user_dirs

>如果您的配置使用run_as将应用程序生成为多个不同的用户.

>检查. run_as将shiny定义为唯一的用户

>如果您在特权端口(1-1024范围内的端口)上运行任何服务器.

>检查.闪亮的服务器侦听端口3838

虽然我认为安装符合要求,但闪亮的服务器仍以root身份运行.

>如何强制闪亮的服务器作为闪亮的用户或甚至不属于sudoers组的用户运行?
> shiny-server.conf是否需要在其他任何地方找到?
>那么我如何让闪亮的服务器知道这个新位置呢?
>我是否需要更改/ opt / shiny-server / config /中的任何内容或/ etc / shiny-server /上的任何权限?

在@warmoverflow评论后编辑我将/etc/init/shiny-server.conf移动到〜/ .init.现在,闪亮的服务器在启动时不会自动启动.但是启动闪亮服务器也没有成功,因为暴发户不知道〜/ .init文件夹.从一些论坛帖子看来,dbus似乎需要启动,通常通过启动图形环境来实现.因为我正在运行Ubuntu服务器,所以这不会发生.创建upstart手册http://upstart.ubuntu.com/cookbook/#session-init中提到的两个文件也无济于事,因为作业无法启动.

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

解决方法:

如果您的唯一目标是确保闪亮服务器以非root身份运行,并且您可以使用sudo启动闪亮服务器(即使它是以sudo启动的,它也可以作为非root用户运行).

编辑/etc/init/shiny-server.conf,和

>在开头添加以下两行

setuid shiny
setgid shiny

>将第3行更改为

exec shiny-server --pidfile=/home/shiny/shiny-server.pid >> /home/shiny/shiny-server.log 2>&1

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

> /var/log/shiny-server.log包含服务器本身的日志,并在/etc/init/shiny-server.conf中定义
> / var / log / shiny-server /是包含应用程序日志文件的文件夹,在/etc/shiny-server/shiny-server.conf中定义.

完成上述更改并更改了run_as用户后,再次使用sudo start shiny-server启动shiny-server,您会发现有光泽的服务器实际上是作为非root用户运行的,并且警告在日志文件也将消失.

标签:shiny-server,linux,shiny
来源: https://codeday.me/bug/20190724/1525519.html