2025. 9. 8. 13:57ㆍ개발/리눅스
Permission Denied 에러 마주치는 경우
- 무지성으로 sudo 를 붙이게 되면, 에러를 디버깅할 때 어느 순간 발목이 붙잡히게 된다.
- 그러니 에러 원인과 해결방법을 알아야 한다.
사용자(user), 슈퍼 사용자(super user)란?
✅ 컴퓨터에 생성되어 있는 모든 사용자 계정 조회하기
$ cat /etc/passwd
✅ 리눅스에서의 사용자 유형
리눅스에서 사용자 유형은 크게 3가지 종류로 나뉜다.
- 슈퍼 사용자 (관리자) : 시스템의 모든 권한을 가진 계정
- 어떠한 제한도 없이 모든 명령어를 실행시킬 수 있으며 모든 파일을 조작할 수 있다.(안전을 위헤, 평소에는 일반사용자 계정을 사용하는 것을 추천한다.)
- 일반적으로 root 계정이 슈퍼 사용자로 설정되어 있다.
- 일반 사용자
- 권한이 허용된 명령어만 실행시킬 수 있고, 권한이 허용된 파일만 조작할 수 있다.
- 실수로 중요한 시스템 파일을 지우는 것이 불가능하다.
- ex) ubuntu
- 시스템 사용자
- 위 그림에 root와 ubuntu를 제외한 사용자명들이 모두 시스템 사용자이다.
✅ 다른 사용자로 접속하려면 어떻게 할까?
- whoami는 현재 사용자를 확인한다.
- sudo su는 root계정으로 전환한다.
- su ubuntu(사용자명)은 해당 사용자계정으로 전환한다.
그룹(group)이란?
✅ 그룹(group)이란?
리눅스에서 **그룹(group)**이란 사용자 계정을 묶어서 관리하기 위한 단위이다. 여러 사용자에게 공통된 권한을 한 번에 부여하고 관리할 때 유용하게 사용된다.
✅ 그룹(group)의 특징
- 한 사용자(user)는 무조건 하나의 그룹(group)에 속해야 한다.
- 한 사용자(user)는 여러 그룹(group)에 속할 수 있다.
# groups [사용자명]
$ groups ubuntu
ubuntu : ubuntu adm cdrom sudo dip lxd
$ groups root
root : root
- ubuntu는 ubuntu그룹에 속해 있고 root는 root그룹에 속해 있다는 것만 알아두자.
권한(Permission)이란?
- 권한(Permission)을 활용하면 특정 사용자에 대해서만 특정 파일 또는 디렉터리에 접근할 수 있게 만들 수 있다.
✅ 권한(Permission) 확인 방법
- 파란색 박스는 소유자, 녹색 박스는 소유자 그룹이다.
- 그 다음 빨간색 박스를 보자. 빨간색 박스의 값은 아래와 같이 총 10글자로 이루어져 있다. 여기서 각 문자는 의미를 가지고 있다.
- 1번째 글자 : 파일 유형(File Type)을 의미
- - : 일반 파일
- d : 디렉터리
- l : 심볼링 링크를 의미한다. (심볼릭 링크가 뭔지 아직 알 필요 없다.)
- 2~4번째 글자 : 소유자에게 허용된 권한을 의미
[일반 파일인 경우]
- r(read) : 파일을 읽을 수 있다. (= 파일 내부 내용 확인 가능)
- w(write) : 파일을 수정할 수 있다.
- x(execute) : 파일을 실행할 수 있다. (실행 파일 또는 쉘 스크립트인 경우)
- 권한을 r, w, x의 순서로 표시한다. 해당 권한이 없을 경우 -로 표시한다.
[디렉터리인 경우]
- r : 디렉터리 내부 파일 조회(ls)가 가능하다.
- w : 디렉터리 내부에 파일을 생성/삭제할 수 있다.
- x : 디렉터리 내부로 접근(cd)할 수 있다.
** 디렉터리 내부의 파일을 생성/삭제(w)하려면 접근 권한(x)이 필수다. 그러다보니 대부분의 경우에는 디렉터리에 w 권한을 부여하고 싶다면 x 권한도 같이 부여하는 편이다.
3. 5~7번째 글자 : 소유 그룹에게 허용된 권한을 의미
- (2번의 내용과 동일)
4. 8~10번째 글자 : 그 외의 사용자에 허용된 권한을 의미 ** 그 외의 사용자 : 소유자도 아니고, 소유 그룹에 속하지도 않은 사용자인 경우
- (2번의 내용과 동일)
[실습] 왜 Permission Denied 에러가 발생하는 지 원인 분석해보기
- 소유자(파란 박스)가 root이고, 소유 그룹(초록 박스)이 root이다.
- 빨간 박스의 10글자 분석
- d : 파일 유형이 디렉터리이다.
- rwx : 소유자(root)는 디렉터리에 대해 rwx 권한(= 모든 권한)을 가지고 있다.
- --- : 소유 그룹(root)은 디렉터리에 대해 아무 권한을 가지고 있지 않다.
- --- : 그 외의 사용자(root 사용자도 아니고, root 그룹에도 속하지 않는 사용자)도 디렉터리에 대해 아무 권한을 가지고 있지 않다.
$ ls amazon # (amazon 폴더의 디렉터리 내부 파일을 조회)
# ubuntu 사용자 입장에서 r 권한이 없어서 조회가 안 됨
$ cd amazon # ubuntu 사용자 입장에서 x 권한이 없어서 접근이 안 됨
# 디렉터리에 접근 자체를 못하니 디렉터리 내부 파일을 생성/삭제도 당연히 못 함
$ sudo su # root로 사용자 변경
$ ls amazon # root 사용자 입장에서 r 권한이 있어서 조회 가능
$ cd amazon # root 사용자 입장에서 x 권한이 있어서 접근 가능
$ touch testfile # root 사용자 입장에서 w 권한이 있어서 파일 생성 가능
$ ls # 파일 생성됐는 지 확인
$ su ubuntu # ubuntu로 사용자 변경
권한 변경하는 방법 (chmod)
- $ chmod 777 [파일명] # rwxrwxrwx 권한 부
- $ chmod 644 [파일명] # rw-r--r-- 권한 부여
- $ chmod 755 [파일명] # rwxrw-rw- 권한 부여
[실습] 보안을 위해 파일 접근 권한 제한하기
- r--r--r-- 권한을 부여하고 vi로 확인해서 수정이 안되는 지 확인한다.
touch myfile.txt
chmod 444 myfile.txt
vi myfile.txt
i # insertmode
수정 후 esc
:wq => readonly mode is set
:q => ! 여부
:q!
어떠한 제약도 없이 모든 기능을 사용할 수 있는 관리자 권한 (sudo)
✅ root 사용자로 로그인 vs sudo 명령어 활용
어떤 명령어를 실행시켰을 때Permission denied라는 에러 메시지를 만났다면 권한이 부족하다는 뜻이라는 걸 알았다. 이를 쉽게 해결하는 방법으로 크게 2가지를 배웠다.
- 슈퍼 사용자(root 사용자)로 접근해서 명령어 실행
- $ sudo su # root 사용자로 전환
- 명령어 앞에 sudo를 붙여서 명령어 실행
- $ sudo [실행시키고자 하는 명령어]
첫 번째 방법이 root 사용자로 아예 전환해서 명령어를 실행시키는 것이기 때문에, 명령어를 입력할 때마다sudo를 붙이지 않아도 된다는 편리함이 있다. 두 번째 방법은 권한이 필요할 때마다 sudo를 매번 붙여야 된다는 게 불편하다. 그래서 첫 번째 방법이 편해보인다.
하지만 root 사용자로 아예 전환해서 명령어를 조작하다보면 실수로 시스템에 치명적인 명령어를 입력해 시스템이 손상될 수도 있다. 그래서 일반 사용자로 명령어를 입력하다가, 정말 권한이 필요한 명령어에 한해서만 sudo를 붙여 사용하는 방식을 권장한다.
'개발 > 리눅스' 카테고리의 다른 글
파일을 작성/조회할 때 자주 사용하는 명령어 (0) | 2025.09.06 |
---|---|
필수로 꼭 알아야 하는 기본 명령어 (0) | 2025.09.05 |
리눅스 기본 개념 / 리눅스 실습 환경 구축 (0) | 2025.09.02 |