본 포스트는 박재호님의 유튜브 강의를 보고 개인적으로 정리한 내용입니다.
ftp는 file trasfer protocol의 약자로 파일 전송에 사용되는 규약이다. 이번에 사용할 sftp는
secure가 붙어서 ftp보다 안전하게 전송하기 위해 만들어졌다.
aws같은 퍼블릭 클라우드에서 파일을 전송할 때는 반드시 sftp로 전송해야 한다.
윈도우에서 사용할 때는 Winscp를 다운로드 받아서 설치하게 되는데, 이 때 탐색기 방식과 노턴 커맨더 방식 중에 선택해야 한다. 노턴 커맨더가 이전 포스트에 설명했던 midnight commander 방식처럼 창이 나눠져 있는 방식으로, 탐색기 방식보다 편의성이 좋기 때문이다.
이번 포스트에서는 GUI방식의 Winscp보다 터미널에서 사용하는 sftp를 위주로 설명하고자 한다.
실습을 진행하기 전에 우리가 이미 EC2 인스턴스를 생성하면서 발급받은 pem 확장자의 키가 위치한 디렉토리를 파악해 놔야 한다.
파워셸을 실행하고 다음과 같이 실행한다.
sftp -i .\키의 디렉토리\somekey.pem ubuntu@고정ip주소
필자의 경우 사용자 디렉토리 바로 밑에 pem 파일이 있어서 키 디렉토리에는 현재 디렉토리(.)만 적었다.
처음 접속할 경우 위와 같이 핑거프린트 관련 경고가 나오는데, yes를 입력해 주면 된다.
help
을 입력하면 사용할 수 있는 명령어들이 나오는데 여기서는 몇가지만 확인해 보자.
이제 리모트에 파일을 생성하고 로컬로 다운로드 받아 보자.
필자는 리모트에 sftp 디렉토리를 생성하고 그 안에 touch test.txt
라는 파일을 만들었다.
sftp 디렉토리로 이동해서 get
명령을 사용해 파일을 가져오면 된다.
!dir
명령으로 로컬 디렉토리를 보면 test.txt파일이 있는 것을 볼 수 있을 것이다.
이제 업로드 명령도 테스트해 보자. 리모트에 있는 test.txt파일을 우선 삭제한다.
sftp 디렉토리로 이동해서 put
명령을 사용해 파일을 업로드하면 된다.
우선 touch
명령을 통해 permission.txt
파일을 생성하자.
ubuntu 사용자와 그룹은 읽기와 쓰기를 할 수 있고, 나머지 사용자는 읽기만 가능한 것을 볼 수 있다.
여기서 현실적이지는 않지만 연습을 위해 사용자의 쓰기 권한을 제거해 보자.
chmod u-w permission.txt
u는 사용자이고 -w는 쓰기 권한을 제거한다는 뜻이다.
사용자에게서 쓰기 권한이 사라진 것을 확인할 수 있을 것이다. 또한 편집을 시도하려고 하면 읽기 전용 파일이라는 경고가 뜬다.
비슷한 방식으로 기타 사용자의 읽기 권한을 제거해 보면 아래와 같은 결과가 나온다.
chmod o-r permission.txt
다시 권한을 부여하려면 -의 반대인 +를 해 주면 된다.
chmod u+w permission.txt
편집도 문제없이 되리라고 예상할 수 있다.
사용자를 추가하는 명령에는 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 - 사용자명
을 입력하면 된다.
사용자가 변경된 것을 볼 수 있다. 다만 이 상태에서는 키가 등록되어 있지 않기 때문에 외부에서의 접속은 불가능하다.
그리고 위 이미지에서 볼 수 있듯 새로 생성된 사용자가 속한 그룹은 저 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
파일을 읽는 것도 가능해졌다.
위에서 확인했듯이, 새로 생성한 계정으로 sudo를 실행하려고 하면 권한이 없다는 메시지가 뜬다. 이는 우리가 sudoer 파일에 새로 생성한 계정을 추가하지 않았기 때문으로, 이번에는 추가 작업을 해 볼 것이다.
우선 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 그룹이 추가된 것을 확인할 수 있을 것이다.
필자와 같은 초보자의 입장에서 이번 작업을 진행하다 보면 드는 의문이 있는데, 왜 root계정으로 작업을 진행하지 않고 사용자를 만들고, sudo 권한을 추가해주고, 어떤 명령은 sudo 명령을 반드시 넣어야 하는 불편함을 감수하는 것일까?
root 계정을 바로 사용하지 않는 이유는 두 가지 정도로 요약할 수 있을 것 같다.
보안상의 이유
root 계정으로 작업을 하다 실수를 하게 되면 돌이킬 수가 없다. 사람의 의식적인 측면에서도, '어떤 작업은 sudo를 써서 root 권한으로 해야겠다' 의식하면서 작업하는 것과 무의식적으로 root 계정에서 제한 없이 작업하는 것은 큰 차이가 있다.
권한 사용 추적의 용이함
사용자 계정에서 sudo 명령으로 작업을 하는데 실패할 경우 로그가 남는다. 이는 감사 시 유용한 자료로 쓰일 수 있는데, 만약 root 계정으로만 작업을 하다 보면 이런 로그가 남지 않아 불리하게 작용할 가능성이 있다.
따라서 리눅스 공부를 시작하면 거의 항상 듣는 말이지만, root shell에서 작업하는 것은 가급적 피하고, 사용자 계정을 만들어서 필요할 때만 sudo 명령으로 작업하는 것이 바람직하다.