17

たとえば、770 パーミッションの foo.sh があります。私がする時:

ln -s foo.sh bar.sh

リンク bar.sh には 2777 の権限があります。どうしてこれなの?私はそれらが継承されることを意図していると思いましたか?

4

2 に答える 2

26

シンボリック リンクのアクセス許可は、ほとんど重要ではありません。通常、umask 設定によって変更された 777 です。

のPOSIX標準は次のようにsymlink()述べています。

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

POSIX はlchown()システム コールを提供します。機能を提供しませんlchmod()

(私の MacOS X 10.7.1 では、umask 022 を使用して、新しく作成されたシンボリック リンクは 755 のアクセス許可で終了します。umask 002 では、アクセス許可は 775 になります。したがって、リンクが 770、700 などのアクセス許可で作成されるという観察は、パーミッションの設定は重要ではなく、シンボリック リンクの使いやすさには影響しません。)


RHEL 5 および MacOS X のシンボリックリンクに関するさらなる調査

  1. Linux (x86_64 の RHEL 5; カーネル 2.6.18-128.el5) では、シンボリック リンクの作成時に 777 パーミッションしか表示されません。

    $ (ls -l xx.pl; umask 777; ln -s xx.pl pqr; ls -l xx.pl pqr)
    -rw-r--r-- 1 jleffler rd 319 2011-09-05 22:10 xx.pl
    lrwxrwxrwx 1 jleffler rd   5 2011-09-21 10:16 pqr -> xx.pl
    -rw-r--r-- 1 jleffler rd 319 2011-09-05 22:10 xx.pl
    $
    

    サブシェルで実行したため、umask 設定は永続的ではありませんでした。

  2. MacOS X (10.7.1) では、シンボリック リンクに変数のアクセス許可が表示されます。

    $ (ls -l xxx.sql; umask 777; ln -s xxx.sql pqr; ls -l xxx.sql pqr)
    -rw-r--r--  1 jleffler  staff  1916 Jun  9 17:15 xxx.sql
    
    ls: pqr: Permission denied
    l---------  1 jleffler  staff     7 Sep 21 10:18 pqr
    -rw-r--r--  1 jleffler  staff  1916 Jun  9 17:15 xxx.sql
    $
    

    これは、リンク先と同じコマンド シーケンス (ファイル名を指定または取得) であることに注意してください。

  3. MacOS X では、コマンドにシンボリック リンク自体のアクセス許可を変更chmodするオプションがあります。-h

    -h ファイルがシンボリック リンクの場合は、リンクが指すファイルではなく、リンク自体のモードを変更します。

  4. MacOS X では、symlink のパーミッションが重要です。シンボリックリンクに対する読み取り権限を持っていない限り (または root でない限り)、シンボリックリンクを読み取ることはできません。したがって、ls上記の出力のエラー。そしてreadlink失敗しました。等。

  5. MacOS X では、chmod -h 100 pqr(execute) でリンクを使用できます ( Works)cat pqrが、リンクを読み取ることはできません。対照的にchmod -h 400 pqr、リンクの読み取りとリンクの使用の両方を許可します。完全を期すためにchmod -h 200 pqr、リンクを使用することはできますが、読むことはできません。正式にテストしたわけではありませんが、グループやその他にも同様のルールが適用されると思います。

  6. MacOS X では、シンボリック リンクに対する読み取りまたは書き込み権限があれば、通常どおり使用できるように見えますが、実行権限だけではreadlink(2)、ファイルにアクセスできても (または、おそらく、ディレクトリ) リンクの反対側にあります。

結論 (変更される可能性があります):

  1. Linux の一部のバージョンでは、シンボリック リンクで 777 パーミッションしか取得できません。
  2. MacOS X では、シンボリック リンクのアクセス許可を調整できます。これらは、シンボリック リンクを使用できるユーザーに影響します。

MacOS X の動作は、POSIX で義務付けられている動作の拡張、または POSIX で義務付けられている動作からの逸脱です。それは人生を少し複雑にします。これは、リンクを使用することになっているすべての人に許可があることを確認する必要があることを意味します.umask 022

chown -hMacOS X での基本的なシステム コールはsetattrlist(2).

于 2011-09-20T15:38:29.887 に答える
4

http://en.wikipedia.org/wiki/Symbolic_link

シンボリック リンクのファイル システムのアクセス許可は、通常、リンク自体の名前変更または削除操作にのみ関連し、ターゲット ファイル自体のアクセス許可によって制御されるターゲット ファイルのアクセス モードには関連しません。

リンクの許可はそれだけです。それが指しているものには、まだ独自の権限があります。

于 2011-09-20T15:39:57.263 に答える