[Linux] 권한 설정, 소유권 관리 실습

mommers·2026년 1월 30일

Linux

목록 보기
10/59

썸넬


1. 권한 설정 (chmod)

  • 학습: rwx (읽기/쓰기/실행) 의미. 8진수(755, 644) 표기법.
  • 실습:
    • 스크립트 파일 생성 후 chmod +x로 실행 권한 부여 전후 비교.
    • ls -al 로 파일 별 설정되어있는 권한 확인 가능.

chmod 777 = 보안 자살 행위

집 현관문을 뜯어내고 "누구나 들어와서 자고 가도 됨"이라고 써 붙이는 것과 동일하다..
읽기(4) + 쓰기(2) + 실행(1) 모든 권한을 모두(User, Group, Others)에게 부여하는 최악의 설정이니 사용 시 주의할 것.

다시 한번.. 읽기(4) + 쓰기(2) + 실행(1)

3대 치명적 위험

  1. 서버 탈취 (웹쉘 공격):
    • 웹 서버 업로드 폴더가 777이면, 해커가 악성 스크립트(웹쉘)를 업로드(Write)하고 즉시 실행(Execute) 가능.
    • 결과: 서버 관리자 권한 뺏김.
  2. 데이터 증발:
    • 로그인 가능한 아무나(Others) 시스템 설정 파일이나 DB 파일을 삭제/변조 가능.
  3. 서비스 실행 거부 (Self-Defense):
    • 보안이 생명인 서비스(SSH, DB 등)는 중요 파일(예: id_rsa, my.cnf) 권한이 777이면 "위험하다"고 판단해 실행 자체를 거부함.

정석 해결법

권한 오류 뜬다고 무지성 777 금지. 학부 연구생 때 권한 오류 뜬다고 chown 777 했다가 교수님께 혼났다. 그때는 뭐가 문제인지 잘 몰랐다. 아래 규칙 준수할 것.

  • 폴더(Directory): 755 (나만 쓰기, 남은 들어오기만 가능)
  • 파일(File): 644 (나만 쓰기, 남은 읽기만 가능)
  • 실행 스크립트: 755
  • 그래도 안 되면: chmod가 아니라 *chown으로 소유자를 변경하는 것이 정답.

  • chmod 600 (나만 읽기/쓰기) 설정 후 다른 사용자로 접근 시도해보기 (Permission denied 유도).

2. 소유권 관리 (chown, chgrp)

  • 학습: User와 Group의 개념. Root의 권한.
  • 실습:
    • sudo touch로 루트 소유 파일 생성 후, 내 계정으로 소유권 가져오기(chown user:user).
    • R 옵션으로 디렉터리 하위 모든 파일 소유권 한 번에 변경.

/etc/passwd/etc/group.

이 두 파일을 열어보면 모든 사용자와 그룹의 ID 정보를 원본 그대로 확인할 수 있음.

사용자 정보 & 주 그룹 (GID) 확인: /etc/passwd

사용자의 UID(User ID)기본 그룹(Primary GID)을 확인하는 파일.

  • 명령어: cat /etc/passwd
  • 형식: 사용자명:암호:UID:GID:설명:홈디렉터리:쉘
  • 예시: ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
    • 1000 (첫 번째 숫자): UID (내 아이디 번호)
    • 1000 (두 번째 숫자): GID (내가 속한 메인 그룹 번호)

그룹 상세 & 보조 그룹 확인: /etc/group

그룹의 이름과 GID, 그리고 해당 그룹에 속한 멤버 목록을 확인하는 파일.

  • 명령어: cat /etc/group
  • 형식: 그룹명:암호:GID:멤버리스트
  • 예시: sudo:x:27:ubuntu,pi
    • sudo: 그룹 이름
    • 27: GID (그룹 번호)
    • ubuntu,pi: 이 그룹에 포함된 사용자들 (보조 그룹)

쉬운 확인법 (명령어)

