반응형

 

작성일: 2024년 2월 16일

 

 

Openstack에서 VM Instance를 새로 생성할 때, OS에 설정할 내용이 있다면 User Data를 입력하면 편하다.

(VM instance의 user datainit-cloud, cloud-init 스크립트라는 용어로 불리는 경우도 있다)

아래와 같이 예제를 보고, 필요한 부문만 조금씩 바꾸어 사용하는 것을 추천~

 

#cloud-config

ssh_pwauth: True

ssh_authorized_keys:
  - ssh-rsa AAA...SDvz sejong@xx.yy.com
  - ssh-rsa AAB...QTuo alphaa@aa.bb.com

chpasswd:
  list: |
     root:myxxyyzzroot
     ubuntu:myubuntuxxyyzz
     cloud-user:myxxyyzz
  expire: False
    
locale: en_US.UTF-8

# timezone: America/New_York
timezone: Asia/Seoul

bootcmd:
 - echo "My command at system booting" >> /var/my-cmd.txt

runcmd:
 - echo "My command example" >> /var/my-cmd.txt
 - apt install locales
 - locale-gen en_US.UTF-8
 - locale-gen ko_KR.UTF-8

 

위 예제는 root, ubuntu, cloud-user 등 3개 계정의 Password를 변경하고, timezone을 서울로 설정하고, Locale(언어)를 English로 설정하는 예제이다.

 

 


 

 

더 자세한 내용은 아래 Web Docs를 참고하자 !!!

 

Red Hat 문서

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_cloud-init_for_rhel_8/configuring-cloud-init_cloud-content

 

다양한 cloud-init 설정 예제 문서

https://ko.linux-console.net/?p=8814

 

'CentOS' 카테고리의 다른 글

Hugepage 설정 절차  (0) 2022.08.02
YUM 또는 DNF Repository 추가 방법  (0) 2022.06.22
CPU Pinning 예제 코드  (0) 2022.06.17
Install Ansible AWX (version 17.1.0)  (0) 2021.11.16
How to use Ansible and Playbook  (0) 2021.11.12
반응형

Ubuntu, CentOS 같은 Linux에서 sudoer를 설정하는 방법은 2가지가 있다.

 

방법 A

"/etc/sudoers.d/sejong" 파일에 아래와 같이 설정 1줄을 추가한다. 

##
## Filename: /etc/sudoers.d/sejong
##

sejong ALL=(ALL) NOPASSWD:ALL

 

 

방법 B

/etc/sudoers 파일의 마지막 줄에 아래 예제와 같이 계정 정보를 추가한다.

(sudoers 파일의 중간에 계정 정보를 추가하면 정상 동작하지 않는 경우를 발견하였다. 왜 문제가 발생하는지 원인은 모르겠고, 가능하면 마지막 줄에 넣어주는게 좋을 듯~)

$ echo "sejong ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

 

 

결과 확인

아래와 같이 sudo -s 명령을 수행해서 암호(password)를 입력하기 않고 바로 root user로 변경되는지 확인한다.

$ id
uid=997(sejong) gid=997(sejong) groups=997(sejong)

$ sudo -s

# id
uid=0(root) gid=0(root) groups=0(root)
반응형

 

잠깐 !!!
만약, 단순히 Container, Pod 내부에서 Root 권한 또는 Host OS 자원에 대한 접근 권한이 필요한 경우라면
이 블로그를 읽고 따라하기 보다는 아래 블로그를 읽고 간단하게 테스트하기를 권장한다.

https://andrewpage.tistory.com/191

 

 


 

 

Pod 내부의 Application이 Host OS의 Root User 권한으로 OS 자원에 접근하거나 명령을 수행해야 한다면, 해당 'namespace'에

privileged 속성 또는 privilieged와 동등한 수준의 자체 정의한 SecurityContextConstraints(SCC)를 추가해야 한다.

 

SCC 생성

나만의 SCC를 생성해보자.

$  cat << EOF > my-scc.yaml

