Linux Permission

리눅스는 여러 사용자가 접근이 가능한 OS 입니다.

그래서 접근제어가 중요하며 파일 및 폴더에 대한 Permission 중요합니다

오늘은 평소에 사용하는 chmod 사용시 부여하는 ex) 755 숫자에 대하여 알아보겠습니다.

Permission ?

파일의 Permission 종류에는 기본적으로 아래와 같이 3개의 종류가 있고, 파일에 대한 접근 권한은 이들의 조합으로 결정됩니다. 동일한 Permission 파일에 적용될 때와 디렉토리에 적용될 때에 일반적인 의미는 같지만 실제 적용되어 나타나는 결과적인 의미는 다릅니다. (아래표 참조)

Permission 의미를 알기 위해서는 2 진수, 8진수 관계를 알아야 합니다 아래의 표를 봅니다.

맨 왼쪽은 디렉토리라 d 표시되며, 파일이면 – 표현됩니다.

d를 제외한 세칸씩 나누어 소유자 / 그룹 / 다른 사람들로 나뉘어 집니다.

  • 소유자: 파일이나 디렉토리를 처음 만들거나 소유권을 가진 사람
  • 그룹: 사용자가 속한 그룹 및 그 그룹에 포함된 사람들
  • 다른 사람들(Other): 소유자 및 그룹에 속해있지 않은 사람들

umask ?

umask 유틸은 파일이나 디렉토리 생성 시 Permission에 영향을 줍니다.
기본값은 022이며 관련 파일은 /etc/login.defs 확인 가능 합니다.

umask가 적용되지 않았을때, 파일은 0666, 디렉토리는 0777 권한으로 생성되지만 기본적으로 022 가 적용 되어있어 파일은 644 디렉토리는 755로 적용됩니다.

특수권한 ?

위에 표를 보면 세 자리의 숫자로 표현하였지만 정확히는 네 자리의 숫자입니다 (ex0777)

  • setUID, setGID, Sticky Bit  총 3가지 특수 권한이 있고, 모두 실행 권한에 관련되어 있습니다.
  • setUID를 파일에 설정하면 user 권한에 x대신 s가 들어갑니다.
  • setGID를 파일에 설정하면 group 권한에 x대신 s가 들어갑니다.
  • Sticky Bit를 파일에 설정하면 other 권한에 x대신 t가 들어갑니다.

https://it-serial.tistory.com/entry/Linux-%ED%8A%B9%EC%88%98-%EA%B6%8C%ED%95%9C-%E2%91%A1-setUID-setGID-Sticky-Bit-%ED%8C%8C%EC%9D%BC-%EC%86%8D%EC%84%B1chattr <=관련 링크입니다.

요약하자면 아래와 같습니다.

setUID

  • 해당 파일 소유자의 권한을 잠시 사용합니다 (ex) 일반 계정이 root 소유 파일 들어가서 수정 및 저장이 가능합니다.)
  •  설정을 잘못하면 굉장히 보안상 위험하므로 설정시에 유의해야합니다.
권한 주는 법

# chmod 4000 [파일명]

# chmod u+s [파일명] (제거 # chmod u-s [파일명])

setGID

  • 해당 파일의 그룹 권한을 잠시 사용합니다.
  • 디렉토리에 setGID를 설정하게 되면 내부에 파일들도(새로 만들어도) 모두 setGID가 적용됩니다. (setUID는 불가능 합니다. 유닉스 계열에서 파일의 소유자를 바꾸는 것은 관리자인 root만 가능하게 설정되어 있기 때문입니다.)

실습

  • 본 실습은 AWS 의 EC2로 Test 하며, 환경 구축은 테라폼으로 하였습니다. (환경은 편하신 대로 하시면 됩니다.)
  • WSL 활용하였습니다.
  • 목표: Permission 실습 및 테라폼 숙달

# AWS 프로바이더 설정 및 ap-northeast-2(서울) 리전 사용
provider "aws" {
  region = "ap-northeast-2"
}