파일을 눈으로 읽기 힘들다면 그냥 id 명령어를 치는 것이 제일 빠름.

Bash

id          # 내 정보 확인
id pi   # 특정 사용자 정보 확인
  • 출력: uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),24(cdrom)...
  • 해석: 현재 내 UID, 기본 GID, 그리고 속해 있는 모든 그룹(groups)을 한눈에 보여줌.

group id는 잘 기억해야한다..


id, groups이 있는 파일을 수정해도 되나?

가능은 하지만, "시스템 자폭 버튼"을 누르는 것과 같음. 절대 권장하지 않음.

단순 텍스트 파일처럼 보이지만, 리눅스 시스템의 척추에 해당함. vinano로 직접 열어서 수정하면 발생하는 치명적 문제점과 안전한 대안을 정리함.

1. 직접 수정하면 안 되는 이유 (3대 위험)

  1. 문법 오류 = 부팅/로그인 불가
    • 파일 형식이 매우 엄격함 (user:x:1000:...).
    • 실수로 콜론(:) 하나를 지우거나 오타를 낸 상태로 저장하면, 즉시 모든 사용자의 로그인이 막히거나 부팅 중 시스템이 멈춤. (복구하려면 싱글 유저 모드로 들어가야 하는 대공사 발생).
  2. 파일 간 불일치 (Sync 깨짐)
    • 사용자 정보는 /etc/passwd에만 있는 게 아님.
    • 비밀번호는 /etc/shadow, 그룹 비밀번호는 */etc/gshadow에 분산 저장됨.
    • 직접 수정하면 이 파일들 간의 연결 고리(Mapping)가 깨져서 계정이 꼬임.
  3. 파일 잠금(Locking) 부재
    • vi로 열고 있는 동안 시스템이 계정 정보를 업데이트하려 하면 충돌 발생. 데이터 손실 가능성 있음.

2. 정석 해결법: 전용 명령어 사용

리눅스는 안전하게 수정하라고 전용 도구를 만들어 둠. 이걸 쓰는 것이 국룰.

  • ID 변경: usermod -u [새UID] [사용자명]
  • 그룹 변경: groupmod -g [새GID] [그룹명]
  • 그룹 추가: usermod -aG [그룹명] [사용자명]
    -> 많이 사용하는 편
  • 장점: /etc/shadow, 홈 디렉터리 권한, 관련 그룹 정보까지 알아서 싹 다 맞춰줌.

사용자 아이디(이름) 자체를 pi 에서 andrew로 바꾸려면 -l (Login name) 옵션을 써야 함. 또한, 이름만 바꾸면 홈 디렉터리 이름은 그대로 남으므로 홈 디렉터리도 같이 이동시켜야 완벽함.

필수 전제 조건

로그인 중인 계정은 이름을 바꿀 수 없음.pi 계정을 수정하려면, pi에서 로그아웃하고 root다른 관리자 계정으로 로그인해야 함.


만약 진짜 u를 쓰고 싶다면?

진짜로 UID(식별 번호)를 바꾸고 싶은 경우라면 아래처럼 사용함.

Bash

sudo usermod -u 2000 andrew
  • 결과: andrew의 내부 ID 번호가 1000번에서 2000번으로 바뀜. (파일 소유권 문제 생길 수 있어 주의 필요).

라즈베리 파이의 Root 계정은 기본적으로 잠겨 있음(Locked). (비밀번호가 없어서 로그인 불가).

상황에 따라 두 가지 방법이 있음.

1. 터미널에서 잠시 Root 권한만 얻기 (가장 권장)

현재 계정(pi)에서 Root 쉘로 전환만 하는 방법. 가장 안전함.

Bash

sudo -i

  • 결과: 프롬프트가 $에서 #으로 바뀌며 Root 권한 획득.
  • 복귀: exit 입력하면 원래 계정으로 돌아옴.

2. 진짜 Root 계정 활성화 (비밀번호 설정)

