Last active
October 19, 2018 07:00
-
-
Save hayajo/69e31086345e8a95d40d to your computer and use it in GitHub Desktop.
os.Mkdir(All)で01777なパーミッションのディレクトリを作成
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"os" | |
"syscall" | |
) | |
func main() { | |
oldMask := syscall.Umask(0) | |
os.Mkdir("hoge_01", 01777) // NG | |
os.Mkdir("hoge_02", 04000777) // Linux: OK, OSX: NG | |
os.Mkdir("hoge_03", 0777 | os.ModeSticky) // Linux: OK, OSX: NG | |
os.Mkdir("hoge_04", os.FileMode(01777)) // NG | |
os.Mkdir("hoge_05", os.FileMode(04000777)) // Linux:OK, OSX: NG | |
os.Mkdir("hoge_06", os.FileMode(0777) | os.ModeSticky) // Linux: OK, OSX: NG | |
os.Mkdir("hoge_07", 0777) | |
os.Chmod("hoge_07", 01777) // Linux: NG, OSX: NG | |
os.Mkdir("hoge_08", 0777) | |
os.Chmod("hoge_08", 04000777) // Linux: OK, OSX: OK | |
os.Mkdir("hoge_09", 0777) | |
os.Chmod("hoge_09", 0777 | os.ModeSticky) // Linux: OK, OSX: OK | |
syscall.Umask(oldMask) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ちなみにOS X(BSD?)のmkdirでは下位9ビットしか見ないようなので、mkdir後にchmodしなきゃダメっぽいです。( mkdir(2) )
あと01777でダメなのは、golangの実装でModeStickyは04000000なので、もし指定するなら04000777にしなければダメです。( code.google.com/p/go/src/pkg/os/types.go )
というわけで、os.Mkdirではsuid, sgid, sticky bitを設定せずに、os.Mkdirしたあとにos.Chmodして設定したほうが確実っぽいです。