서론
ELITE HACKER Bootcamp 3rd 1주차 수업 공부 내용
aws 우분투 서버 하나 파서 연습
ls, 권한, user, group, other, chmod
유저 생성, 유저 삭제
그룹 생성, 그룹 삭제
그룹 변경
권한 부여, 권한 삭제, 그룹 권한 명령어 등
ls -l
ls 는 현재 디렉터리의 파일목록을 보여주고 -l 속성으로 인해 파일들의 권한 등의 상태를 더 자세히 보여주게 된다
자세한 건
2024.11.04 - [KnockOn] - [KnockOn] Linux/Ubuntu 운영체제 명령어 -1
여기에서 ls에 관련된 내용이 있을 것이다.
여기 나오는
-rw-rw-r-- 1 ubuntu ubuntu 9 Nov 6 16:41 c
이거에 한 번 자세히 알아보자.
권한
리눅스 파일 시스템의 권한은 세 가지 기호로 표시되며, 각각 파일에 대한 액세스 권한을 나타낸다.
w : 쓰기 권한(write)
r : 읽기 권한(read)
x : 실행권한(execute)
이렇게 보았을 때, d의 권한을 확인하려고 보면
lrwxrwxrwx
맨 앞에 l을 제외하고 (파일 특징, l은 심볼릭, -은 일반 파일, d는 디렉터리) 앞에서부터 3개만 보면 읽기 쓰기 실행 권한이 전부다 있는 것을 확인할 수 있다.
c의 권한은?
-rw-rw-r--
일반파일이고 읽기 쓰기 권한은 있는데 실행권한인 x가 있어야할 곳에 -로 표시되어 이는 실행권한이 없음을 의미한다.
근데 보면 rwx 권한 입력하는 곳이 총 3번 반복하여 맨 앞에 파일 특성을 나타내는 거 포함해서 10개로 표시된다.
그러면 처음 rwx 두번째 rwx 세번째 rwx의 권한은 각각 누구것이냐?를 이제부터 알아야한다.
첫 번째는 user 권한, 즉 파일 또는 디렉터리의 소유자를 의미한다. 파일을 만든 사용자 계정일 가능성이 크다.
두 번째는 group권한, 여러 사용자 계정을 하나로 묶어 관리하는 방식인데, 같은 그룹에 속한 사용자들은 파일과 디렉터리에 대해 동일한 권한을 가질 수 있다.
마지막 세 번째는 other 권한, 외부 사용자이다.
즉 다시 -rw-rw-r--을 해석해보자면
user는 읽기 쓰기 권한이 있고, group도 읽기 쓰기 권한도 있고, 나머지 사람들은 읽기 권한만 있다는 것이다.
이것을 숫자로 표시해보자.
rwx rwx rwx 각각 0, 1로 표현할 수 있다.(이진법)으로, 읽기 권한이 있으면 1, 읽기 권한이 없으면 0으로 표시한다면
-rw-rw-r--을 이진수로 표시를 한다면
-110 110 100 으로 표시할 수 있다. 이를 다시 십진수로 표현하게 된다면? 664로 표현할 수 있다.
이렇게 권한을 숫자로 표현할 수 있게 되었다.
만약에 파일에 755 권한이 있다는 것은?
111 101 101 -> rwx r-x r-x 라는 의미니까, user는 모든 권한을 다 가지고 있고, group와 other은 쓰기 권한을 제외한 나머지 권한들을 가지고 있다.
chmod
change mode 라고 해서 권한을 바꿔주는 명령어이다.
이것도 이제 위에 처럼 숫자 표기 방식이 있고, u+x 처럼 기호 표기 방식이 있다.
(1) 숫자 표기 방식
숫자를 이용해서 파일의 권한을 바꾸는 것이다.
chmod 777 c
숫자로 777은 모든 애들한테 읽기 쓰기 실행 권한을 다 준다는 의미가 되니 rwxrwxrwx로 c가 바뀐 것을 확인할 수 있다. 다시 이제 user만 읽기 권한만 있고 나머지 애들은 모든 권한이 없게 설정하려면?
chmod 400 c
이렇게 읽기 권한만 잘 남게 되었다.
(2) 기호 표기 방식
이번엔 기호를 이용한다. u+x 이런식으로 이용하게 되는데, 각각
- u : user에게
- g : group에게
- o : other에게
- + : 권한을 추가하라
- - : 권한을 빼라
- = : 권한을 정확히 설정하라
- r : 읽기 권한을
- w : 쓰기 권한을
- x : 실행 권한을
이거를 잘 조합하는 건데, 현재 c의 권한은 user에게 읽기 권한만 있으니까, group에게 읽기 권한을 부여해주고 싶다면
chmod g+r c
를 이용해 주면 될 것이고
여기에 user에게 실행권한도 넣어주고 싶다면
chmod u+x c
이렇게 사용할 수 있을 것이다. 만약 저상태에서 user에게 그냥 쓰기 권한만 주고 싶다면... u-r, u-x, u+w 할 수도 있지만 정확히 설정하려면
chmod u=w c
딱 쓰기 권한만 설정되었다.
chmod u=rwx c
이렇게 동시에 설정도 가능!
chown
change ownership 주인을 바꾼다?
파일이나 디렉터리의 소유자 및 소유 그룹을 변경하는 데 사용된다. 지금은 user나 group이 ubuntu 하나밖에 없어서... 유저, 그룹 생성 삭제 하는 법 부터 알아보고 저것을 사용해보도록 하자.
예시를 들자면 일단
chown [소유자][:소유 그룹] 대상
이렇게 사용을 하며
chown user1 file.txt
chown user1:group1 file.txt
이런식으로 사용을 한다.
유저 생성/삭제
(1) 새로운 유저 생성
sudo adduser username
그래서 내가 seo 라는 유저를 생성하고 싶다면?
sudo adduser seo
하면 막 맨 밑에 full name 부터 룸넘버, 폰 번호 이런 거 물어보는데 그냥 엔터로 넣어둬도 된다고 한다. 유저 식별할 때 쓰는거라고...회사 같은 곳에서 사용하나 보다.
이제 유저가 생성됐는지 알아야하니까 저번에 /etc/passwd에 유저 정보가 있다고 했으니 생성되었는지 확인해보자
sudo cat /etc/passwd
맨 밑에 줄에 생성이 되어있고, 현재 seo 계정의 그룹은 seo에 있는 것으로 알 수 있다.
그리고 cd ..로 이동하면 /home 디렉터리에 seo 라는 작업 환경이 생겼을 것이고, seo의 작업장은 현재 seo는 모든 권한, 그리고 그룹은 쓰기 빼고, 나머지는 모든 권한이 없기에, 현재 나는 ubuntu 로 로그인하고 있으니까, 이 상태에서 cd seo를 하면 권한이 없다고 나올 것이다.
adduser을 사용하면 사용자 저렇게 다 생성이 됐지만, useradd로 해버리면 비밀번호는 따로 설정해야하는 경우가 생긴다.
sudo useradd -m username #-m으로 홈디렉터리 생성
sudo passwd username #비밀번호 생성
#그래서 adduser 사용하기를 권장
(2) 유저 삭제 삭제
아까 유저를 생성할 때는 adduser 을 사용해서 간편하게 하거나, useradd로 조금 복잡하게 세세하게 설정하거나..였는데 이번에도 마찬가지 로 deluser 와 userdel이 있다.
sudo deluser seo
를 하게 되면 seo 라는 유저는 삭제될 것이다
근데 seo의 홈디렉터리는 위에 보면 seo는 분명 삭제되어있는데 홈디렉터리는 남아있다.
저것을 한 번에 삭제하기 위해서는
sudo deluser --remove-home seo
이를 통해서 홈디렉터리를 같이 삭제해줬어야 한다. 물론 그냥 현재에서 rm -rf seo하는 방법도 있긴 하다.
--remove-home을 사용하여 홈디렉터리까지 같이 지울 수 있었다.
userdel도 있는데 얘는
sudo userdel -r username # -r 속성으로 홈디렉터리 제거
이렇게 사용할 수 있으나, deluser보다 저수준의 명령어이다.
다시 user seo를 하나 만든 상태에서, 유저 전환을 해보자.
su - seo
su는 현재 사용자 세션을 다른 사용자 계정의 세션으로 전환할 때 사용되고, - 가 중간에 들어간 것은 로그인 셸 환경을 초기화하여 사용자가 지정한 계정으로 완전히 전환하도록 한다.
유저 전환이 잘 되었고, 본인이 누구인지 확인해보려면
whoami
를 명령어를 입력하면 된다.
whoami vs who
whoami는 현재 명령어를 실행하고 있는 사용자의 계정 이름만 출력하고, who는 현재 시스템에 로그인한 모든 사용자와 그들의 접속 정보를 나열한다.
그룹 생성/삭제
(1) 그룹 생성
그룹 생성하는 것은 groupadd으로 진행한다.
sudo groupadd seogroup
그다음, 그룹이 실제로 생성됐는지 확인하려면 /etc/group을 확인해보면 된다
cat /etc/group
seogroup가 잘 생성된 것을 확인할 수 있다.
(2) 그룹 삭제
sudo groupdel seogroup
하면 seogroup가 지워진다
사라진 것을 확인할 수 있다.
유저 그룹 변경
우선 사용자가 속한 그룹부터 알아보자.
groups "사용자명"
이제 그룹을 변경해볼까?
sudo usermod [속성] [그룹이름] [유저]
그룹을 변경할 때, 기존 그룹까지 싹다 보내버릴려면, -g 속성을 사용하고, 보조 그룹에 추가를 하려면 -aG 속성을 사용한다
다시 정리하자면 -g는 기본 그룹 , -G는 보조 그룹을 관리한다
그래서 seo라는 유저를 첫번재로, ubuntu 라는 그룹에 넣어보자.
sudo usermod -aG ubuntu seo
groups seo
seo 라는 유저는 기존 seo 그룹과 ubuntu를 동시에 가진 그룹이 되었다.
이제는 -g 로 아예 기본그룹을 바꿔보자.
sudo usermod -g seogroup seo
기존 seo에서 seogroup은 남아있고 보조그룹인 ubuntu는 아직 남아있다.
sudo usermod -G "" seo
로 보조그룹을 재설정하여 없앨 수 있다. -G로 보조그룹 재 설정이고, -aG는 보조그룹에 추가...이런 느낌.
chown vs usermod
이제 그룹까지 생성하고 이것저것 알았으니 둘의 차이점을 확인하고 chown 실습을 한 번 해보자.
일단 usermod는 사용자의 그룹을 변경하거나 보조그룹에 추가하는 거였다.
그렇다면 chown은 무엇인가?
파일 및 디렉터리 소유권을 변경하는 것이다. 사용자가 아닌 파일의 소유자나 그룹을 다른 사용자나 그룹으로 변경할 때 사용한다.
sudo chown user:group filename
으로 사용하는데,
c라는 파일의 소유자를 seo로, 파일의 그룹을 seogroup으로 바꿔보자.
sudo chown seo:seogroup c
기존 ubuntu ubuntu 였던 게 seo seogroup으로 바뀌었다.
그러면 저 c라는 파일은 그룹한테는 읽기 권한만 있고 쓰기권한은 주어지지 않아지고 있고, other들은 읽기 조차 불가능하다. ubuntu로 접속해있지만 저 파일은 읽기/쓰기/실행 권한이 아무것도 없기에, cat c를 하면 아마 권한이 없다고 뜰 것이다.
ubuntu는 기본이었으니까, 여기에 뭔가 작업하기는 좀 그렇고, guest라는 user를 하나 새로 만든다음에, group에 넣고, su - guest로 접근한다음에 해당 파일을 읽을 수 있는지 확인해보자.
sudo adduser guest
sudo usermod -aG seogroup guest
sudo usermod -aG ubuntu guest #ubuntu 디렉터리에 접근하기 위한 권한
su - guest
cd ..
cd ubuntu
cat c
하니까 guest로도 이제 파일을 읽을 수가 있다.
근데 저 guest에서 sudo 명령어를 써보자. 안 된다.
권한이 없다고 뜬다. 일단 exit로 guest 터미널 탈출하자.
유저 sudo 권한 관리
권한부여하는 부분은 이전글 여기서 sudo 파트에서 확인할 수 있다.
2024.11.05 - [KnockOn] - [KnockOn] Linux/Ubuntu 운영체제 명령어 -2
유저들의 권한은 /etc/sudoers에서 관리 되고 있으며, 여기에서
guest ALL=(ALL:ALL) ALL
이런식으로 작성하여 sudo 권한을 줄 수 있다. 좀 자세히 살펴보면
guest 에게
ALL: 모든 호스트에서 이 규칙이 적용됨을 의미
(ALL:ALL): 모든 사용자 및 모든 그룹의 권한을 사용하여 명령어를 실행할 수 있음을 의미.
ALL: 모든 명령어를 실행할 수 있음을 의미.
인데...
구조를 다시 보자면
user/alias host=(runas_user:runas_group) command1, command2, ...
host=(유저:그룹) 명령어들...
이렇게 되는 것이다.
이렇게 설정해주고, 다시 guest로 로그인해서, sudo /etc/sudoers을 해보자.
su - guest
sudo cat /etc/sudoers
잘 나오는 것을 확인할 수 있다.
도전
이제 지금까지 배운 것을 가지고 다음 문제들을 풀어보자.
1. knockon이라는 user생성
sudo adduser knockon
2. knockon이라는 user의 shell로 접속
su - knockon
3. guest에서는 접근이 가능하고, knockon유저에서는 접근할 수 없는 파일 작성
이걸 할려면, 일단 guest는 guest그룹을 만들어놓고, 여기에 누구나 일단 접근 가능한 홈디렉터리로 권한을 부여한다. 그 다음에, guest 소유자, guest 그룹의 파일을 하나 만들어놓고, guest에게는 권한이 있으나, knockon(other)에게는 권한이 아예 없는 파일을 만들어보자.
cd ..
sudo chmod 777 guest
cd guest
touch a.txt #파일 생성
nano a.txt #글 작성
하고,
sudo chmod 660 a.txt
sudo chown guest:guest a.txt
4. 특정 그룹에서만 접근 가능한 디렉토리 생성
seogroup인 사람들만 접근할 수 있게 하자.
mkdir b
chmod 070 b
sudo chown guest:seogroup b
이제 이론상 ubuntu로도 접근 안 되고, seo 계정만 접근이 가능할 것이다.
우분투로는 접근 실패했고
seo로는 접근 성공했다.
5. 특정 그룹에서만 사용 가능한 명령어 만들기
기본적인 명령어는 /bin에 저장이 되고, 사용자들의 명령어는 /usr/local/bin에 저장이 된다.
2024.11.07 - [KnockOn] - [KnockOn] Linux/Ubuntu Symbolic Link
2024.11.06 - [KnockOn] - [KnockOn] Linux/Ubuntu 리눅스 디렉터리 구조
그렇기에, 이제 우리가 할 것은 /usr/local/bin에 가서 명령어 만들고 그거 파일의 권한을 seogroup으로 바꿔주고, 실행권한도 그룹만 되게 070으로 바꿔주면 된다.
cd /usr/local/bin
sudo touch seominjae
sudo nano seominjae #명령어 작성
으로 파일만들어주고
sudo chmod 750 seominjae
sudo chown seo:seogroup seominjae
하고
ubuntu계정에서 seominjae를 입력해보자. 실행권한이 없다고 뜬다.
이제 그러고 guest한테 seogroup 권한을 주고 실행시켜보면?
신기한게, 070으로 처음에 부여했었는데, seo 당사자도 실행이 안 되었다;;
그래서 750으로 넣어주고 guest로 넘어간건데 이건 됐다. 다시 070으로 바꾸고 guest로 가니까 이건 실행된다.
아무래도 소유자 권한이 그룹보다 더 강한 것 같다.
'KnockOn' 카테고리의 다른 글
[KnockOn] Linux/Ubuntu SSH, NC (0) | 2024.11.07 |
---|---|
[KnockOn] Linux/Ubuntu 방화벽, ufw (1) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 운영체제의 패키지 (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu Symbolic Link (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 리눅스 디렉터리 구조 (1) | 2024.11.06 |