私が実行しているシステムには、/
ほとんどの場合「ro」(読み取り専用)としてマウントされたルートパーティション()があります。ただし、「www-data」ユーザーが「rw」に設定できるようにするには、これが必要です。
「rw」にするには、コマンドを使用しますsudo mount -o remount,rw /
。これはうまくいきます。
ただし、PHPスクリプト(「www-data」ユーザー)が同じコマンドを実行すると失敗します。
/etc/sudoers.d/
フォルダに次の内容でファイルを作成しました。
www-data ALL=(ALL) NOPASSWD: ALL
/usr/bin/sudo /sbin/reboot
PHPでコマンドを実行できるので、うまく動作することを確認できます。ただし、/bin/mount
コマンドは機能しません。もっとやるべきことはありますか?
その特定のコマンドだけを実行できるようにsudoersファイルをより具体的にする予定ですが、今はうまくいきたいと思います。
ログを表示します。コマンドを手動で実行した後:
2020-10-22T19:37:19+0000 d0-14-11-00-00-03 sudo[18582]: pi : TTY=serial1 ; PWD=/home/pi ; USER=root ; COMMAND=/bin/mount -o remount,rw /
2020-10-22T19:37:20+0000 d0-14-11-00-00-03 sudo[18582]: pam_unix(sudo:session): session opened for user root by (uid=0)
2020-10-22T19:37:20+0000 d0-14-11-00-00-03 kernel: EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
2020-10-22T19:37:20+0000 d0-14-11-00-00-03 sudo[18582]: pam_unix(sudo:session): session closed for user root
PHPスクリプトでコマンドを実行した後:
2020-10-22T19:38:26+0000 d0-14-11-00-00-03 sudo[18703]: www-data : TTY=unknown ; PWD=/var/www/web ; USER=root ; COMMAND=/bin/mount -vo remount,rw /
2020-10-22T19:38:27+0000 d0-14-11-00-00-03 sudo[18703]: pam_unix(sudo:session): session opened for user root by (uid=0)
2020-10-22T19:38:27+0000 d0-14-11-00-00-03 sudo[18703]: pam_unix(sudo:session): session closed for user root
2020-10-22T19:38:27+0000 d0-14-11-00-00-03 kernel: EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
解決済み
ここで解決策を使用して解決しました。
シェルを介してマウントを実行する前に、PHPとapache2を介してルートファイルシステムを再マウントすることはできません。