web-dev-qa-db-ja.com

ハードリンク、シンボリックリンク、およびACLフォルダーのアクセス許可はどのように相互作用しますか?

これは私が理解するのに少し注意が必要でしたが、 ACL拡張ファイルパーミッション とハード/シンボリックリンクを含む非常に奇妙な動作に遭遇しました。質問を短く、要点を絞るように最善を尽くしますが、何が起こっているのか、それが何と呼ばれているのかわからないので、最初に私の現在の状況の例を示す必要があります。


2人のユーザーがいるシステムがあるとします。これらのユーザーをalicebobと呼び、ある程度の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は実行できず、消して。


私の質問:

  • そもそもなぜハードリンクを使用してACSのアクセス許可を「スキップ」できるのですか。
  • そして、なぜこの同じトリックがシンボリックリンクで機能しないのですか?
  • これは意図的なものですか、それともセキュリティホールですか?
3
andresgongora

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の権限と同じです。

代わりに、シンボリックリンクはターゲットパスを指します。シンボリックリンクが指しているファイルにアクセスするには、ターゲットファイルにアクセスするのと同じ権限が必要です。おそらくalicebobのホームディレクトリへの検索(実行ビット)アクセス権を持っていないため、アクセスは失敗します。

3
sebasth