diff --git a/.golangci.yaml b/.golangci.yaml
index d3ae7d7f2..792b3ab4c 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -210,3 +210,4 @@ linters:
     - varcheck             # Finds unused global variables and constants
     - whitespace           # Tool for detection of leading and trailing whitespace NOTE(howell): This linter does _not_ check for trailing whitespace in multiline strings
     - golint               # Finds all coding style mistakes
+    - asciicheck           # Simple linter to check that your code does not contain non-ASCII identifiers
diff --git a/pkg/clusterctl/client/move.go b/pkg/clusterctl/client/move.go
index 0052b8260..f4a337fdb 100644
--- a/pkg/clusterctl/client/move.go
+++ b/pkg/clusterctl/client/move.go
@@ -106,21 +106,22 @@ func copyBMHStatus(ctx context.Context, cFrom client.Client, cTo client.Client,
 	}
 	// Copy the Status field from old BMH to new BMH
 	log.Debugf("Copying BareMetalHost status to target cluster")
-	for _, toHost := range toHosts.Items {
+	for i := range toHosts.Items {
 		var found bool
 		t := metav1.Now()
 		for _, fromHost := range fromHosts.Items {
-			if fromHost.Name == toHost.Name {
-				toHost.Status = fromHost.Status
+			if fromHost.Name == toHosts.Items[i].Name {
+				toHosts.Items[i].Status = fromHost.Status
 				found = true
 				break
 			}
 		}
 		if !found {
-			return errors.Errorf("BMH with the same name %s/%s not found in the source cluster", toHost.Name, namespace)
+			return errors.Errorf("BMH with the same name %s/%s not found in the source cluster",
+				toHosts.Items[i].Name, namespace)
 		}
-		toHost.Status.LastUpdated = &t
-		err = cTo.Status().Update(ctx, &toHost)
+		toHosts.Items[i].Status.LastUpdated = &t
+		err = cTo.Status().Update(ctx, &toHosts.Items[i])
 		if err != nil {
 			return errors.Wrap(err, "failed to update BareMetalHost status")
 		}
@@ -135,21 +136,21 @@ func pauseUnpauseBMHs(ctx context.Context, crClient client.Client, namespace str
 	if err != nil {
 		return errors.Wrap(err, "failed to list BMH objects")
 	}
-	for _, host := range hosts.Items {
-		annotations := host.GetAnnotations()
+	for i := range hosts.Items {
+		annotations := hosts.Items[i].GetAnnotations()
 		if annotations == nil {
-			host.Annotations = map[string]string{}
+			hosts.Items[i].Annotations = map[string]string{}
 		}
 		if pause {
-			log.Debugf("Pausing BareMetalHost object %s/%s", host.Name, namespace)
-			host.Annotations[bmh.PausedAnnotation] = "true"
+			log.Debugf("Pausing BareMetalHost object %s/%s", hosts.Items[i].Name, namespace)
+			hosts.Items[i].Annotations[bmh.PausedAnnotation] = "true"
 		} else {
-			log.Debugf("Unpausing BareMetalHost object %s/%s", host.Name, namespace)
-			delete(host.Annotations, bmh.PausedAnnotation)
+			log.Debugf("Unpausing BareMetalHost object %s/%s", hosts.Items[i].Name, namespace)
+			delete(hosts.Items[i].Annotations, bmh.PausedAnnotation)
 		}
-		if err := crClient.Update(ctx, &host); err != nil {
+		if err := crClient.Update(ctx, &hosts.Items[i]); err != nil {
 			return errors.Wrapf(err, "error updating BareMetalHost %q %s/%s",
-				host.GroupVersionKind(), host.GetNamespace(), host.GetName())
+				hosts.Items[i].GroupVersionKind(), hosts.Items[i].GetNamespace(), hosts.Items[i].GetName())
 		}
 	}
 	return nil
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 85d79cf3a..1e6b998eb 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -424,7 +424,7 @@ func (c *Config) PersistConfig() error {
 	}
 
 	// Write the Airship Config file
-	err = ioutil.WriteFile(c.loadedConfigPath, airshipConfigYaml, 0644)
+	err = ioutil.WriteFile(c.loadedConfigPath, airshipConfigYaml, 0600)
 	if err != nil {
 		return err
 	}
diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go
index ce1e4fa58..d85b1d69e 100644
--- a/pkg/config/config_test.go
+++ b/pkg/config/config_test.go
@@ -755,7 +755,7 @@ users:
     client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJQXhEdzk2RUY4SXN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBNU1qa3hOekF6TURsYUZ3MHlNREE1TWpneE56QXpNVEphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXV6R0pZdlBaNkRvaTQyMUQKSzhXSmFaQ25OQWQycXo1cC8wNDJvRnpRUGJyQWd6RTJxWVZrek9MOHhBVmVSN1NONXdXb1RXRXlGOEVWN3JyLwo0K0hoSEdpcTVQbXF1SUZ5enpuNi9JWmM4alU5eEVmenZpa2NpckxmVTR2UlhKUXdWd2dBU05sMkFXQUloMmRECmRUcmpCQ2ZpS1dNSHlqMFJiSGFsc0J6T3BnVC9IVHYzR1F6blVRekZLdjJkajVWMU5rUy9ESGp5UlJKK0VMNlEKQlltR3NlZzVQNE5iQzllYnVpcG1NVEFxL0p1bU9vb2QrRmpMMm5acUw2Zkk2ZkJ0RjVPR2xwQ0IxWUo4ZnpDdApHUVFaN0hUSWJkYjJ0cDQzRlZPaHlRYlZjSHFUQTA0UEoxNSswV0F5bVVKVXo4WEE1NDRyL2J2NzRKY0pVUkZoCmFyWmlRd0lEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFMMmhIUmVibEl2VHJTMFNmUVg1RG9ueVVhNy84aTg1endVWApSd3dqdzFuS0U0NDJKbWZWRGZ5b0hRYUM4Ti9MQkxyUXM0U0lqU1JYdmFHU1dSQnRnT1RRV21Db1laMXdSbjdwCndDTXZQTERJdHNWWm90SEZpUFl2b1lHWFFUSXA3YlROMmg1OEJaaEZ3d25nWUovT04zeG1rd29IN1IxYmVxWEYKWHF1TTluekhESk41VlZub1lQR09yRHMwWlg1RnNxNGtWVU0wVExNQm9qN1ZIRDhmU0E5RjRYNU4yMldsZnNPMAo4aksrRFJDWTAyaHBrYTZQQ0pQS0lNOEJaMUFSMG9ZakZxT0plcXpPTjBqcnpYWHh4S2pHVFVUb1BldVA5dCtCCjJOMVA1TnI4a2oxM0lrend5Q1NZclFVN09ZM3ltZmJobHkrcXZxaFVFa014MlQ1SkpmQT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
     client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBdXpHSll2UFo2RG9pNDIxREs4V0phWkNuTkFkMnF6NXAvMDQyb0Z6UVBickFnekUyCnFZVmt6T0w4eEFWZVI3U041d1dvVFdFeUY4RVY3cnIvNCtIaEhHaXE1UG1xdUlGeXp6bjYvSVpjOGpVOXhFZnoKdmlrY2lyTGZVNHZSWEpRd1Z3Z0FTTmwyQVdBSWgyZERkVHJqQkNmaUtXTUh5ajBSYkhhbHNCek9wZ1QvSFR2MwpHUXpuVVF6Rkt2MmRqNVYxTmtTL0RIanlSUkorRUw2UUJZbUdzZWc1UDROYkM5ZWJ1aXBtTVRBcS9KdW1Pb29kCitGakwyblpxTDZmSTZmQnRGNU9HbHBDQjFZSjhmekN0R1FRWjdIVEliZGIydHA0M0ZWT2h5UWJWY0hxVEEwNFAKSjE1KzBXQXltVUpVejhYQTU0NHIvYnY3NEpjSlVSRmhhclppUXdJREFRQUJBb0lCQVFDU0pycjlaeVpiQ2dqegpSL3VKMFZEWCt2aVF4c01BTUZyUjJsOE1GV3NBeHk1SFA4Vk4xYmc5djN0YUVGYnI1U3hsa3lVMFJRNjNQU25DCm1uM3ZqZ3dVQWlScllnTEl5MGk0UXF5VFBOU1V4cnpTNHRxTFBjM3EvSDBnM2FrNGZ2cSsrS0JBUUlqQnloamUKbnVFc1JpMjRzT3NESlM2UDE5NGlzUC9yNEpIM1M5bFZGbkVuOGxUR2c0M1kvMFZoMXl0cnkvdDljWjR5ZUNpNwpjMHFEaTZZcXJZaFZhSW9RRW1VQjdsbHRFZkZzb3l4VDR6RTE5U3pVbkRoMmxjYTF1TzhqcmI4d2xHTzBoQ2JyClB1R1l2WFFQa3Q0VlNmalhvdGJ3d2lBNFRCVERCRzU1bHp6MmNKeS9zSS8zSHlYbEMxcTdXUmRuQVhhZ1F0VzkKOE9DZGRkb0JBb0dCQU5NcUNtSW94REtyckhZZFRxT1M1ZFN4cVMxL0NUN3ZYZ0pScXBqd2Y4WHA2WHo0KzIvTAozVXFaVDBEL3dGTkZkc1Z4eFYxMnNYMUdwMHFWZVlKRld5OVlCaHVSWGpTZ0ZEWldSY1Z1Y01sNVpPTmJsbmZGCjVKQ0xnNXFMZ1g5VTNSRnJrR3A0R241UDQxamg4TnhKVlhzZG5xWE9xNTFUK1RRT1UzdkpGQjc1QW9HQkFPTHcKalp1cnZtVkZyTHdaVGgvRDNpWll5SVV0ZUljZ2NKLzlzbTh6L0pPRmRIbFd4dGRHUFVzYVd1MnBTNEhvckFtbgpqTm4vSTluUXd3enZ3MWUzVVFPbUhMRjVBczk4VU5hbk5TQ0xNMW1yaXZHRXJ1VHFnTDM1bU41eFZPdTUxQU5JCm4yNkFtODBJT2JDeEtLa0R0ZXJSaFhHd3g5c1pONVJCbG9VRThZNGJBb0dBQ3ZsdVhMZWRxcng5VkE0bDNoNXUKVDJXRVUxYjgxZ1orcmtRc1I1S0lNWEw4cllBTElUNUpHKzFuendyN3BkaEFXZmFWdVV2SDRhamdYT0h6MUs5aQpFODNSVTNGMG9ldUg0V01PY1RwU0prWm0xZUlXcWRiaEVCb1FGdUlWTXRib1BsV0d4ZUhFRHJoOEtreGp4aThSCmdEcUQyajRwY1IzQ0g5QjJ5a0lqQjVFQ2dZRUExc0xXLys2enE1c1lNSm14K1JXZThhTXJmL3pjQnVTSU1LQWgKY0dNK0wwMG9RSHdDaUU4TVNqcVN1ajV3R214YUFuanhMb3ZwSFlRV1VmUEVaUW95UE1YQ2VhRVBLOU4xbk8xMwp0V2lHRytIZkIxaU5PazFCc0lhNFNDbndOM1FRVTFzeXBaeEgxT3hueS9LYmkvYmEvWEZ5VzNqMGFUK2YvVWxrCmJGV1ZVdWtDZ1lFQTBaMmRTTFlmTjV5eFNtYk5xMWVqZXdWd1BjRzQxR2hQclNUZEJxdHFac1doWGE3aDdLTWEKeHdvamh5SXpnTXNyK2tXODdlajhDQ2h0d21sQ1p5QU92QmdOZytncnJ1cEZLM3FOSkpKeU9YREdHckdpbzZmTQp5aXB3Q2tZVGVxRThpZ1J6UkI5QkdFUGY4eVpjMUtwdmZhUDVhM0lRZmxiV0czbGpUemNNZVZjPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
 `
-	err := ioutil.WriteFile(kubeConfigPath, []byte(kubeConfigContent), 0644)
+	err := ioutil.WriteFile(kubeConfigPath, []byte(kubeConfigContent), 0600)
 	require.NoError(t, err)
 
 	err = conf.ImportFromKubeConfig(kubeConfigPath)
@@ -827,7 +827,7 @@ func TestImportErrors(t *testing.T) {
 		//nolint: lll
 		kubeConfigContent := "malformed content"
 
-		err := ioutil.WriteFile(kubeConfigPath, []byte(kubeConfigContent), 0644)
+		err := ioutil.WriteFile(kubeConfigPath, []byte(kubeConfigContent), 0600)
 		require.NoError(t, err)
 
 		err = conf.ImportFromKubeConfig(kubeConfigPath)
diff --git a/pkg/k8s/applier/applier.go b/pkg/k8s/applier/applier.go
index 3cb78abf0..03d76d347 100644
--- a/pkg/k8s/applier/applier.go
+++ b/pkg/k8s/applier/applier.go
@@ -64,7 +64,7 @@ func NewApplier(f cmdutil.Factory, streams genericclioptions.IOStreams) *Applier
 		Streams:               streams,
 		ManifestReaderFactory: utils.DefaultManifestReaderFactory,
 		Driver: &Adaptor{
-			СliUtilsApplier: cliapply.NewApplier(f, streams),
+			CliUtilsApplier: cliapply.NewApplier(f, streams),
 		},
 	}
 }
@@ -183,7 +183,7 @@ type Driver interface {
 
 // Adaptor is implementation of driver interface
 type Adaptor struct {
-	СliUtilsApplier *cliapply.Applier
+	CliUtilsApplier *cliapply.Applier
 	Factory         cmdutil.Factory
 }
 
@@ -193,7 +193,7 @@ func (a *Adaptor) Initialize(p poller.Poller) error {
 	// Code below is copied from cli-utils package and used the same way as in upstream:
 	// https://github.com/kubernetes-sigs/cli-utils/blob/v0.14.0/cmd/apply/cmdapply.go#L35-L46
 	// Skip error checking is done in a same way as in upstream usage of this package
-	err := a.СliUtilsApplier.SetFlags(cmd)
+	err := a.CliUtilsApplier.SetFlags(cmd)
 	if err != nil {
 		return err
 	}
@@ -206,20 +206,20 @@ func (a *Adaptor) Initialize(p poller.Poller) error {
 	cmd.Flags().MarkHidden("server-side")     //nolint:errcheck
 	cmd.Flags().MarkHidden("force-conflicts") //nolint:errcheck
 	cmd.Flags().MarkHidden("field-manager")   //nolint:errcheck
-	err = a.СliUtilsApplier.Initialize(cmd)
+	err = a.CliUtilsApplier.Initialize(cmd)
 	if err != nil {
 		return err
 	}
 	// status poller needs to be set only after the Initialize method is executed
 	if p != nil {
-		a.СliUtilsApplier.StatusPoller = p
+		a.CliUtilsApplier.StatusPoller = p
 	}
 	return nil
 }
 
 // Run perform apply operation
 func (a *Adaptor) Run(ctx context.Context, infos []*resource.Info, options cliapply.Options) <-chan applyevent.Event {
-	return a.СliUtilsApplier.Run(ctx, infos, options)
+	return a.CliUtilsApplier.Run(ctx, infos, options)
 }
 
 // NewInventoryDocument returns default config map with invetory Id to group up the objects
diff --git a/testutil/testconfig.go b/testutil/testconfig.go
index 30ca38e12..20df903af 100644
--- a/testutil/testconfig.go
+++ b/testutil/testconfig.go
@@ -181,11 +181,11 @@ func InitConfig(t *testing.T) (conf *config.Config, cleanup func(*testing.T)) {
 	testDir, cleanup := TempDir(t, "airship-test")
 
 	configPath := filepath.Join(testDir, "config")
-	err := ioutil.WriteFile(configPath, []byte(testConfigYAML), 0666)
+	err := ioutil.WriteFile(configPath, []byte(testConfigYAML), 0600)
 	require.NoError(t, err)
 
 	kubeConfigPath := filepath.Join(testDir, "kubeconfig")
-	err = ioutil.WriteFile(kubeConfigPath, []byte(testKubeConfigYAML), 0666)
+	err = ioutil.WriteFile(kubeConfigPath, []byte(testKubeConfigYAML), 0600)
 	require.NoError(t, err)
 
 	conf = config.NewConfig()
diff --git a/testutil/utilities.go b/testutil/utilities.go
index 9fa0f728b..5b4ab8a42 100644
--- a/testutil/utilities.go
+++ b/testutil/utilities.go
@@ -85,7 +85,7 @@ func updateGolden(t *testing.T, test *CmdTest, actual []byte) {
 	t.Logf("Created %s", goldenDir)
 	goldenFilePath := filepath.Join(goldenDir, test.Name+goldenFileSuffix)
 	t.Logf("Updating golden file: %s", goldenFilePath)
-	err = ioutil.WriteFile(goldenFilePath, normalize(actual), 0666)
+	err = ioutil.WriteFile(goldenFilePath, normalize(actual), 0600)
 	require.NoErrorf(t, err, "Failed to update golden file at %s", goldenFilePath)
 }
 
diff --git a/tools/install_linter b/tools/install_linter
index d65b05cfe..9f5d402ab 100755
--- a/tools/install_linter
+++ b/tools/install_linter
@@ -3,7 +3,7 @@ set -x
 
 tools_bin_dir="${BASH_SOURCE%/*}"
 download_url=https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh
-version=v1.23.8
+version=v1.29.0
 
 if ! curl -sfL "$download_url" | sh -s -- -b "$tools_bin_dir/bin" "$version"; then
   printf "Something went wrong while installing golangci-lint\n" 1>&2