各位程序员,
我正在做我的学士项目,遇到了一点问题。
目标是创建一个 Web 应用程序,它可以操作和修改 WAGO PLC 750-8202(您可以将其想象成某种工业 Raspberry PI)的 I/O,它运行带有 lighttpd Web 服务器的嵌入式 Linux。我制作了一些使用 PLC 提供的 DAL(HAL) 函数的 C 脚本。
现在我想将它与我的网络应用程序/站点链接起来。我有一个简单的 PHP 页面(忽略按钮,它什么都不做):
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<button value="CLICK ME">CLICK ME</button>
<?php
echo system("kbusdemo1");
?>
</body>
</html>
kbusdemo1 执行但没有正确使用 DAL 提供的功能,它给我一个错误。如果我以 root 身份运行该脚本,它会完美运行。我发现问题在于 www 用户权限(我的网络服务器 lighttpd 使用),所以我尝试使用
编辑 sudoerssudo nano /etc/sudoers
Visudo 没有在PLC linux 系统中实现,所以我不得不直接打开它。我将其更改为下面发布的代码,但如果我尝试以 lighttpd 用户身份(使用 su www)运行 C 脚本,它仍然不起作用。我做错了什么?
感谢您的建议。
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# Runas alias specification
# User privilege specification
root ALL=(ALL) SETENV: ALL
admin ALL=NOPASSWD: /etc/config-tools/get_user_info user
ALL=NOPASSWD: /etc/config-tools/get_user_info
www ALL=(ALL) NOPASSWD:ALL
# Uncomment to allow people in group wheel to run all commands
# and set environment variables.
# %wheel ALL=(ALL) SETENV: ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: SETENV: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
最佳答案
谢谢大家的帮助。我让它工作了,我没有从 PHP 文件中将脚本调用为 sudo。正如您所建议的,我更改了 sudoers 中的行以仅允许一个特定的脚本,因此对我来说没有安全漏洞。
关于php - 编辑 sudoers 文件不生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43734661/