fakerootを使用して権限を変更すると、問題が発生します。

fakerootを使用して権限を変更すると、問題が発生します。

chmodrunコマンドを使用すると、なぜユーザー権限が変更されないのか理解できませんfakeroot

最初にファイルには次の権限があります。

-rwxr-xr-x  a.txt*

chmodを使用してファイルの権限を変更しようとすると、正常に動作します。

chmod 111 a.txt

---x--x--x  a.txt*

一緒に実行してみると、fakerootあまり効果がないようです。グループや他のユーザーの権限は正しく設定されますが、ユーザーの権限は正しく設定されません。chmodコマンドの最初の値に関係なく、読み取りおよび書き込み権限が設定されます。

fakeroot chmod 111 a.txt

-rwx--x--x  a.txt*

私は何を逃したことがありませんか?

ベストアンサー1

Fakerootはすべてのファイルメタデータ変更を実行せず、これが重要です。つまり、Fakerootはその下で実行されるプログラムであるふりをします。 Fakerootは、所有者の変更など、実行できない変更を行いません。また、失敗を引き起こす可能性のある変更は行われません。たとえば、rootは権限に関係なく常にファイルを開くことができるため、rootとして実行すると次のコードが成功します。

chmod 111 a.txt
cp a.txt b.txt

ただし、root以外のユーザーとして実行するとcp読み取れないため失敗しますa.txt。これを防ぐために、chmodfakerootからユーザーの権限は削除されません。

Fakerootは、実行中のプログラムを変更するふりをします。

$ stat -c "Before: %A" a.txt; fakeroot sh -c 'chmod 111 a.txt; stat -c "In fakeroot: %A" a.txt'; stat -c "After: %A" a.txt
Before: -rwx--x--x
In fakeroot: ---x--x--x
After: -rwx--x--x

通常、fakeroot内で行われたファイルメタデータの変更は、fakeroot呼び出し後も保持されるという保証はありません。それがポイントです。メタデータの変更と変更されたメタデータに対して実行したい操作(アーカイブパッケージングなど)の両方を実行するfakeroot呼び出しを作成します。

おすすめ記事