kind: SecurityContextConstraints
metadata:
  name: andrew-scc
allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: false
allowedCapabilities:
- NET_ADMIN
- NET_RAW
- NET_BIND_SERVICE
apiVersion: security.openshift.io/v1
defaultAddCapabilities: null
fsGroup:
  type: RunAsAny
groups:
- system:cluster-admins
priority: 10
readOnlyRootFilesystem: false
requiredDropCapabilities:
- MKNOD
runAsUser:
  type: RunAsAny
seLinuxContext:
  type: MustRunAs
supplementalGroups:
  type: RunAsAny
users: null
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
- projected
- secret

EOF

 

위와 같이 my-scc.yaml을 작성했다면, 이 파일을 OCP에 적용한다.

## 참고로, scc는 namespace마다 있는 것이 아니다. 
## 따라서 namespace를 지정하지 않고, 아래 명령처럼 scc를 생성한다.

$  oc apply -f my-scc.yaml

 

이렇게 생성한 SCC를 내가 사용할 ServiceAccount와 binding한다.

$ oc create ns andrew-project
$ oc adm policy add-scc-to-group andrew-scc system:serviceaccounts:andrew
$ oc adm policy add-scc-to-user andrew-scc  -z andrew  -n andrew-project

# SCC 정보를 확인하는 명령
$ oc describe scc andrew-scc

# 'andrew' ServiceAccount로부터 'andrew-scc' SCC를 삭제하는 명령
$ oc adm policy remove-scc-from-user andrew-scc  -z andrew -n andrew-project

 

 

추가로 Pod Deploy할 때, 아래와 같이 'securityContext' 항목을 설정해야 한다.

 

# File name: my-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ubuntu-pv
  labels:
    app: ubuntu-pv
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ubuntu-pv
  template:
    metadata:
      labels:
        app: ubuntu-pv
    spec:
    ## NOTE: 이 부분을 추가 !!!
      securityContext:
        runAsUser: 0
      containers:
      - name: ubuntu-pv
        image: myharbor.andrew.space:8080/my-ubuntu:0.1.2
        ## NOTE: 이 부분을 추가 !!!
        securityContext:
          capabilities:
            add:
              - "NET_ADMIN"
              - "NET_RAW"
              - "NET_BIND_SERVICE"

 

 


 

 

여기까지는 그냥 SecurityContextConstraints에 관한 이해없이 따라해도 잘 동작한다.

그런데 만약 SecurityContextConstraints에 대해서 깊이 있는 지식을 얻고 싶다면, 아래의 Red Hat Blog를 읽어볼 것을 추천한다.

SecurityContextConstraints 방식으로 Process의 실행 권한을 제어하는 방법 외에도 Linux에서 전통적으로 사용하는 Stick Bit(SETUID)와 File Capability 방식으로 Binary File을 만들고, Container Image를 미리 제작하는 방법도 같이 소개하고 있다.

어떤 방식이 더 편하고, 보안(Security)이 우수한지는 사용하는 사람이 판단할 일이다.

 

 

 

추천 Blog - Capabilities in OpenShift (OCP)

 

https://cloud.redhat.com/blog/linux-capabilities-in-openshift

 

Linux Capabilities in OpenShift

We know that Linux has two types of users: Privileged and Unprivileged.

content.cloud.redhat.com

 

 

추천 Web Docs

아래 Web Docs에서 Chapter 15.에 가장 확실한 설명이 있다.

https://access.redhat.com/documentation/ko-kr/openshift_container_platform/4.10/html-single/authentication_and_authorization/index

 

인증 및 권한 부여 OpenShift Container Platform 4.10 | Red Hat Customer Portal

이 문서에서는 OpenShift Container Platform에서 ID 공급자를 정의하는 방법을 설명합니다. 또한 클러스터를 보호하기 위해 역할 기반 액세스 제어를 구성하는 방법도 알아봅니다.

access.redhat.com

 

 

 

+ Recent posts