Привет товарищи программисты,
Я работаю над проектом моего бакалавра и попал в небольшую проблему.
Цель состоит в том, чтобы создать веб-приложение, которое может управлять и модифицировать ввод / вывод WAGO PLC 750-8202 (вы можете представить это как некий промышленный Raspberry PI), на котором работает встроенный linux с веб-сервером lighttpd. Я сделал несколько C-скриптов, которые используют функции DAL (HAL), которые обеспечивает ПЛК.
Теперь я хочу связать его с моим веб-приложением / сайтом. У меня есть простая страница 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
Visudo не реализована в системе Linux PLC, поэтому мне пришлось открыть ее напрямую. Я изменил его на код, размещенный ниже, но если я попытаюсь запустить скрипт C от имени пользователя lighttpd (с su www), он все равно не будет работать. Что я делаю неправильно?
Спасибо за ваши предложения.
# 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
Спасибо за твою помощь. У меня все получилось, я не называл скрипт sudo из файла PHP. И, как вы предложили, я изменил строки в sudoers, чтобы разрешить только один конкретный сценарий, поэтому для меня не было дыр в безопасности.
Других решений пока нет …