Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 以非root用户身份运行服务器_Linux_Shiny_Shiny Server - Fatal编程技术网

Linux 以非root用户身份运行服务器

Linux 以非root用户身份运行服务器,linux,shiny,shiny-server,Linux,Shiny,Shiny Server,我在虚拟机中安装了闪亮服务器(VirtualBox中的ubuntu服务器14.04.4) 总而言之,服务器运行良好,并按预期启动应用程序 我唯一缺少且未能实现的是,Shining server正在以非特权用户的身份运行。我甚至完全建立了一个新的虚拟机和闪亮的服务器,以确保没有试用配置更改仍然有效 我已将配置更改为不包含任何需要root权限的文件夹: $ cat /etc/shiny-server/shiny-server.conf # Instruct Shiny Server to run a

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

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

我唯一缺少且未能实现的是,Shining server正在以非特权用户的身份运行。我甚至完全建立了一个新的虚拟机和闪亮的服务器,以确保没有试用配置更改仍然有效

我已将配置更改为不包含任何需要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输出中看到的相同信息,即Shining server作为root用户运行。(旁注:
shinny server
仍然使用
/var/log/shinny server.log
而不是
/home/shinny/shinny\u sitedir/logs
,这也让我很恼火)

闪亮的服务器文档
http://docs.rstudio.com/shiny-server/#running-具有root权限的Shining server
提供了非root用户需要满足的需求列表。实际上,它定义了服务器需要作为根用户运行的状态:

  • 如果为任何位置启用了用户应用程序或用户目录。为了以各种用户的身份承载应用程序,Shining Server必须具有root权限。
    • 检查。My Shining-server.conf既不使用用户应用程序也不使用用户目录
  • 如果您的配置使用run_as将应用程序生成为多个不同的用户。
    • 检查。run_as将Shining定义为唯一用户
  • 如果您在特权端口(1-1024范围内的端口)上运行任何服务器。
    • 检查。服务器侦听端口3838
  • 尽管我认为安装满足了要求,但Shining server仍然以root用户身份运行

    • 如何强制Shining server以Shining用户或甚至不属于sudoers组的用户的身份运行
    • shinny-server.conf是否需要定位到其他任何位置
    • 那么,我如何让闪亮服务器知道这个新位置呢
    • 我是否需要更改
      /opt/shinny server/config/
      中的任何内容或
      /etc/shinny server/
      上的任何权限
    @warmoverflow注释后编辑我将
    /etc/init/shinny server.conf
    移动到
    ~/.init
    。现在,闪亮服务器不会在启动时自动启动。但是
    启动闪亮服务器
    也没有成功,因为upstart不知道
    ~/.init
    文件夹。从一些论坛帖子来看,dbus似乎需要启动,这通常是通过启动图形环境来实现的。当我运行Ubuntu服务器时,这不会发生。创建upstart手册中提到的两个文件
    http://upstart.ubuntu.com/cookbook/#session-init也没有帮助,因为作业无法启动


    是否有人知道如何继续或在哪里可以找到一些信息?

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

    编辑
    /etc/init/shinny server.conf
    ,然后

  • 在开头添加以下两行

    setuid shiny
    setgid shiny
    
  • 将最后第三行更改为

    exec shiny-server --pidfile=/home/shiny/shiny-server.pid >> /home/shiny/shiny-server.log 2>&1
    
  • 请注意,Shining有两个默认日志文件位置

  • /var/log/shinny server.log
    包含服务器本身的日志,并在
    /etc/init/shinny server.conf

  • /var/log/shinny server/
    是包含应用程序日志文件的文件夹,在
    /etc/shinny server/shinny server.conf
    中定义


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

    我正在运行shinny server v1.4.4.801(Node.js v0.10.46). 在这个版本上,初始化是通过systemd完成的

    要以非根用户身份运行shiny,必须编辑
    /etc/systemd/system/shinny server.service
    文件。 向
    ExecStart
    添加
    setuid-shinny
    setgid-shinny
    命令,如下所示:

    ExecStart=/bin/bash -c 'setuid shiny; setgid shiny; /opt/shiny-server/bin/shiny-server --pidfile=/var/run/shiny-server.pid >> /var/log/shiny-server.log 2>&1'
    
    现在,您可以通过键入
    systemctl start shinny server.service
    来启动Shinny server


    键入
    systemctl enable shinny server.service
    以在重新启动时自动启动shinny server。

    如果您愿意在更高的端口号(>5000)上运行shinny server,可以使用systemd执行此操作

    运行
    systemctl编辑服务器。服务
    并添加:

    [Service]
    User=shiny
    Group=shiny
    UMask=027
    
    然后
    systemctl停止shinny server.service
    并编辑
    /etc/shinny server/shinny server.conf
    并将其更改为
    listen 8383

    如果您还没有,请执行以下操作:

    chown -R shiny:shiny /var/log/shiny-server* /etc/shiny-server
    chmod -R u+rwX,g+rX,o-rwx /var/log/shiny-server* /etc/shiny-server
    

    启动该服务,它应该以服务帐户用户/组的身份运行。

    这里的问题是,
    Start
    命令必须以root用户的身份运行,即使它启动的实际服务是以非root用户的身份运行的。有一种方法可以在没有root的情况下运行
    start
    ,但是如果您愿意的话,您需要修改
    upstart
    配置文件。请参阅@warmoverflow:谢谢你的提示。我想我前进了一步,但现在我又被卡住了——我添加了一个编辑来记录我所做的事情。我已经非常接近了,但还很远。第二点至关重要!我的
    /etc/init/shinny server.conf几乎拥有一切,缺少第二个提示,这使得shinny服务器无法启动。谢谢!为了清楚起见,重要的是将其添加到/etc/init/shinny-server.conf,而不是类似的名称/etc/shinny-server/shinny-server.conf:)这里的答案正确地说明了这一点,对于meRevisiting来说,再次说更改为/home/shinny/shinny-server.pid的“步骤2”实际上很重要只是一个小小的困惑。否则,shiny将无法启动,尤其是在重新启动后(我使用的是
    sudo-servic)
    
    [Service]
    User=shiny
    Group=shiny
    UMask=027
    
    chown -R shiny:shiny /var/log/shiny-server* /etc/shiny-server
    chmod -R u+rwX,g+rX,o-rwx /var/log/shiny-server* /etc/shiny-server