Kotaro7750's Gehirn
Home About
  • Home
  • Category
  • About

linuxのシンボリックリンク自体のパーミッションには意味がない

2024-04-01

シンボリックリンクについて調べていたところ、どうやらシンボリックリンク自体のパーミッションは意味がないらしいということを発見したのでメモしておきます。

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.

chmodコマンドはシンボリックリンク自体のパーミッションは操作せず代わりに指している先のファイルのパーミッションを変えるとのことです。 なぜこのような挙動となっているかというと、シンボリックリンク自体のパーミッションは意味を持たないためです。

文章で書いても腑に落ちないと思うので実験してみます。

まずは適当なディレクトリに一般ユーザーとrootユーザーが所有するディレクトリをパーミッション700で作ります。

koutarou@koutarou-desktop/INS> ls -lh
合計 8.0K
drwx------ 2 koutarou koutarou 4.0K  6月  7 20:38 general
drwx------ 2 root     root     4.0K  6月  7 20:37 root

それぞれのディレクトリには所有者・パーミッションがディレクトリと同じであるテキストファイルtext.txtが入っています。

koutarou@koutarou-desktop/INS> ls -l general
合計 4
-rwx------ 1 koutarou koutarou 13  6月  7 20:38 text.txt

koutarou@koutarou-desktop/INS> sudo ls -l root
合計 4
-rwx------ 1 root root 13  6月  7 20:37 text.txt

パーミッションは700にしているのでroot配下のファイルにアクセスできないのはもちろん、cdやlsをすることもできません。

一般ユーザー所有のファイルへ一般ユーザー権限でシンボリックリンクを作る

koutarou@koutarou-desktop/INS> ln -s general/text.txt general-general

koutarou@koutarou-desktop/INS> ls -l
合計 8
drwx------ 2 koutarou koutarou 4096  6月  7 20:38 general
lrwxrwxrwx 1 koutarou koutarou   16  6月  7 21:16 general-general -> general/text.txt
drwx------ 2 root     root     4096  6月  7 20:37 root

koutarou@koutarou-desktop/INS> cat general-general
general user

lnコマンドを実行するユーザーとファイルの所有者が同じなので当然シンボリックリンクは作れるし、リンク経由でのアクセスも可能です。

root所有のファイルへ一般ユーザー権限でシンボリックリンクを作る

root所有のファイルに対してのリンクなので、cdやlsができないのと同じくシンボリックリンク自体が作れないと普通は思います(私は思いました)。

koutarou@koutarou-desktop/INS> ln -s root/text.txt general-root

koutarou@koutarou-desktop/INS> ls -l
合計 8
drwx------ 2 koutarou koutarou 4096  6月  7 20:38 general
lrwxrwxrwx 1 koutarou koutarou   13  6月  7 21:20 general-root -> root/text.txt
drwx------ 2 root     root     4096  6月  7 20:37 root

koutarou@koutarou-desktop/INS> cat general-root
cat: general-root: 許可がありません

koutarou@koutarou-desktop/INS> sudo cat general-root
require root

ところがどっこい普通に作れてしまいます。

しかし、シンボリックリンク自体のパーミッションが777であるにも関わらず指している先のファイルにアクセスすることはできません。 これは、シンボリックリンク自体のパーミッションはアクセスには関係なく、代わりに指している先のパーミッション(上の例ではrootの700)が使われるからです。

シンボリックリンク自体のパーミッションを変えてみる

最後にchmodのmanで説明されていたことが本当なのかを確認してみます。

koutarou@koutarou-desktop/INS> chmod 755 general-root
chmod: 'general-root' にアクセスできません: 許可がありません

chmodで先程作ったシンボリックリンクのパーミッションを変えようとすると、許可がないというエラーが出ます。 シンボリックリンク自体のパーミッションは777なので字面通りに受け取るとそんなことはないのですが、これはmanで説明されていたように指し示している先のファイル(今回はroot/text.txt)のパーミッションを書き換えようとしているため怒られています。

Related Posts

スケーラブルなOpenTelemetry CollectorパイプラインをKubernetes上に構築する

スケーラブルなOpenTelemetry CollectorパイプラインをKubernetes上に構築する

2025-04-14

OpenTelemetry Certified Associate ( OTCA ) を取得した

OpenTelemetry Certified Associate ( OTCA ) を取得した

2025-04-13

Packerで実現するKVMでのイミュータブルインフラストラクチャ

Packerで実現するKVMでのイミュータブルインフラストラクチャ

2024-09-27

New Posts

スケーラブルなOpenTelemetry CollectorパイプラインをKubernetes上に構築する

スケーラブルなOpenTelemetry CollectorパイプラインをKubernetes上に構築する

2025-04-14

OpenTelemetry Certified Associate ( OTCA ) を取得した

OpenTelemetry Certified Associate ( OTCA ) を取得した

2025-04-13

Golangのnet/httpの実装からHTTP1.1クライアントでのTCPコネクションの挙動を確かめる

Golangのnet/httpの実装からHTTP1.1クライアントでのTCPコネクションの挙動を確かめる

2025-03-21

ToC

  • 一般ユーザー所有のファイルへ一般ユーザー権限でシンボリックリンクを作る
  • root所有のファイルへ一般ユーザー権限でシンボリックリンクを作る
  • シンボリックリンク自体のパーミッションを変えてみる

Ads

Ads

Privacy Policy