Linux Upskill 5. sftp, 파일 접근 허가, sudo권한 부여

jiffydev·2021년 4월 6일
0

linux upskill

목록 보기
5/8

본 포스트는 박재호님의 유튜브 강의를 보고 개인적으로 정리한 내용입니다.

1. sftp로 복사하기

ftp는 file trasfer protocol의 약자로 파일 전송에 사용되는 규약이다. 이번에 사용할 sftp는
secure가 붙어서 ftp보다 안전하게 전송하기 위해 만들어졌다.
aws같은 퍼블릭 클라우드에서 파일을 전송할 때는 반드시 sftp로 전송해야 한다.

윈도우에서 사용할 때는 Winscp를 다운로드 받아서 설치하게 되는데, 이 때 탐색기 방식과 노턴 커맨더 방식 중에 선택해야 한다. 노턴 커맨더가 이전 포스트에 설명했던 midnight commander 방식처럼 창이 나눠져 있는 방식으로, 탐색기 방식보다 편의성이 좋기 때문이다.

이번 포스트에서는 GUI방식의 Winscp보다 터미널에서 사용하는 sftp를 위주로 설명하고자 한다.

1-1. 명령어 실습

실습을 진행하기 전에 우리가 이미 EC2 인스턴스를 생성하면서 발급받은 pem 확장자의 키가 위치한 디렉토리를 파악해 놔야 한다.

파워셸을 실행하고 다음과 같이 실행한다.

sftp -i .\키의 디렉토리\somekey.pem ubuntu@고정ip주소


필자의 경우 사용자 디렉토리 바로 밑에 pem 파일이 있어서 키 디렉토리에는 현재 디렉토리(.)만 적었다.
처음 접속할 경우 위와 같이 핑거프린트 관련 경고가 나오는데, yes를 입력해 주면 된다.

help을 입력하면 사용할 수 있는 명령어들이 나오는데 여기서는 몇가지만 확인해 보자.

  1. get, put
    파일을 다운로드, 업로드하는 명령어이다.
  2. pwd
    로컬이 아닌 리모트(여기서는 우리가 접속한 EC2)의 현재 디렉토리를 출력한다.
  3. !dir
    로컬 디렉토리를 출력한다. lls로 대체 가능하다. 여기서 느낌표는 명령어 앞에 붙이면 로컬 셸에서 실행하라는 뜻이 된다.

이제 리모트에 파일을 생성하고 로컬로 다운로드 받아 보자.
필자는 리모트에 sftp 디렉토리를 생성하고 그 안에 touch test.txt라는 파일을 만들었다.

sftp 디렉토리로 이동해서 get 명령을 사용해 파일을 가져오면 된다.

!dir 명령으로 로컬 디렉토리를 보면 test.txt파일이 있는 것을 볼 수 있을 것이다.

이제 업로드 명령도 테스트해 보자. 리모트에 있는 test.txt파일을 우선 삭제한다.
sftp 디렉토리로 이동해서 put 명령을 사용해 파일을 업로드하면 된다.

2. 파일 접근 허가와 사용자 추가

2-1. 명령어 실습

2-1-1. chmod

우선 touch 명령을 통해 permission.txt파일을 생성하자.

ubuntu 사용자와 그룹은 읽기와 쓰기를 할 수 있고, 나머지 사용자는 읽기만 가능한 것을 볼 수 있다.
여기서 현실적이지는 않지만 연습을 위해 사용자의 쓰기 권한을 제거해 보자.

chmod u-w permission.txt

u는 사용자이고 -w는 쓰기 권한을 제거한다는 뜻이다.

사용자에게서 쓰기 권한이 사라진 것을 확인할 수 있을 것이다. 또한 편집을 시도하려고 하면 읽기 전용 파일이라는 경고가 뜬다.

비슷한 방식으로 기타 사용자의 읽기 권한을 제거해 보면 아래와 같은 결과가 나온다.

chmod o-r permission.txt

다시 권한을 부여하려면 -의 반대인 +를 해 주면 된다.

chmod u+w permission.txt


편집도 문제없이 되리라고 예상할 수 있다.

2-1-2. adduser

사용자를 추가하는 명령에는 useradd와 adduser가 있다. 무슨 차이인가 싶지만 우선 man명령으로 adduser의 매뉴얼을 확인해 보면 다음과 같다.

They are friendlier front ends to the low level tools like useradd, groupadd and usermod programs

또한 useradd의 매뉴얼에서도 일반적으로 adduser를 써야한다(!)고 되어 있다.

useradd is a low level utility for adding users. On Debian, administrators should usually use adduser(8) instead.

