블로그 이전했습니다. https://jeongzero.oopy.io/
리눅스 특수권한이란?
본문 바로가기
보안/Linux

리눅스 특수권한이란?

728x90

저번에 리눅스에서 사용하는 권한에 관련하여 글을 작성하였다. 오늘은 저번 시간에 이어 기본 권한이 아닌 특수권한에 대해서 설명하겠다. 만약 권한에 대해서 잘 모르는 사람은 밑에 게시글을 먼저 보고오기를 추천한다.



리눅스 권한이란?


https://wogh8732.tistory.com/73




특수권한이라고 해서 크게 다를껀 없다.





위 그림을 보면 총 9자리로 소유자 , 그룹, 다른 사용자 들에 대한 3 권한을 볼 수 가 있다. 근데 노란색 박스를 자세히 보면 소유자의 권한 부분이 조금 다르게 표시되어 있다.


rws r-x r-x



소유자의 권한 부분에서 이 s가 의미하는 것이 바로 특수한 권한을 의미한다. 소유자, 그룹, 다른 사용자에  대한 권한에 중 어떤 자리에 특정한 문자가 들어가면 특수권한이라고 하는데 여기서 말하는 s가 바로 그것이다.


이 특정 문자가 어디에 위치하냐에 따라 그 용도가 달라진다.






1. 소유자 관련 권한 부분  : SetUID

 

소유자만이 접근 가능한 파일을 일반 유저도 접근할 필요가 있을 때 사용한다. 소유자의 권한을 잠시 빌려오는 개념인대


쉽게 설명하면 다음과 같다.


만약 우리집에 들어가려면 경비실 아저씨에게 이 집의 주인이 바로 저에요 ~~~ 라고 말하고 확인을 받아야지만 집으로 들어갈 수 있다. 


다른 사람이 우리집에 들어오려면 경비실 아저씨는 너 이 집 주인 아니자나 못들어가 꺼져~ . 즉 입 밴을 당하게 된다. 


하지만 만약 내가 중요한 미팅을 앞두고 있는 상태에서 발표 자료를 집에 두고 왔다고 가정해보자. 


나는 부리나케 전화를 걸어 친구에게 내 집에서 자료좀 가져다주라 경비아저씨에게 말해 놓을게! 라고 우리 집으로 들어갈 수 있는 권한을 잠시 부여해 주면, 나는 친구 집으로 들어갈 수 있게 된다.


바로 이러한 개념처럼 원래는 접근하지 못하지만 SetUID를 설정하면 일반 사용자도 해당 파일에 접근이 가능하게 된다.


즉 정리를 하자면 User 권한의 접근권한(x) 자리에 x대신 s가 들어가면 이를 SetUID라 칭한다. 만약 s가 아니라 대문자 S가 들어가면 이는 일반 권한의 - 처럼 접근 권한 없음 과 같은 의미이다.


권한을 읽을 땐 맨 앞에 숫자 4를 붙여서 읽는다.


ex) rws r-x r-x = 4755





2. 소유 그룹 관련 권한 부분 : SetGID


위와 같이 소유 그룹만 접근 가능한 파일에 일반 유저로 접근이 필요 할 때 사용한다.


그룹 권한의 접근 권한(x) 자리에 x대신 S가 들어가면 이를 SetGID라고 한다.


만약 s대신 S가 들어가면 - 과 같은 의미인 접근 권한 없음을 의미한다.


권한을 읽을 땐 맨 앞에 숫자 2를 붙여서 읽는다.


ex) rwx rws rwx = 2777





3. Sticky bit


Sticky bit란 특정 디렉토리를 누구나 자유롭게 사용할 수 있도록 하는 것을 말한다.


파일 및 디렉토리 생성은 누구나 가능하지만, 삭제는 생성한 유저와 디렉토리 소유자만 가능하다.


일반 사용자 권한의 접근 권한(x)자리에 x대신 t가 들어가면 이를 Sticky bit라 한다.


만약 t대신 T가 들어가면 이는 일반 권한의 - 과 같은 의미인 접근 권한 없음을 뜻한다.


