我正在尝试从 root 运行一些自动脚本,这些脚本将在“tmux”会话中以另一个用户的身份开始运行其他脚本。
例子:
文件 1 — “start_test_script.sh” — 在“root”主目录中:
#!/bin/bash
cd /home/user/; sudo -u user ./test_script.sh
cd ~
文件 2 — “test_script.sh” — 在“用户”主目录中:
#!/bin/bash
tmux new -d -s test
tmux send -t test './test_script_02.sh' ENTER
解释:
“文件 1” 将以“root”身份执行,而“文件 2” 将以“user”身份执行。
“文件 2” 将启动一个名为“test”的独立“tmux”会话,然后它将尝试在该会话中运行第 3 个文件。
通常这应该可以正常工作,我在 Virtualbox 上本地尝试过,没有任何问题。
我启动了 VPS 服务器并尝试了它,但它没有正常工作。root 中没有错误,但发生了两件事。
我在“用户”中创建的“tmux”会话中收到错误:
/root/.tmux.conf: /root/.tmux.conf: Permission denied
而且,第三个脚本“./test_script_02.sh”无法运行。“tmux”会话在创建后就挂在那里,除非我按“CTRL-C”,否则我甚至无法在会话中写入任何内容。当我按“CTRL-C”时,我得到了以下相同的错误。它看起来一模一样。
当我尝试通过从其 shell 运行“tmux”命令从“用户”本身打开“tmux”会话时,tmux 会话运行,但我在会话顶部收到一个错误,它在会话内部看起来像这样:
-bash: /root/.bash_profile: Permission denied
user@server:/home/user$
先谢谢了。
编辑01:
好的,显然我在 VPS 上所做的与在本地机器上所做的并不完全相同。
在本地计算机上,安装服务器时,除了 root 用户外,您还会创建一个用户,并将其添加到“sudo”组。在 VPS 上,他们会直接将您置于“root”shell 中。
因此我一直尝试以“root”身份运行,而不是以任何其他具有提升权限的用户身份运行。
我现在所做的是列出 /dev/pts/ 上的权限
root@server:/dev/pts# ls -l
total 0
crw------- 1 root tty 136, 0 Oct 31 16:12 0
crw--w---- 1 user tty 136, 1 Oct 31 16:09 1
crw--w---- 1 user tty 136, 2 Oct 31 14:19 2
crw--w---- 1 root tty 136, 3 Oct 31 14:17 3
c--------- 1 root root 5, 2 Oct 31 14:17 ptmx
然后创建一个新用户“admin”并将其添加到“sudo”组,然后再次列出权限并发现:
admin@server:~$ ls -l /dev/pts/*
crw------- 1 root tty 136, 0 Oct 31 16:14 /dev/pts/0
crw--w---- 1 user tty 136, 1 Oct 31 16:09 /dev/pts/1
crw--w---- 1 user tty 136, 2 Oct 31 14:19 /dev/pts/2
crw--w---- 1 root tty 136, 3 Oct 31 16:15 /dev/pts/3
crw--w---- 1 admin tty 136, 4 Oct 31 16:15 /dev/pts/4
c--------- 1 root root 5, 2 Oct 31 14:17 /dev/pts/ptmx
现在,我不确定是否存在真正的原因,因为您可以看到“root”没有对组的写权限,而“admin”有。
现在,如果我以用户“admin”而不是“root”的身份运行命令,我就能够使我的脚本正常运行。
至于上面提到的从“用户”运行“tmux”时的第二个错误,它似乎只在从“root”运行脚本后才会发生,最后以上面第一个错误中提到的权限被拒绝而告终。
在这个阶段,我不确定是否可以称这个问题已经解决,也许我一开始就不应该使用“root”shell,而是创建一个新用户并将其添加到“sudo”组。
答案1
使用 -i 选项运行 sudo:。sudo -i -u user ./test_script.sh
这也会为用户设置环境变量。