로그인 화면에서 ID에 root를 입력하고 싶다면 비밀번호를 만들어야 함.

Bash

sudo passwd root
  • 새 비밀번호를 두 번 입력하면 활성화 완료.
  • 이제 모니터(HDMI)나 시리얼 연결 시 root로 로그인 가능.

3. SSH(원격)에서도 Root 로그인 허용하기

위 2번을 해도 SSH 접속은 기본적으로 차단되어 있음. 설정 파일을 고쳐야 함.

  • 비밀번호를 설정해도 /etc/ssh/sshd_config 파일에서 설정이 안되어있기 때문에 비밀번호를 입력해도 접속이 안되는 모습
  1. 설정 파일 열기:

    Bash

    sudo vi /etc/ssh/sshd_config
  1. 내용 수정:

    • PermitRootLogin 항목을 찾음 (보통 주석 # 처리 되어 있음).
    • 주석을 풀고 값을 yes로 변경.

    Ini, TOML

    #PermitRootLogin prohibit-password
    
    PermitRootLogin yes

  2. SSH 재시작:

    Bash

    sudo systemctl restart ssh

⚠️ 보안 경고

Root 계정 원격 접속 허용은 해킹 1순위 타겟이 됨.
가능하면 1번 방법(sudo -i)을 사용하고, 외부 인터넷에 연결된 기기라면 3번은 절대 하지 말 것.


root 계정을 다시 잠그려면 비밀번호를 잠금(Lock) 상태로 만들면 됩니다.

1. 계정 잠그기 (명령어 한 줄)

터미널에 아래 명령어를 입력하세요.

Bash

sudo passwd -l root
  • l (Lock): 비밀번호를 무효화하여 잠급니다.
  • 결과: 이제 로그인 화면이나 터미널에서 root로 로그인이 거부됩니다.
  • 참고: sudo -i를 통한 루트 권한 획득은 여전히 가능합니다 (이건 관리자 기능이라 정상임).


2. SSH 설정 되돌리기 (수정했다면 필수)

만약 아까 /etc/ssh/sshd_config에서 원격 접속을 허용(yes)했다면, 다시 막아야 안전합니다.

  1. 파일 열기:Bash

    sudo vi /etc/ssh/sshd_config
  2. 수정:

    • PermitRootLogin yesPermitRootLogin prohibit-password (또는 no)로 변경.
    • 혹은 해당 줄 맨 앞에 #을 붙여서 주석 처리 (기본값으로 돌아감).
  3. 적용:Bash

    sudo systemctl restart ssh

다시 원상복구 해놨다.


두 가지 방법이 있음. adduser를 쓰는 것이 훨씬 편하고 강력함.

1. 쉬운 방법: adduser (추천)

우분투/라즈베리 파이 같은 데비안 계열에서 쓰는 대화형 명령어. 알아서 홈 폴더 만들고, 쉘 설정하고, 비밀번호까지 물어봐줌.

Bash

sudo adduser [새사용자명]
  • 동작: /home/[새사용자명] 자동 생성 + 기본 설정 파일(.bashrc 등) 자동 복사.
  • 장점: 그냥 시키는 대로 입력만 하면 끝남.


2. 정석 방법: useradd -m (옵션 필수)

리눅스 표준 명령어. 옵션 없이 쓰면 홈 폴더를 안 만듦. 반드시 -m 옵션을 붙여야 함.

Bash

sudo useradd -m [새사용자명]
  • m (Make home): 홈 디렉터리를 생성하라는 옵션.
  • 주의: 이 명령어는 비밀번호를 안 물어봄. 생성 후 sudo passwd [새사용자명]으로 비번을 따로 설정해줘야 함.

요약

  • 사람이 할 때: sudo adduser newuser (편함)
  • 스크립트 짤 때: sudo useradd -m newuser (깔끔함)
profile
임베디드 개발자가 되기 위해 공부중입니다!

0개의 댓글