linux - 使用 sudo 作为另一个用户运行时的 Perl 系统调用

标签 linux perl redhat

我开发了一个 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/

相关文章:

perl - 如何灵活向Moose对象添加数据?

java - x64 Redhat 所需的 JDK 1.6 rpm

linux - 如何使用 monit 轮询多个 pid

监控linux系统的python插件

linux - Perl 系统返回代码 65280 并成功

Perl如何加入所有线程

linux - 仅在键入字符后退格删除 bash 提示

android - 在 Linux 虚拟机中配置 Android Studio 和 SDK 时出错

java - 从命令行 Linux 运行 Java 程序

c - System V AMD64 ABI 浮点可变参数顺序