2017-05-02 11 views
0

안녕 동료 프로그래머,편집의 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 
+0

내가보기에 문제가 있다고 생각하는 이유는'kbusdemo1'은 루트로 실행될 때만 실행됩니다. 루트가 소유하고있는 (불필요하게) 모든 파일을 읽습니까? 컴파일러'kbusdemo1'을 루트로 사용 했습니까? (불필요하게 다시?) 또는 작성한 하드웨어 상호 작용에 루트 권한이 필요합니까? –

+0

하드웨어와의 상호 작용에 루트 권한이 필요한 경우 일 수 있습니다. PLC의 내부 메모리에 액세스하고 I/O 모듈의 값에 대한 정보를 얻고 변경해야하므로 스크립트가 루트로 실행되어야한다고 생각합니다. –

+0

이제 sudoers 파일에 바이너리를 추가하는 대신 파일의 소유자를'root'로 변경하고 바이너리에 대해'suid' 플래그를 설정할 수 있습니다. 이렇게하면 모든 사용자가 root로 바이너리를 실행할 수 있습니다. –

답변

0

감사합니다. PHP 파일에서 sudo로 스크립트를 호출하지 않았습니다. 그리고 당신이 제안했듯이, sudoers의 줄을 하나의 특정 스크립트 만 허용하도록 변경 했으므로 보안 취약점이 없습니다.