66032


このようなDockerfileを見ていたのですが、`chown`をしている所がありました。

[code]

    FROM alpine:3.11
    
    RUN adduser -D -u 1000 server
    COPY --from=builder /go/src/simple-udp/server /home/server/server
    RUN chown -R server /home/server && \
        chmod o+x /home/server/server
    
    USER 1000
    ENTRYPOINT ["/home/server/server"]
    
[/code]

こういった`chown`はどういう意味で行っているのでしょうか。  
私はアクセス権限の話に疎く、一般的な意味で`chown`の使い所がわからないのですが、一般的な用法はどのようなものなのでしょうか。


CC BY-SA 4.0
2020-04-27T11:15:53.787
66031
2020-04-28T10:04:56.767
37013
question
linux
chownは何のために行いますか？


`chown` に限らずLinuxでのアクセス権限は、対象のファイルやディレクトリへのアクセスを許可または禁止する仕組みになります。

Linuxでは複数ユーザーでの利用が前提なので、仮にファイルの所有者やアクセス権限という考え方が無かった場合、あなたが作った大事なファイルが別の誰かに勝手に書き換えられたり、最悪だと削除されてしまう可能性が出てきます。

また、人間のユーザーに限らずLinux上で動くプログラム(サーバ/デーモン)に対しても個別の "ユーザー"
としての権限を割り当てておくことで、大事なファイルをユーザーが書き換えてしまう…といった事故を防ぐことができます。

ファイルに対するアクセス権限や所有者は、「ファイルの保護」や「責任の所在」を明確にするための仕組みと考えてみてください。


CC BY-SA 4.0
2020-04-27T11:40:03.943
66032
2020-04-28T10:04:56.767
2020-04-28T10:04:56.767
3060
3060
66031
answer


(一般的な用法を尋ねられているので質問の意図とは異なるかもしれませんが…)

今回のコンテナは、`server`実行ファイルを`server`ユーザ(だけ)が実行するものなので、  
ファイルを`server`ユーザのホームディレクトリ `/home/server` に置くのが自然だ、ownerも
`server`ユーザに変更しておくのが自然だ、と実装者が考えた結果そうなっているだけかと思います。

`server`ユーザに対して実行権限が付与されていれば、ownerは`root`ユーザのままでも支障ないかと考えます。  
要するに、今回の `chown` に必然性はない、ということです。


CC BY-SA 4.0
2020-04-27T16:01:26.133
66040
2020-04-27T16:01:26.133
2808
66031
answer