

Linuxでディレクトリの権限が下記のようだとします。

[code]

    drwxrwxr-x 2 root test 9999 7月 12 11:52
    
[/code]

このファイル以下のディレクトリにファイルが作成されたときやコピーされたときに  
自動でディレクトリと同じ権限にすることは可能でしょうか？

設定方法などご存知の方がいらっしゃいましたらご教授いただけると幸いです。


CC BY-SA 3.0
2017-02-11T18:48:15.323
32595
2017-02-16T10:10:24.860
2017-02-12T00:52:57.377
19110
7918
question
linux
ファイル作成時やコピー時、自動的にディレクトリと同じ権限にすることは可能でしょうか？


質問を「 `/usr/local/bin` に自作ツールをインストールして全ユーザで使うには」とします。

たとえば普通に GNU 系のツールを野良ビルド・インストールする際においては

[code]

    $ ./configure [options]
    $ make
    $ sudo make install (ないしは su して make install)
    
[/code]

すれば `/usr/local/bin` に `root` オーナーのバイナリが `-rwxr-xr-x` 権限 (なりもっと適切な権限)
でコピーされ、全ユーザが実行できるはずです。

なので、この質問に対する解答を書くならば

たいていの GNU ツールはインストールスクリプトが自動で権限を設定してくれるので、とりたてて何もする必要は無い。

非 GNU ツール、たとえば自作シェルスクリプトを `/usr/local/bin` にインストールして全ユーザで使うのであれば

[code]

    $ cp myscript /usr/local/bin/myscript
    $ chmod [適切な権限] /usr/local/bin/myscript
    $ chown [適切なユーザ] /usr/local/bin/myscript
    
[/code]

となるでしょう。ここで [適切な] はケースバイケースで正解は１つではありません。

何が適切かはセキュリティポリシーとかから決まる内容であって、議論を開始するなら  
\- `PATH` に `/usr/local/bin` を含めるか、含めるならどの位置に置くか  
\- `sudo` を一般ユーザに認めるか否か  
\- `/usr/local/bin` へのファイル書き込みを一般ユーザに認めるか否か  
\- 野良ビルドしたツールを使うことを認めるか否か (パッケージ以外は認めないとか)  
\- 特定ユーザが自作したツールを他人が使うことを認めるか  
あたりからになってしまいます。

その辺は組織で運用すべきポリシーですし、話し合って決めるのがよいでしょう。


CC BY-SA 3.0
2017-02-13T04:02:51.210
32615
2017-02-13T04:02:51.210
8589
32595
answer


まぁソレが良いか悪いか、運用が悪いとかどうとか置いといて  
表題に記載されている内容を実現したいのであれば  
[inotify-tools](https://github.com/rvoicilas/inotify-tools)で特定ディレクトリを監視して、  
`chown`で親ディレクトリごと指定権限に変更してしまってはどうでしょうか？

……と、ここまで記載して既に[qiitaに記事](http://qiita.com/masashi-
t-h/items/7866005d2b0f0d6fc899)があったことに気づきました。  
`CREATE`や`MOVED_TO`にイベントを貼ればダウンロード以外にも使えるのではないでしょうか？

詳しいことは分からないですが、  
`root`で弄ってて別のプロセスの権限にしたいとかですかね？  
自分であれば常に`root`触ってて、事故が起こると悲惨なので……  
アップロード用のユーザ作って、そのユーザにプロセスの実行権限渡しますかね……


CC BY-SA 3.0
2017-02-13T08:59:04.793
32631
2017-02-13T08:59:04.793
32595
answer


> 「デ‌​ィレクトリと同じ権限にすることで実行でき‌​る」をもう一段踏み込んで、どのような権限にすれば実行できるかが重要で‌​はありませんか？

とコメントした点にもつながるのですが、

実行できる／できない原因によってはディレクトリに対して`chmod g+s dir`を指定することで解決できる場合があります。  
`g+s`（setgid）されたディレクトリにファイルを作成すると、作成されるファイルのグループはディレクトリの値を引き継ぎます。質問の場合ディレクトリが`test`グループですので、作成されるファイルも`test`グループになります。

直接解決できなくとも、グループが引き継がれることを前提にグループ・パーミッションを設計することで解決できるかもしれません。

* * *

結局のところ、問題点を整理し原因を特定し解決するほかなく、闇雲に質問しても当てずっぽうな回答しかできません。その場合、「質問内容がはっきりしない」でクローズされ得る点にも注意してください。


CC BY-SA 3.0
2017-02-13T23:18:08.340
32647
2017-02-13T23:18:08.340
4236
32595
answer


目的が「ユーザを変更しても/usr/local/binのコマンドが実行されるよ‌​うにしたい」であれば、/usr/local/binにコマンドをインストールするときにinstallコマンドを使うのが定石かと思います。デフォルトでパーミッションが`-rwxr-
xr-x`に、`-m`オプションで指定すればパーミッションを指定できます。


CC BY-SA 3.0
2017-02-14T01:49:52.743
32651
2017-02-14T01:49:52.743
4010
32595
answer


> 実際にやりたいことはユーザを変更しても/usr/local/binのコマンドが実行されるようにしたいです
[code]

    $ sudo chmod +x /usr/local/bin/*
    
[/code]


CC BY-SA 3.0
2017-02-16T10:10:24.860
32722
2017-02-16T10:10:24.860
5008
32595
answer