web-dev-qa-db-ja.com

OSXの `chmod -h`フラグに相当するUbuntuとは何ですか?

OSXでは、シンボリックリンク自体のアクセス許可を設定できます(-hの使用を指すものの代わりに)。 manページから:

 -h      If the file is a symbolic link, change the mode of the link itself rather than the file that the link points to.

Ubuntu 14.04では、シンボリックリンクの権限を設定しようとしましたが、シンボリックリンクターゲットでのみ設定されています。

/home/nagios/.ssh/someprivatekeyから/somewhere/else/privatekeyへのシンボリックリンクに関するものであるため、sshには権限が重要です。どうすればこれを達成できますか?

13

ありえない。シンボリックリンクのアクセス許可は無意味なので、方法はありません(シンボリックリンクはファイルではなく、ファイルを指しているだけです)。 Linuxでこれを行う方法は、 ACL です。

symlink は次のように説明されます...

作成されたシンボリックリンクのファイルモードビットの値は指定されていません。 POSIX.1-2008で指定されたすべてのインターフェイスは、stat構造体のst_modeフィールドで返されるファイルモードビットの値が指定されていないことを除き、シンボリックリンクの内容を常に読み取ることができるかのように動作します。


違いはここにあります: chmodchmod ...これはBSD対Linuxです。


それが重要かどうかはわかりませんが、SSHに関しては、許可を取得するためにlstat(2)ではなく stat(2) を使用します。

  • stat()は、パスが指すファイルを統計し、bufを埋めます。
  • lstat()はstat()と同じですが、pathがシンボリックリンクの場合、参照するファイルではなく、リンク自体がstat-edされます。
18
Rinzwind

できません。基礎となるchmodシステムコールはLinuxでこれをサポートしていないため、Linuxはリンクのアクセス権も考慮しません。 man chmod から:

chmod never changes the permissions of symbolic links; the chmod system
call cannot change their permissions.  This is not a problem since  the
permissions  of  symbolic  links  are  never  used.   However, for each
symbolic link listed on the command line, chmod changes the permissions
of  the  pointed-to  file.   In  contrast, chmod ignores symbolic links
encountered during recursive directory traversals.

ハードリンクまたはバインドマウントに関しては、ソースのアクセス許可が使用されるため、ファイルの内容を他の場所に反映する3つの標準的な方法はどれもこれに役立ちません。

9
muru