SaltStack과 Python이 협력하여 시스템 사용자 자동화 관리

배경 요구 사항:
임의의 업무의 발전에 따라 서버 데이터도 점점 많아지고 개발자, 운영 인원도 점점 많아진다.이때 만약 대량의 사람들이 서버에 로그인해야 한다면 우리는 사용자를 관리할 필요가 있다.전통적인 방식은 모든 서버에 로그인하여 사용자를 만드는 것이다. 업무 중복성이 너무 크다. 만약에 1000대가 있으면 어떻게 합니까?심지어 어떤 회사 사용자는 만들지 않고 모든 사람을 루트로 로그인시키는 것이 더 위험합니다!!!,그렇게 똑똑한 운영자는 반자동화 사용자를 만들기 위한 스크립트를 쓴다.이러한 방법은 대량의 기계를 관리하기에 적합하지 않다. 다음은 모두에게 SaltStack과Python 스크립트에서 실현된 자동화된 사용자 관리를 가져다 줄 것이다.
목표 달성:
  • 루트를 사용하여 서버에 직접 원격 로그인할 수 없습니다
  • 비밀번호를 사용하여 서버에 로그인할 수 없습니다(키만 가능)
  • 간단한 명령을 통해 사용자 생성을 자동화하고 사용자 키를 사용자 디렉터리에 보내서 사용자가 키 로그인을 할 수 있고 sudo 권한을 가진다

  • salt의 사용을 끄면 내가 이전에 발표한 몇 편의 글, 을 볼 수 있다.Python 사용에 대해서는 스스로 학습하십시오.
    위의 작업과 학습을 마치고 아래의 실현 방법을 계속 봅시다.
    /srv/salt/test: 우리salt의test 환경 루트 디렉터리입니다
    디렉토리 구조는 다음과 같습니다.
    user_managent
    ├── files
    │   └── user-authorized_keys
    ├── init.sls
    └── useradd.sls
    #files , USERNAME-authorized_keys

    상태 프로필은 다음과 같습니다. init.sls
    # root 
    modify PermitRootLogin:
      file.replace:
        - name: /etc/ssh/sshd_config
        - pattern: ^\#PermitRootLogin yes$
        - repl: PermitRootLogin no
    
    # 
    modify PasswordAuthentication:
      file.replace:
        - name: /etc/ssh/sshd_config
        - pattern: ^PasswordAuthentication yes$
        - repl: PasswordAuthentication no
    
    # 
    sshd managent:
     service.running:
        - name: sshd
        - enable: True
        - reload: True
        - watch:
          - file: /etc/ssh/sshd_config
    
    # 
    create group:
      group.present:
        - name: aek
        
    # sudo 
    modify sudoers:
      file.append:
        - name: /etc/sudoers
        - text:
          - "%aek        ALL=(ALL)       ALL"

    상태 프로필은 다음과 같습니다:useradd.sls
    # , ,  
    {% set USERNAME = 'user' %}
    {% set PASSWORD = '$6$i6qujzCmWYsXGDJ0$Mxo50GGqCNMI3AKReNXKZ3GGxhFLzrZSQRxuFChw9JX/QrIdIIjqqkM52A7tEKOb61OuXmV7IrvtNWbzVgt000' %}
    
    # , groups, , sudo 
    create user:
      user.present:
        - name: `USERNAME`
        - password: `PASSWORD`
        - groups:
          - aek
    
    # key 
    pub key:
      ssh_auth.present:
        - user: `USERNAME`
        - source: salt://user_managent/files/`USERNAME`-authorized_keys
        - template: jinja

    파이썬 스크립트:
    #!/usr/bin/python
    #coding:utf:8
    
    import sys
    import fileinput
    import crypt
    import re
    
    class UserAdd:
        # salt 
    
        def __init__(self, username=sys.argv[1]):
            self.username = username
    
        # 
        def password(self):
            self.password = crypt.crypt(self.username)    
            return self.password
    
        # state 
        def modifyStateFile(self):
            password = self.password()
            for i in fileinput.input("/srv/salt/test/user_managent/useradd.sls", inplace=True):
                if "USERNAME = " in i:
                    print(re.sub(r"USERNAME = '.*?'", "USERNAME = '"+self.username+"'", i).rstrip())
                elif "PASSWORD = " in i:
                    print(re.sub(r"PASSWORD = '.*?'", "PASSWORD = '"+password+"'", i).rstrip())
                else:
                    print(i).rstrip()
    
    if __name__ == "__main__":
        a = UserAdd()
        a.modifyStateFile()

    Python 스크립트 사용 방법:
    # , , 
    chmod +x useradd.py    # 
    ./useradd.py USERNAME   # 

    Python 스크립트를 실행하면 다음으로Salt 명령을 실행하여 사용자를 만들 수 있습니다. 명령은 다음과 같습니다.
    salt -G "os:CentOS" state.sls user_managent saltenv=test    # 
    salt -G "os:CentOS" state.sls user_managent.useradd saltenv=test    # 

    마지막으로 필요한 건 완성을 기다리면 돼요.

    좋은 웹페이지 즐겨찾기