I have the following directory structure:
+ public/
|-+ pics/
| |-- a
| `-- b
`-+ thumbs/
|-- a
`-- b
I would like all the files in the tree to be owned by gallery:http with ug=rwX,o= mode set.
The script which happens to create directories within pics and thumbs runs
as the gallery user. I set SUID/SGID bits on public, pics and thumbs.
Now the problem is that the a directory will get created with owners gallery:http as it should, but it won't have the x permission for the group. If I call chmod, I'll clear the SGID bit. (Strange behavior, but that
will really happen, likely because http is not the user-owner of the file.)
I can't call chown as non-root user to set mode first and then the owners.
The only solution seems to be to set umask to ug=rwx,o=, create all the directories and then either change the umask before I create any regular file, or create the regular files and then change their mode to ug=rw,o=.
Is there a better, less ugly solution which I don't see?
chmod. But that does not make any sense. A file or directory has the UID of the creating process as owner. So if you create a directory then you can set SGID afterwards on it. – Hauke Laging Aug 23 '17 at 20:19umasksetting? – Andrew Henle Aug 23 '17 at 21:13