我开发了一个 perl 脚本,它提供了一个菜单驱动功能,允许用户执行一些简单的任务。
我需要用户能够以不同的用户身份执行复制文件(保持当前日期和权限)、运行其他程序(例如 less 或 vi)等任务。该脚本大量使用了 system() 函数。我希望用户通过调用来启动菜单:
sudo -u perluser /usr/bin/perl /data/perlscripts/scripta.pl
这应该以 perl 用户身份启动脚本,它确实如此,然后根据用户的选择执行不同的任务。问题是每当我使用诸如
之类的系统调用时system("clear");
出现以下错误
Can't exec "clear": Permission denied at /data/perlscripts/scripta.pl line 3
如果我以 perluser 身份登录运行脚本,那么它会成功运行。
有什么方法可以让它工作吗?我不希望用户能够以 perluser 身份登录,因为我需要控制他们能够运行的内容。我也不想运行这样的命令
system("sudo -u perluser clear");
然后我需要一个不同的团队来设置我想运行的所有 sudo 命令(他们可能会拒绝这样做),如果我必须在某个时候添加额外的命令,这将无法扩展。
谢谢,
最佳答案
我认为您可能需要将 -i
选项(“模拟初始登录”)添加到 sudo
:
sudo -i -u perluser /usr/bin/perl /data/perlscripts/scripta.pl
这将确保 .profile
或 .login
或诸如此类的东西正常运行,因此 $PATH
设置正确等等在。实际上,在几乎所有方面,就好像 perluser
实际上在 shell 上登录并运行 /usr/bin/perl/data/perlscripts/scripta.pl
.
关于linux - 使用 sudo 作为另一个用户运行时的 Perl 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739653/