안녕 동료 프로그래머,편집의 sudoers 효과
내 학사 프로젝트에 참여하고 약간의 문제에있어 야를 복용 파일이 없습니다.
목표는 WAGO PLC 750-8202 (산업용 라즈베리 PI의 일종으로 상상할 수 있음)의 I/O를 작동 및 수정할 수있는 웹 응용 프로그램을 만드는 것입니다. lighttpd 웹 서버가 내장 된 Linux를 실행합니다 . PLC가 제공하는 DAL (HAL) 기능을 사용하는 C 스크립트를 만들었습니다.
이제 웹 응용 프로그램/사이트와 연결하고 싶습니다.
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<button value="CLICK ME">CLICK ME</button>
<?php
echo system("kbusdemo1");
?>
</body>
</html>
kbusdemo1이 실행을하지만 제대로 DAL에서 제공하는 기능을 사용하지 않는, 그것은 나에게 오류를 제공합니다 : 나는 간단한 PHP 페이지가 (버튼을 무시, 그것은 아무것도하지 않는다). 스크립트를 루트로 실행하면 완벽하게 작동합니다. 나는 문제가 (내 웹 서버 lighttpd를 사용하는) www가 사용자 권한으로 거짓말을 발견, 그래서 내가 직접 열 수 있었다 visudo를가 PLC의 리눅스 시스템에서 구현되지
sudo nano /etc/sudoers
과 편집의 sudoers를 시도했다. 아래에 게시 된 코드로 변경했지만 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'은 루트로 실행될 때만 실행됩니다. 루트가 소유하고있는 (불필요하게) 모든 파일을 읽습니까? 컴파일러'kbusdemo1'을 루트로 사용 했습니까? (불필요하게 다시?) 또는 작성한 하드웨어 상호 작용에 루트 권한이 필요합니까? –
하드웨어와의 상호 작용에 루트 권한이 필요한 경우 일 수 있습니다. PLC의 내부 메모리에 액세스하고 I/O 모듈의 값에 대한 정보를 얻고 변경해야하므로 스크립트가 루트로 실행되어야한다고 생각합니다. –
이제 sudoers 파일에 바이너리를 추가하는 대신 파일의 소유자를'root'로 변경하고 바이너리에 대해'suid' 플래그를 설정할 수 있습니다. 이렇게하면 모든 사용자가 root로 바이너리를 실행할 수 있습니다. –