Skip to content

Commit 9c5cef3

Browse files
stefantalpalaruzah
authored andcommitted
set file and dir permissions
1 parent 4479c0a commit 9c5cef3

File tree

4 files changed

+63
-64
lines changed

4 files changed

+63
-64
lines changed

beacon_chain/filepath.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ proc secureCreatePath*(path: string): IoResult[void] =
1414
err(sres.error)
1515
else:
1616
var sd = sres.get()
17-
createPath(path, 0o750, secDescriptor = sd.getDescriptor())
17+
createPath(path, 0o700, secDescriptor = sd.getDescriptor())
1818
else:
19-
createPath(path, 0o750)
19+
createPath(path, 0o700)
2020

2121
proc secureWriteFile*[T: byte|char](path: string,
2222
data: openArray[T]): IoResult[void] =

beacon_chain/keystore_management.nim

Lines changed: 57 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -44,104 +44,103 @@ proc echoP(msg: string) =
4444
echo wrapWords(msg, 80)
4545

4646
proc checkAndCreateDataDir*(dataDir: string): bool =
47-
## Checks `conf.dataDir`.
48-
## If folder exists, procedure will check it for access and
49-
## permissions `0750 (rwxr-x---)`, if folder do not exists it will be created
50-
## with permissions `0750 (rwxr-x---)`.
51-
let amask = {AccessFlags.Read, AccessFlags.Write, AccessFlags.Execute}
5247
when defined(posix):
53-
if fileAccessible(dataDir, amask):
54-
let gmask = {UserRead, UserWrite, UserExec, GroupRead, GroupExec}
55-
let pmask = {OtherRead, OtherWrite, OtherExec, GroupWrite}
56-
let pres = getPermissionsSet(dataDir)
57-
if pres.isErr():
58-
fatal "Could not check data folder permissions",
59-
data_dir = dataDir, errorCode = $pres.error,
60-
errorMsg = ioErrorMsg(pres.error)
61-
false
48+
let requiredPerms = 0o700
49+
if isDir(dataDir):
50+
let currPermsRes = getPermissions(dataDir)
51+
if currPermsRes.isErr():
52+
fatal "Could not check data directory permissions",
53+
data_dir = dataDir, errorCode = $currPermsRes.error,
54+
errorMsg = ioErrorMsg(currPermsRes.error)
55+
return false
6256
else:
63-
let insecurePermissions = pres.get() * pmask
64-
if insecurePermissions != {}:
65-
fatal "Data folder has insecure permissions",
66-
data_dir = dataDir,
67-
insecure_permissions = $insecurePermissions,
68-
current_permissions = pres.get().toString(),
69-
required_permissions = gmask.toString()
70-
false
71-
else:
72-
true
57+
let currPerms = currPermsRes.get()
58+
if currPerms != requiredPerms:
59+
warn "Data directory has insecure permissions. Correcting them.",
60+
data_dir = dataDir,
61+
current_permissions = currPerms.toOct(4),
62+
required_permissions = requiredPerms.toOct(4)
63+
let newPermsRes = setPermissions(dataDir, requiredPerms)
64+
if newPermsRes.isErr():
65+
fatal "Could not set data directory permissions",
66+
data_dir = dataDir,
67+
errorCode = $newPermsRes.error,
68+
errorMsg = ioErrorMsg(newPermsRes.error),
69+
old_permissions = currPerms.toOct(4),
70+
new_permissions = requiredPerms.toOct(4)
71+
return false
7372
else:
7473
let res = secureCreatePath(dataDir)
7574
if res.isErr():
76-
fatal "Could not create data folder", data_dir = dataDir,
75+
fatal "Could not create data directory", data_dir = dataDir,
7776
errorMsg = ioErrorMsg(res.error), errorCode = $res.error
78-
false
79-
else:
80-
true
77+
return false
8178
elif defined(windows):
79+
let amask = {AccessFlags.Read, AccessFlags.Write, AccessFlags.Execute}
8280
if fileAccessible(dataDir, amask):
8381
let cres = checkCurrentUserOnlyACL(dataDir)
8482
if cres.isErr():
8583
fatal "Could not check data folder's ACL",
8684
data_dir = dataDir, errorCode = $cres.error,
8785
errorMsg = ioErrorMsg(cres.error)
88-
false
86+
return false
8987
else:
9088
if cres.get() == false:
9189
fatal "Data folder has insecure ACL", data_dir = dataDir
92-
false
93-
else:
94-
true
90+
return false
9591
else:
9692
let res = secureCreatePath(dataDir)
9793
if res.isErr():
9894
fatal "Could not create data folder", data_dir = dataDir,
9995
errorMsg = ioErrorMsg(res.error), errorCode = $res.error
100-
false
101-
else:
102-
true
96+
return false
10397
else:
10498
fatal "Unsupported operation system"
10599
return false
106100

