【问题标题】:Vagrant user doesn't seem to natively have sudo/root permissionsVagrant 用户似乎本身没有 sudo/root 权限
【发布时间】:2016-12-22 14:56:51
【问题描述】:

我正在尝试确定 Vagrant 或 nginx 中是否存在错误。

我有以下Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.network "private_network", ip: "10.0.1.7"
  config.vm.network :forwarded_port, guest: 8080, host: 9005
end

所以我运行vagrant up && vagrant ssh 并且服务器提供并启动。我想手动在我的新 VM 上安装 nginx,所以(根据 the instructions 在 Ubuntu 14.04 上安装 nginx)然后我运行:

sudo apt-get update
sudo apt-get install nginx

nginx 安装。我运行mkdir ~/mysite,然后将其/etc/nginx/nginx.conf 文件更改为:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   /home/vagrant/mysite;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include servers/*;
}

然后我运行nginx -s reload。我收到的错误是:

vagrant@precise32:~$ nginx -s reload
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2016/12/22 00:36:48 [notice] 1442#0: signal process started
2016/12/22 00:36:48 [alert] 1442#0: kill(890, 1) failed (1: Operation not permitted)

我的理解是,vagrant 应该是 VM 上具有 sudo 访问权限和 root 权限的用户。不?谁能重现这一点并弄清楚为什么我无法使用我的自定义 nginx.conf 文件重新加载 nginx?

【问题讨论】:

    标签: nginx vagrant ubuntu-14.04 user-permissions


    【解决方案1】:

    vagrant 用户确实拥有sudo 权限,但这并不是因为它有这个权限,他可以以root 身份运行命令。正如您使用 sudo 运行 sudo apt-get update 一样,您需要使用 sudo 运行 nginx:

    $ sudo nginx -s reload
    

    【讨论】:

    • 感谢@Frederic Henri (+1) - 但是当我运行你的命令时,我现在收到以下错误:nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)...有什么想法吗?再次感谢!
    • 检查 nginx 是否正在运行 ps -edf | grep nginx 并杀死所有进程然后重新启动
    • 再次感谢,但没有进程正在运行。运行该 grep 的输出只会产生实际 grep (vagrant 1728 1102 0 15:41 pts/0 00:00:00 grep --color=auto nginx) 的结果。重新运行 sudo nginx -s reload 会产生与以前相同的错误。
    • 有趣...我运行 perl -e '$0="sadhadxk"; sleep infinity' & 来创建一个虚拟 perl pid,Ubuntu 为它创建了一个 1782 的 pid。所以我在/var/run/nginx.pid(我必须创建)的文件中写入了 1782,然后我重新加载了 nginx(使用 sudo)。当我这样做时,我得到了以下输出:[1]+ Hangup perl -e '$0="sadhadxk"; sleep infinity'。所以很明显nginx找到了文件,从文件中读取pid,杀掉pid。然后我运行了ps -aef | grep nginx,但 nginx 仍然没有运行。
    • 好的,但是你可以删除 pid 文件,重新启动 VM,然后执行 sudo /etc/init.d/nginx start 你会看到是否有错误,你也可以查看 /var/logs/nginx 以获取错误详细信息
    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多