Upstart 用于 docker 和 setuid 权限

Upstart 用于 docker 和 setuid 权限

好吧,从昨晚开始,这件事至少让我忙了一天。我试图做一些非常简单的事情:运行一个 bash 脚本,它会创建几个文件夹并运行一个docker容器 - 但是使用upstart.但我收到权限错误:

  • 要么权限错误,要么创建文件夹,具体取决于它定义为哪个用户setuid
  • 无论如何,我得到了错误cannot enable tty mode on non tty input

我尝试过使用setuidwith uservuvu或直接将其省略,但都无济于事。如果我不使用,setuid我会得到cannot enable tty mode on non tty input;如果我使用我已设置为管理员的用户,我会得到该错误以及cannot create directory 'log/1438359854': Permission denied

这是我的visudo输出:

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL
%adm    ALL=(ALL) NOPASSWD:ALL
vuvu    ALL=(ALL:ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

并且我已将用户vuvu作为的一部分admin,但当它不能作为的一部分工作时adm

我的 upstart 很简单:

description "Job docker_some_api.conf created by create_init.py"
author "create_init.py"
start on runlevel [2345]
stop on runlevel [!2345]
setuid vuvu
chdir /home/myuser/Docker/docker_some_api/
script
        exec /home/myuser/Docker/docker_some_api/run.sh
end script

而且 shell 脚本很简单(我已经简化为只运行 ubuntu):

sudo docker run -t -i ubuntu

似乎什么都没起作用,现在我真的很沮丧。你们能帮忙吗?

答案1

找到了!!

问题在于指定-t哪个永远无法工作,因为它分配了一个伪 TTY。systemd 的一个类似问题是已报告但这个是针对新贵的。

所以我所要做的就是改变这一点:

sudo docker run -i ubuntu

现在看起来很简单,永远不要只是复制选项而没有意识到它们的作用。

相关内容