101+
return true
102+
107103
proc checkSensitiveFilePermissions*(filePath: string): bool =
108104
## Check if ``filePath`` has only "(600) rw-------" permissions.
109-
## Procedure returns ``false`` if permissions are different
105+
## Procedure returns ``false`` if permissions are different and we can't
106+
## correct them.
110107
when defined(windows):
111108
let cres = checkCurrentUserOnlyACL(filePath)
112109
if cres.isErr():
113110
fatal "Could not check file's ACL",
114111
key_path = filePath, errorCode = $cres.error,
115112
errorMsg = ioErrorMsg(cres.error)
116-
false
113+
return false
117114
else:
118115
if cres.get() == false:
119116
fatal "File has insecure permissions", key_path = filePath
120-
false
121-
else:
122-
true
117+
return false
123118
else:
124-
let allowedMask = {UserRead, UserWrite}
125-
let mask = {UserExec,
126-
GroupRead, GroupWrite, GroupExec,
127-
OtherRead, OtherWrite, OtherExec}
128-
let pres = getPermissionsSet(filePath)
129-
if pres.isErr():
119+
let requiredPerms = 0o600
120+
let currPermsRes = getPermissions(filePath)
121+
if currPermsRes.isErr():
130122
error "Could not check file permissions",
131-
key_path = filePath, errorCode = $pres.error,
132-
errorMsg = ioErrorMsg(pres.error)
133-
false
123+
key_path = filePath, errorCode = $currPermsRes.error,
124+
errorMsg = ioErrorMsg(currPermsRes.error)
125+
return false
134126
else:
135-
let insecurePermissions = pres.get() * mask
136-
if insecurePermissions != {}:
137-
error "File has insecure permissions",
127+
let currPerms = currPermsRes.get()
128+
if currPerms != requiredPerms:
129+
warn "File has insecure permissions. Correcting them.",
138130
key_path = filePath,
139-
insecure_permissions = $insecurePermissions,
140-
current_permissions = pres.get().toString(),
141-
required_permissions = allowedMask.toString()
142-
false
143-
else:
144-
true
131+
current_permissions = currPerms.toOct(4),
132+
required_permissions = requiredPerms.toOct(4)
133+
let newPermsRes = setPermissions(filePath, requiredPerms)
134+
if newPermsRes.isErr():
135+
fatal "Could not set data directory permissions",
136+
key_path = filePath,
137+
errorCode = $newPermsRes.error,
138+
errorMsg = ioErrorMsg(newPermsRes.error),
139+
old_permissions = currPerms.toOct(4),
140+
new_permissions = requiredPerms.toOct(4)
141+
return false
142+
143+
return true
145144

146145
proc keyboardCreatePassword(prompt: string,
147146
confirm: string,

scripts/launch_local_testnet.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ if [[ "$REUSE_EXISTING_DATA_DIR" == "0" ]]; then
161161
rm -rf "${DATA_DIR}"
162162
fi
163163

164-
mkdir -m 0750 -p "${DATA_DIR}"
164+
mkdir -m 0700 -p "${DATA_DIR}"
165165

166166
DEPOSITS_FILE="${DATA_DIR}/deposits.json"
167167

@@ -341,7 +341,7 @@ for NUM_NODE in $(seq 0 $(( NUM_NODES - 1 ))); do
341341
# The first $NODES_WITH_VALIDATORS nodes split them equally between them, after skipping the first $USER_VALIDATORS.
342342
NODE_DATA_DIR="${DATA_DIR}/node${NUM_NODE}"
343343
rm -rf "${NODE_DATA_DIR}"
344-
mkdir -m 0750 -p "${NODE_DATA_DIR}"
344+
mkdir -m 0700 -p "${NODE_DATA_DIR}"
345345
mkdir -p "${NODE_DATA_DIR}/validators"
346346
mkdir -p "${NODE_DATA_DIR}/secrets"
347347

scripts/makedir.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ if [[ "${ON_WINDOWS}" == "1" ]]; then
2424
icacls "$1" /inheritance:r /grant:r $USERDOMAIN\\$USERNAME:\(OI\)\(CI\)\(F\)&>/dev/null;
2525
fi
2626
else
27-
# Create full path with 0750 permissions.
28-
mkdir -m 0750 -p "$1"
27+
# Create full path with proper permissions.
28+
mkdir -m 0700 -p $1
2929
fi
3030

0 commit comments

Comments
 (0)