# 보안 그룹 생성(t101sg라는 이름으로)
resource "aws_security_group" "instance" {
  name = "t101sg"


  # 인바운드 규칙 설정(two)
  # SSH 접속을 위한 인바운드 규칙 (포트 22 개방)
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# AWS EC2 인스턴스 생성
resource "aws_instance" "example" {
  ami                    = "ami-0c9c942bd7bf113a2"       # 사용할 인스턴스 이미지 ID 설정
  instance_type          = "t2.micro"                   # 인스턴스 유형 설정
  subnet_id              = "subnet-07fa4fc702e8b566b"             # 사용할 서브넷 ID 설정
  private_ip             = "172.31.0.100"               # 인스턴스의 사설 IP 설정
  key_name               = "minho-wp"                  # Key Pair 설정  , 각자 자신껄로 설정!
  vpc_security_group_ids = [aws_security_group.instance.id] # 생성한 보안 그룹 연결 설정


  # 인스턴스에 태그(Name = Single-WebSrv) 추가
  tags = {
    Name = "Single-WebSrv"
  }
}

# 고정 IP(Elastic IP) 생성 및 인스턴스에 연결
resource "aws_eip" "myeip" {
  instance = aws_instance.example.id       # 인스턴스 연결 설정 / aws_instance라는 Terraform 리소스를 생성하면, 해당 인스턴스의 ID는 .id를 통해 도출할 수 있습니다.
  associate_with_private_ip = "172.31.0.100"        # 사설 IP와 연관 설정
}

# 생성된 인스턴스의 고정 IP 출력
resource "null_resource" "echomyeip" {
  provisioner "remote-exec" {
		#연결
    connection {
			#고정 퍼블릭 ip로 연결
      host = aws_eip.myeip.public_ip
      type = "ssh"
      user = "ubuntu"
      private_key =  file("/home/minho/AWS_pem/min.pem")    # 사설 키에 대한 경로 설정  , 각자 자신들의 경로 

    }
		#원격 서버에서 실행할 명령을 정의
    inline = [
			#EIP(Elastic IP)의 public IP 주소를 출력하는 작업을 수행
      "echo ${aws_eip.myeip.public_ip}"
      ]
  }
}

# 인스턴스의 공인 IP 출력
output "public_ip" {
  value       = aws_instance.example.public_ip
  description = "The public IP of the Instance"
}

# 인스턴스의 고정 IP 출력
output "eip" {
  value       = aws_eip.myeip.public_ip
  description = "The EIP of the Instance"
}

ㄴ생성 확인합니다.

#Test 폴더 생성 
mkdir test && cd test
#기본 umask 확인
root@ip-172-31-0-100:/home/ubuntu/test# umask 
0022

#테스트 파일 생성 및 권한 확인 
root@ip-172-31-0-100:/home/ubuntu/test# touch tes && ls -al
total 8
drwxr-xr-x 2 root   root   4096 Jul 19 17:19 .
drwxr-x--- 5 ubuntu ubuntu 4096 Jul 19 17:18 ..
-rw-r--r-- 1 root   root      0 Jul 19 17:19 tes <- 644 확인 

파일 생성시 664로 해보자

#파일은 기본이 666임으로 002 줍니다.
root@ip-172-31-0-100:/home/ubuntu/test# umask 002
root@ip-172-31-0-100:/home/ubuntu/test# umask 
0002  <-확인

root@ip-172-31-0-100:/home/ubuntu/test# touch ab && ls -al
total 8
drwxr-xr-x 2 root   root   4096 Jul 19 17:25 .
drwxr-x--- 5 ubuntu ubuntu 4096 Jul 19 17:18 ..
-rw-rw-r-- 1 root   root      0 Jul 19 17:25 ab  <-644 확인 완료 

실습 완료 하였으면 terraform destroy -auto-approve 삭제합니다

추가로 저의 NAVER 블로그의 허가권 부분도 있으니 참고 부탁드리겠습니다.

감사합니다.

https://blog.naver.com/sjmtomm/222243062754

위로 스크롤