명령을 실행해 보면 adduser의 경우 루트 사용자만 추가할 수 있다는 메시지가 뜨는 반면, useradd는 아무런 경고 없이 추가가 가능하다.
그러면 이제 adduser를 통해 사용자를 생성해 보자.


testuser라는 사용자를 생성해 봤다. 그래도 여전히 사용자는 ubuntu로 되어있을 것이다.
이를 변경하기 위해서는 su - 사용자명을 입력하면 된다.

사용자가 변경된 것을 볼 수 있다. 다만 이 상태에서는 키가 등록되어 있지 않기 때문에 외부에서의 접속은 불가능하다.

2-1-3. usermod

그리고 위 이미지에서 볼 수 있듯 새로 생성된 사용자가 속한 그룹은 저 3개가 다이다.
따라서 우리가 ubuntu 계정으로는 볼 수 있었던 /var/log/auth.log파일도 보려고 하면 권한이 없다는 메시지가 나오게 된다.
새 계정에서도 auth.log파일을 읽을 수 있도록 하고 싶다면 어떻게 해야 할까?
정답은 이미 나와있듯, usermod명령을 사용하면 된다.
그런데 이 명령은 sudo와 함께 사용해야 하는데 현재는 testuser 계정이 sudoer 파일에 등록이 되어 있지 않기 때문에 바로 사용할 수는 없고, ubuntu 계정으로 일단 돌아가서 usermod를 사용해야 한다.
ubuntu 계정으로 돌아가기 위해서는 logout을 입력하면 된다.

ubuntu 계정에서 usermod로 새로 생성한 계정을 adm그룹에 추가시켜보자.

ubuntu@ip-172-26-9-205:~$ sudo usermod -a -G adm 새로운계정
ubuntu@ip-172-26-9-205:~$ su - testuser


adm 그룹이 추가되었음을 확인할 수 있다. 그리고 /var/log/auth.log 파일을 읽는 것도 가능해졌다.

3. sudo 권한 주기

위에서 확인했듯이, 새로 생성한 계정으로 sudo를 실행하려고 하면 권한이 없다는 메시지가 뜬다. 이는 우리가 sudoer 파일에 새로 생성한 계정을 추가하지 않았기 때문으로, 이번에는 추가 작업을 해 볼 것이다.

3-1. 명령어 실습

우선 ubuntu 계정과 testuser 계정이 속한 그룹을 비교해 보자.

ubuntu 계정은 sudo 그룹에 속해있는 반면, testuser는 속해있지 않다.
그렇다면 위에서 adm 그룹에 testuser를 추가한 것처럼 sudo 그룹에 추가하면 될 것이라 추론할 수 있다. 물론 testuser 계정에서는 추가할 수 없으므로 ubuntu 계정으로 돌아가야 할 것이다.

ubuntu@ip-172-26-9-205:~$ sudo usermod -a -G sudo testuser

추가한 후 /etc/group 파일을 less로 열어 sudo를 검색해보자.

testuser도 추가돼 있는 것을 볼 수 있다. 다시 testuser로 로그인하여 id 명령으로 확인해도 sudo 그룹이 추가된 것을 확인할 수 있을 것이다.

3-2. 번외(root계정을 사용하지 않는 이유)

필자와 같은 초보자의 입장에서 이번 작업을 진행하다 보면 드는 의문이 있는데, 왜 root계정으로 작업을 진행하지 않고 사용자를 만들고, sudo 권한을 추가해주고, 어떤 명령은 sudo 명령을 반드시 넣어야 하는 불편함을 감수하는 것일까?
root 계정을 바로 사용하지 않는 이유는 두 가지 정도로 요약할 수 있을 것 같다.

  1. 보안상의 이유
    root 계정으로 작업을 하다 실수를 하게 되면 돌이킬 수가 없다. 사람의 의식적인 측면에서도, '어떤 작업은 sudo를 써서 root 권한으로 해야겠다' 의식하면서 작업하는 것과 무의식적으로 root 계정에서 제한 없이 작업하는 것은 큰 차이가 있다.

  2. 권한 사용 추적의 용이함
    사용자 계정에서 sudo 명령으로 작업을 하는데 실패할 경우 로그가 남는다. 이는 감사 시 유용한 자료로 쓰일 수 있는데, 만약 root 계정으로만 작업을 하다 보면 이런 로그가 남지 않아 불리하게 작용할 가능성이 있다.

따라서 리눅스 공부를 시작하면 거의 항상 듣는 말이지만, root shell에서 작업하는 것은 가급적 피하고, 사용자 계정을 만들어서 필요할 때만 sudo 명령으로 작업하는 것이 바람직하다.

profile
잘 & 열심히 살고싶은 개발자

0개의 댓글