권한을 읽을 땐 맨 앞에 숫자 1을 붙여서 읽는다.


ex) rwx rwx rwt = 1777




다음은 리눅스 특수 권한에 관련한 문제이다. 이론적으로 공부를 하는 것도 좋지만 실습을 통해서 직접 이론을 적용해 보면 공부한 것이 내것이 되보린다.


해커스쿨의 ftz 라는 워게임이 있다. 총 20개의 레벨이 있으며 다음 레벨의 비밀번호를 찾는것이 문제의 목표이다. 각 문제마다 hint 라는 파일이 있는에 여기에 다음 레벨의 비밀번호를 얻기위한 힌트를 제공하고 있다.


그럼 1번 문제를 살펴보겠다.





힌트에 " level2 권한에 setuid가 걸린 파일을 찾는다 " 라고 적혀 있다. setuid가 뭔지 모르면 1번 문제조차 풀기 힘들다. 위에서 setuid 라는 특수 권한을 설명했으므로 쉽게 풀 수 있다.


문제를 해석하자면 파일의 소유자가 level2인 파일에 setuid 즉, rws 로 설정되어 있는 파일을 찾고 실행을 시키면, 현재 level1의 사용자는 level2의 권한을 잠시 빌릴 수 있게 된다. 


따라서 현재 소유자가 level2인 setuid가 설정되어 있는 파일을 찾기 위해 find 명령어를 사용하기로 하자.





find / -user level2 -perm +4000 2>/dev/null 의 의미는 다음과 같다.



1. find / : 루트 디렉토리 아래에 있는 모든 곳에서 


2. -user level2 : 소유자가 level2이고


3. -perm +4000 : setuid가 설정되있으면 4로 시작하므로 권한이 4로 시작하는 권한 설정이 있는 파일을 찾아라 !


4. 2>/dev/null : 루트부터 다 검색하므로 검색 권한이 없어 허가 거부가 되는 파일은 퍼미션 거부가 뜨는데 존나게 많이 뜨므로 이러한 에러 출력들은 모두 화면에 표시안되게 하는 기능  



결론적으로 하나의 파일이 나왔다. /bin 경로에 ExecuteMe 라는 파일이다. 이를 ls -l 명령어로 확인해보면 다음과 같다.






해당 파일의 권한을 확인해보면 rws r-x --- 이렇게 되어 있고 소유자는 level2이며 이는 level1 그룹에 속해 있다는 것을 알 수 있다.


따라서 해당 파일은 소유자가 level2이지만 setuid가 s로 설정되어 있기 때문에 현재 level1 사용자가 잠시 level2의 권한을 빌릴수 있게 된다. 



 


해당 파일을 실행시키면 다음과 같이 화면이 표시가 된다. 기존에는 level1@ftz level1 이렇게 되어 있었지만 파일의 실행후 level2@ftz level2 로 변경된 것을 알 수 있다. 


따라서 위에 나온 것처럼 level2의 권한으로 명령어를 실행 시킬 수 가 있다. 딱 하나의 명령어 밖에 입력을 못하는데 단순히 ls 이런거를 입력하면 바로 기존 상태로 돌아온다. 


따라서 단 한번의 명령어로 임시로 얻은 level2의 권한을 상승시켜 계속 유지하려면  쉘을 띄우면 된다. (쉘에 관련해서는 추후에 따로 설명을 할께용)


ftz를 만든 사람이 my-pass 라는 명령어를 만든 거 같다. 획득한 level2 쉘에서 my-pass 명령어를 입력하면 비밀번호가 나오게 된다. 





결론으로 이론적인 부분을 문제를 통해 한번더 확인하면 더욱더 내 머리에 잘 들어오는 거같다.  

728x90

'보안 > Linux' 카테고리의 다른 글

리눅스 디렉토리 구조  (0) 2019.03.22
리눅스 쉘이란?  (0) 2019.03.22
리눅스 권한이란?  (0) 2019.03.22
리눅스 부팅 과정  (0) 2019.03.21
xcz 17번 문제  (0) 2019.02.23