これは私が理解するのに少し注意が必要でしたが、 ACL拡張ファイルパーミッション とハード/シンボリックリンクを含む非常に奇妙な動作に遭遇しました。質問を短く、要点を絞るように最善を尽くしますが、何が起こっているのか、それが何と呼ばれているのかわからないので、最初に私の現在の状況の例を示す必要があります。
2人のユーザーがいるシステムがあるとします。これらのユーザーをalice
とbob
と呼び、ある程度のstuff
というフォルダーを次の権限で共有します。
bob@server:~$ getfacl /home/stuff getfacl:
Removing leading '/' from absolute path names
# file: home/stuff
# owner: alice
# group: bob
user::rwx
group::-wx
other::---
default:user::rwx
default:user:bob:rwx
default:group::-wx
default:mask::rwx
default:other::---
ご覧のとおり、フォルダーの所有者はalice
ですが、bobはそこにデータを書き込んで実行可能にすることができるため、alice
を実行できます(+ xフラグ)。ただし、ACLが原因で、bobがファイルをstuff
に書き込む/コピーするたびに、ファイルのアクセス許可が変更され、次のようになります。 bob
のホームディレクトリにファイルを作成し、それをstuff
に移動するとします。
bob@server:~$ touch myfile
bob@server:~$ chmod 777 myfile
bob@server:~$ ls -la myfile
-rwxrwxrwx 1 bob bob 0 myfile
bob@server:~$ mv myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
-rwxrwx---+ 1 bob bob 0 /home/stuff/myfile
ご覧のとおり、myfile
はフォルダstuff
にありますが、alice
はそれにアクセスできません。ファイルはbob:bob
に属しているため、alice
は「その他」のファイル権限でアクセスする必要があります。これは、上記の最後のように---
ですls
コマンド。それでも、alice
はフォルダの所有者であるため、彼女はそれらを削除できます(ただし、myfile
が保護されているという警告が表示されます)。
今、楽しい部分が来ます。 myfile
を移動/コピーする代わりに、ハードリンクを作成した場合、何が起こるかを観察します。
bob@server:~$ ln myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
-rwxrwxrwx 2 bob bob 0 /home/stuff/myfile
どうやらalice
はそれを読んで使用することができます。実際、私のシステムでそれをテストすれば、彼女は確かにできます。それにもかかわらず、シンボリックリンクはまったく機能していないようです。
bob@server:~$ ln -s myfile /home/stuff/myfile
bob@server:~$ ls -la /home/stuff/myfile
lrwxrwxrwx 1 bob bob 4 /home/stuff/myfile -> /home/bob/myfile
今回は、リンクのすべてのアクセス許可もlrwxrwxrwx
に設定されていますが(リンクであり、アクセス許可を取得するには誰でもフォローできる必要があるため)alice
は実行できず、消して。
私の質問:
alice
にはstuff/
ディレクトリへの書き込み権限があるため、アリスはファイルの所有者でなくてもその内容を変更できます。
Linux ACLを使用する場合、ファイルが作成されると(または、コピーによってターゲットに新しいファイルが作成されるため、コピーされると)、 man acl
で説明されているようにアクセス許可が適用されます。 mv
でファイルを移動すると、ファイルをコピーせずに移動できる場合、アクセス許可が保持されます 。 ACLがmv
に適用されているため、何らかの理由でmyfile
はファイルを移動できず、代わりにコピーを実行するようです。
ハードリンクの作成はまったく異なります。ハードリンクを作成すると、(ターゲットディレクトリに)ディレクトリエントリが作成されます。このエントリは、元のファイルと同じiノードを指します。つまり、同じです。ファイルが複数のディレクトリに存在します。 ACLと従来のUNIXパーミッションの両方のファイルパーミッションは、iノードに格納されます。 /home/stuff/myfile
と/home/bob/myfile
の両方が同じiノードを指しているため、どちらか一方の変更はもう一方にも反映されます。これが、alice
がハードリンクにアクセスできる理由です。 /home/bob/myfile
(777)の権限は、/home/stuff/myfile
の権限と同じです。
代わりに、シンボリックリンクはターゲットパスを指します。シンボリックリンクが指しているファイルにアクセスするには、ターゲットファイルにアクセスするのと同じ権限が必要です。おそらくalice
はbob
のホームディレクトリへの検索(実行ビット)アクセス権を持っていないため、アクセスは失敗します。