Skip to content
This repository was archived by the owner on Feb 1, 2025. It is now read-only.

Commit 1a9b8ea

Browse files
Restrict permissions of private key file
On Unix file systems the mode of the private key file is set to 0o600. On other file systems the permissions remain unchanged. Signed-off-by: Siegfried Weber <[email protected]>
1 parent 297fe2c commit 1a9b8ea

File tree

1 file changed

+17
-3
lines changed
  • crates/kubelet/src/bootstrapping

1 file changed

+17
-3
lines changed

crates/kubelet/src/bootstrapping/mod.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{convert::TryFrom, env, path::Path, str};
1+
use std::{convert::TryFrom, env, io, path::Path, str};
22

33
use futures::{StreamExt, TryStreamExt};
44
use k8s_openapi::api::certificates::v1beta1::CertificateSigningRequest;
@@ -10,7 +10,8 @@ use rcgen::{
1010
Certificate, CertificateParams, DistinguishedName, DnType, KeyPair, SanType,
1111
PKCS_ECDSA_P256_SHA256,
1212
};
13-
use tokio::fs::{read, write};
13+
use tokio::fs::{read, write, File};
14+
use tokio::io::AsyncWriteExt;
1415
use tracing::{debug, info};
1516

1617
use crate::config::Config as KubeletConfig;
@@ -245,7 +246,9 @@ async fn bootstrap_tls(
245246
config.server_config.cert_file, config.server_config.private_key_file
246247
);
247248
write(&config.server_config.cert_file, &certificate).await?;
248-
write(&config.server_config.private_key_file, &private_key).await?;
249+
let mut private_key_file = File::create(&config.server_config.private_key_file).await?;
250+
private_key_file.write_all(private_key.as_ref()).await?;
251+
restrict_permissions_of_private_file(&private_key_file).await?;
249252

250253
notify(completed_csr_approval("TLS"));
251254

@@ -365,3 +368,14 @@ async fn read_from<P: AsRef<Path>>(path: P) -> anyhow::Result<Kubeconfig> {
365368

366369
Ok(config)
367370
}
371+
372+
#[cfg(target_family = "unix")]
373+
async fn restrict_permissions_of_private_file(file: &File) -> io::Result<()> {
374+
let permissions = std::os::unix::fs::PermissionsExt::from_mode(0o600);
375+
file.set_permissions(permissions).await
376+
}
377+
378+
#[cfg(not(target_family = "unix"))]
379+
async fn restrict_permissions_of_private_file(_file: &File) -> io::Result<()> {
380+
Ok(())
381+
}

0 commit comments

Comments
 (0)