| Deutsch English Français Italiano |
|
<100se1l$mtrh$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Chris Elvidge <chris@internal.net>
Newsgroups: comp.os.linux.misc,comp.sys.raspberry-pi
Subject: Re: Simple way for web to execute root shell script.
Date: Sat, 24 May 2025 13:28:35 +0100
Organization: A noiseless patient Spider
Lines: 94
Message-ID: <100se1l$mtrh$1@dont-email.me>
References: <100pphq$2taj$2@dont-email.me> <100qfmc$78ks$3@dont-email.me>
<100qmo3$8ldq$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sat, 24 May 2025 14:28:37 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3db182270d334adc86de71009664dd07";
logging-data="751473"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18HTLQMB/TE7Utnw6c/s0/adZgSNWn7RFY="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
Thunderbird/52.2.1 Lightning/5.4
Cancel-Lock: sha1:9Fiqxi23ybjy5BOo6GMH35aetSQ=
Content-Language: en-GB
In-Reply-To: <100qmo3$8ldq$1@dont-email.me>
Bytes: 4797
On 23/05/2025 at 21:44, The Natural Philosopher wrote:
> On 23/05/2025 19:44, Rich wrote:
>> In comp.os.linux.misc The Natural Philosopher <tnp@invalid.invalid>
>> wrote:
>>> I have a shell script that monitors hardware stuff - it needs to run
>>> as root and be called by Apache as user www.
>>>
>>> Bookworm linux on a Pi4.
>>>
>>> Its all inside a domestic firewall so security is not a huge issue.
>>> What is the quickest and simplest solution to this?
>>
>> You've been given lots of options already. But not this one.
>>
>> What "hardware stuff" is it monitoring? If it is reading files in
>> /proc and/or /sys to obtain its "data" then another alternative would
>> be to setup /proc and /sys to be mounted group or world readable (or to
>> reset permissions on the necessary files via a rc.local boot script to
>> group or world readable). That would let the script "monitor" without
>> being root. Then you could even convert the script into a CGI script
>> (which Apache is more than able to execute, and doing so for minimal
>> text output involves the script outputting a handful of HTTP headers
>> before the monitor data) and get your "monitoring data" back via
>> Apache.
>>
> Sadly the data is not available in /sys or /proc AFAIK.
> I wanted information on the temperature and data volumes on the SSDs and
> the temperature of the ARM core. Plus data on the amount of data being
> transported over the ethernet interface.
> The tools that came to hand were vgcencmd, smartctl, df and ip. Plus
> some sedery grepery and awkery
>
> The script is (if you are interested)
>
> #!/bin/bash
> smartctl -a /dev/sda | grep Celsius | awk '{print $10}'
> smartctl -a /dev/sdb | grep Celsius | awk '{print $10}'
> vcgencmd measure_temp | sed -e 's/temp=//' | sed -e "s/'C//"
> ip -s link show dev eth0 | awk 'FNR == 4 {print $1}'
> ip -s link show dev eth0 | awk 'FNR == 6 {print $1}'
> df -h | grep /dev/sd
>
> A typical output is
>
> 40
> 44
> 57.4
> 220513467
> 17430583
> /dev/sda2 110G 6.1G 98G 6% /
> /dev/sda1 510M 66M 445M 13% /boot/firmware
> /dev/sda3 366G 126G 222G 37% /home
> /dev/sdb1 219G 130G 78G 63% /backup
> /dev/sdb2 1.6T 1.3T 297G 81% /home/Media
> /dev/sda5 990G 559G 381G 60% /home/Media/Unedited
> /dev/sda6 366G 26G 322G 8% /backup2
>
>
> The intention is to poll that using AJAX and parse it into the position
> of needles on dials in a web page.
>
> I used to do this via SNMP, but less and less is available with SNMP and
> its clunky as shit,
>
> If any of that is in /proc or /sys. I would like to hear about it.
>
> None of this is precision stuff: I am building an ARM based NAS and I
> just need a quick and easy way to keep an eye on it to see if it gets to
> hot or too full as I develop stuff
>
>
>
>
It seems to me that the only thing that needs root is smartctl, so
1) add www (www-data?) to disk group - sudo usermod -a -G disk www(-data)
2) add CAP_SYS_RAWIO to smartctl - sudo setcap 'cap_sys_rawio=ep'
/usr/sbin/smartctl
Suggestion: assuming /usr/bin is in path but /usr/sbin isn't
#!/bin/bash
for i in /dev/sd?; do /usr/sbin/smartctl -a "$i" | awk '/Celsius/{print
$10}'; done
vcgencmd measure_temp | sed -e "s/temp=//;s/'C//"
/usr/sbin/ip -s link show dev eth0 | awk 'FNR == 4 || FNR == 6 {print $1}'
df -h | awk '/^\/dev\// && gsub(" *"," ")'
--
Chris Elvidge, England
BEWITCHED, DOES NOT PROMOTE SATANISM