Armadilloフォーラム

Rest API : カスタムスクリプトとroot権限

aron

2024年9月13日 15時37分

青木@多治見と申します。

初投稿です。よろしくお願いいたします。

Armadillo X4でUSBメモリーを抜くのにumountを実行するためにRest API : カスタムスクリプトの実行をしようとしていますがrootで実行できません
マニュアルを参考にテストをしていますが、何か勘違いする点や注意事項あればご教示ください。

Rest API : カスタムスクリプトの実行
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

conf 1行目には念のためマニュアルと同じ行を置いています。
現在テスト中で、権限が不要ならテストで順次削除する前提で、全てにrootで実行するため全部に権限つけました。
usb_mountとusb_umountのみ権限で引っかかっています。
まずは、umountの調査をしています。
実行は、全てコンソールよりテストを行い実行権限の確認済みです。

<root権限実行用のabos_web_customize.conf>
armadillo:~# cat /etc/doas.d/abos_web_customize.conf
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/root_command.sh
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/usb_mount.sh
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/usb_umount.sh
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/ls.sh
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/lsblk.sh
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/ifconfig.sh
armadillo:~#

<テスト中のカスタムAPIで実行するシェルスクリプト>
armadillo:~# cat /etc/atmark/abos_web/customize_rest/usb_umount.sh
#!/bin/sh

current_user=$(whoami)
echo "現在のユーザー: $current_user"

# コマンドの実行結果を変数に格納
output=$(umount /var/app/volumes/firefox/usb/)

# 結果を出力
printf "$output"

armadillo:~#

<PCよりAPIを実行した結果 PCは>

st518@pop-os:~$ curl -k -H "Authorization: Bearer 4fca5272-3322-4859-b583-cd1dfb4c2735" https://armadillo.local:58080/api/custom/usb_umount.sh -X POST -H 'Content-type: application/json' -d '{"args": ["param", "second arg"]}' -w "\nhttp code: %{http_code}\n"
{"stdout":"現在のユーザー: abos-web-admin\n"}
{"stderr":"umount: can't unmount /var/app/volumes/firefox/usb/: Operation not permitted\n"}
{"exit_code":0}

http code: 200
st518@pop-os:~$

ユーザーは、abos-web-adminです。
umountコマンドからエラー吐かれています。
umount: can't unmount /var/app/volumes/firefox/usb/: Operation not permitted

aliasを使うと後々わからなくなりそうですので、展開してテストを行っています。

よろしくお願いいたします。

コメント

佐藤です。

> st518@pop-os:~$ curl -k -H "Authorization: Bearer 4fca5272-3322-4859-b583-cd1dfb4c2735" https://armadillo.local:58080/api/custom/usb_umount.sh -X POST -H 'Content-type: application/json' -d '{"args": ["param", "second arg"]}' -w "\nhttp code: %{http_code}\n"
マニュアルの書き方が分かりにくくてすいません。
root権限で実行するためには
'{"args": ["param", "second arg"]}'
この部分を
'{"args": ["param", "second arg"], "root":true}'
としてもらえますでしょうか。

> root権限で実行するためには
> '{"args": ["param", "second arg"]}'
> この部分を
> '{"args": ["param", "second arg"], "root":true}'
> としてもらえますでしょうか。

st518@pop-os:~$ curl -k -H "Authorization: Bearer 4fca5272-3322-4859-b583-cd1dfb4c2735" https://armadillo.local:58080/api/custom/usb_umount.sh -X POST -H 'Content-type: application/json' -d '{"args": ["param", "second arg"],"root":true}' -w "\nhttp code: %{http_code}\n"
{"stdout":"現在のユーザー: root\n"}
{"stderr":"umount: can't unmount /mnt/: Invalid argument\n"}
{"exit_code":0}

http code: 200
st518@pop-os:~$

rootユーザーでアクセスできました。
何度見直しても、環境チェックしても改善したかったので大変助かりました。
ありがとうございます。