我有 2 个用户。test1
我用它创建的/sbin/nologin
并且没有密码。test2
具有sudo
特权和密码。
我有这个脚本:/data/tempWork/fazitst
必须在test2
.现在我想运行这个脚本,test1
但我希望它在test2
.
我尝试这样做test1
:
/bin/su -c "/data/tempWork/fazitst " - test2
但这没有用。我正在从应用程序运行此命令,因为我无法使用ssh
我无法正确调试它。没有日志。我用 root 尝试了这个命令,它起作用了。
但我猜它需要密码。那么我如何在没有密码的 test1
情况下运行我的脚本呢?test2
答案1
这正是sudo
设计的目的。
首先,具有 root 访问权限的人需要创建如下配置行/etc/sudoers
(或者/etc/sudoers.d/*
,如果您的操作系统版本支持):
test1 ALL=(test2) NOPASSWD: /data/tempWork/fazitst
这将授权用户test1
(在ALL
使用该文件副本的主机上sudoers
)以 user 身份执行带有任何命令行参数(或根本没有)的test2
命令,而无需密码请求。/data/tempWork/fazitst
然后,用户test1
可以使用以下命令执行它:
sudo -u test2 /data/tempWork/fazitst
如果执行命令时$HOME
环境变量需要指向用户的主目录test2
,您可能需要也可能不需要-H
在命令中添加该选项,具体取决于操作系统版本sudo
的默认配置。在这种情况下,用户运行sudo
的命令将是:test1
sudo -Hu test2 /data/tempWork/fazitst
如果重要的是环境设置与运行时完全相同su - test2
,则需要-i
选项:sudo
sudo -iu test2 /data/tempWork/fazitst