私はすでにこれらの両方を見てきました:
しかし、私の問題は違うようです。
Linux CLI ツールを呼び出すために使用される広範なライブラリを作成しました。を中心に構築されておりproc_open
、家族であり、POSIX
.
私はこれを使用して、(これ/バグに遭遇するまで)すべてのCLI ツールを正常に実行しています。mount
umount
今、私は、-rm、mklabel、mkpart 、 -stop 、zero- superblock 、partprobe
create 、、そして最終的に/を含む RAID セットアップ ルーチンを構築しています。parted
mdadm
dd
mkfs
mount
umount
実際には 2 つの適切なルーチンがあり、1 つは RAID の組み立て用で、もう 1 つは分解用です。
タイトルが示すように、問題は と に依存しmount
てumount
います。上記の他のツールとそのコマンドは正常に実行されます。
環境
Arch Linux - Linux ストーン 3.11.6-1-ARCH #1 SMP PREEMPT Fri Oct 18 23:22:36 CEST 2013 x86_64 GNU/Linux。
Arch が動作しているsystemd
- マウントに何らかの影響を与えている可能性があります。
mod_php (最新) を実行する Apache Web サーバー (最新)。Apache は として実行されhttp:http
ます。
http
wheel
グループに属しておりwheels
、sudoers -%wheel ALL=(ALL) NOPASSWD: ALL
です。完全なルート機能
の議論を開始しないでください。ユニットは NAS であり、カスタム WebOS を実行しており、イントラネット専用です。ハッキングの試みがあったとしても、システム全体が破壊される可能性が高く、それは顧客にとって健全ではありません。NAS はMobotix IP カメラのストレージであり、依存するサービスの負荷を実行し、ユニットはすでに 30 以上のオブジェクトに問題なく展開されています。つまり、はWebではなく OSを提供しています。webserver
webserver
書く前に、簡単なテストのために、http
明示的にsudoersに追加しましたhttp ALL=(ALL) NOPASSWD: ALL
--機能しませんでした。
問題
RAID アセンブリ プロセスで最後に実行されたコマンドはmount /dev/md/stone\:supershare /mnt/supershare
で、終了コードが返されます0
。
後続のマウントを実行すると、次のようになります。
mount: /dev/md127 is already mounted or /mnt/supershare busy
/dev/md127 is already mounted on /mnt/supershare
の終了コードで32
。したがって、アレイはどこかにマウントされています。
umount /dev/md/stone\:supershare
その後、上記のを実行するmount
と、 の終了コードで戻ります0
。後続のumount
結果を実行すると、次のようになります。
umount: /dev/md/stone:supershare: not mounted
上記のコマンドは、sudo で自動実行されます。
したがって、正常にマウントされ、正常にアンマウントされましたが...操作を実行した後root
に実行しているTTY0でログインしていますが、次のものが表示されません:lsblk
mount
mountpoint
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 55.9G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part [SWAP]
├─sda3 8:3 0 12G 0 part /
└─sda4 8:4 0 16.6G 0 part /home
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 899M 0 part
└─md127 9:127 0 1.8G 0 raid0
sdc 8:32 0 931.5G 0 disk
└─sdc1 8:33 0 899M 0 part
└─md127 9:127 0 1.8G 0 raid0
TTY0 から同じmount
コマンドを試行すると、正常にマウントされます (後に lsblk が表示されます)。
CLIツールをmount
使用して実行mount -l
し、lsblk
さらにCLIツールを使用すると、マウントポイントが表示されます。
root として TTY0 から両方のコマンドをすぐに実行すると、マウントポイントが表示されません。
再起動してすべてのマウントをリセットし (自動マウントされていない)、TTY0 からマウントして TTY0 から実行するとlsblk
、マウントポイントが表示されます。
次に、lsblk
CLI ツールで実行すると、マウントポイントが表示されます。
次に、umount
CLI ツールを使用して実行し、コードを終了します0
- アンマウントします。
CLI ツールで再度実行lsblk
すると、マウントポイントが表示されません。
TTY0lsblk
から実行しても、マウントポイントは表示されます。
mount
/umount
を CLI ツールで実行すると、sudo
セッション ランナーに対して非公開でコマンドが実行されるようです。
umount
TTY0 がマウントされた後に ing を実行すると、アンマウントされますが、これも非公開です。
CLI ツールから RAID をマウントした後、TTY0 でログインしてhttp
実行すると、マウントポイントが表示されません。この種のものは、「セッション ランナーに対して非公開で実行する」ことを否定します。lsblk
sudo
IBM の資料も見つけました。
mount コマンドは、有効なユーザー ID ではなく、実際のユーザー ID を使用して、ユーザーが適切なアクセス権を持っているかどうかを判断します。システム グループのメンバーは、マウント ポイントへの書き込みアクセス権と、/etc/file systems ファイルで指定されたマウントがあれば、デバイス マウントを発行できます。root ユーザー権限を持つユーザーは、任意のマウント コマンドを発行できます。
私が十分に説明し、あまり混乱しないことを願っています.
更新 (2013-10-28)
root
Web コンテキスト外の CLI ツール、単純な PHP ファイル、およびカスタム ユーザーを使用してテストを試みました。
どちらのシナリオでも、マウントとアンマウントは成功しました。したがって、Apache がコマンドを実行しているに違いありませんが、他のコマンドが機能する理由はわかりません。
質問
問題の原因と解決方法は?