【问题标题】:Editing sudoers file not taking effect编辑sudoers文件不生效
【发布时间】:2017-09-29 18:52:59
【问题描述】:

各位程序员,

我正在完成我的学士学位项目,但遇到了一些问题。

我们的目标是创建一个网络应用程序,该应用程序可以操作和修改 WAGO PLC 750-8202(您可以将其想象为某种工业 Raspberry PI)的 I/O,该应用程序运行带有 lighttpd 网络服务器的嵌入式 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 使用),所以我尝试用

编辑 sudoers
sudo nano /etc/sudoers

在PLC linux系统中没有实现Visudo,所以我不得不直接打开它。我将其更改为下面发布的代码,但如果我尝试以 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

【问题讨论】:

  • 我认为您需要查看的问题是为什么kbusdemo1 仅在以root 身份运行时运行。它是否读取(不必要地)由 root 拥有的任何文件。您是否将 kbusdemo1 编译为 root ? (又没必要了?)或者你写的硬件交互需要root权限?
  • 硬件交互可能需要root权限。它需要访问 PLC 的内部内存,获取 I/O 模块的值信息并更改它们,所以我认为脚本需要以 root 身份运行。
  • 好的,所以现在不要尝试将二进制文件添加到 sudoers 文件中,您可以将文件的所有者更改为 root 并尝试为二进制文件设置 suid 标志。这将允许任何用户以 root 身份运行二进制文件。
  • 您可以chown 将二进制文件的所有者更改为root。然后切换到root并运行chmod u+s kbusdemo1
  • PHP、systemsudo 是制造出色安全漏洞的成分。你应该看看here,了解一些安全问题。

标签: php linux rights sudoers


【解决方案1】:

感谢您的所有帮助。我让它工作了,我没有从 PHP 文件中将脚本调用为 sudo。正如你所建议的那样,我将 sudoers 中的行更改为只允许一个特定的脚本,所以对我来说没有安全漏洞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2012-07-08
    • 2021-10-24
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多