SSH 서버 구축, SFTP 사용에 관한 두개의 포스팅에 이어서 쓰는 글입니다.


우분투로 구축한 SFTP 서버에 접속했을 때, 상위 디렉토리로 올라~올라~가다보면 우분투 파티션 전체의 디렉토리 구조를 볼 수 있습니다. 마음만 먹으면 디렉토리를 지워버리는 것도 가능하고요. 다수의 우분투 계정으로 다수의 사용자가 접근할 수 있는 환경이라면 보안상 문제될 여지가 있다고 생각합니다.


SSH로 서버를 관리하는 사람이 소수여도 된다면 대다수 우분투 계정들의 SSH 연결을 차단해도 큰 문제가 없을 것입니다.

그리고 SFTP 이용시 접근가능한 최상위 디렉토리를 정해버리면 디렉토리 구조 전부를 보이지 않을 수 있으니까 보안상 유리하겠죠.


http://studyforus.tistory.com/243

의 2번 항목이 방법을 설명하고 있는데, 제가 적용하면서 정리 차원에서 글을 작성하고자 합니다.


[우분투 16.04] SSH서버 구축하기

▲ 저는 우분투 계정을 여러 개 만드는 것이 싫어서... 루트계정으로 SSH 접속 가능하게끔 조치하고 진행했습니다. 위 본문 중간에서 “SSH에서 root계정 사용하기” 부분을 참고하시면 됩니다.


▲ 지에디트(관리자 권한)으로 /etc/ssh/sshd_config 를 엽니다.

sudo gedit /etc/ssh/sshd_config


▲ 거의 하단쯤에 Subsystem sftp /usr/lib/openssh/sftp-server 이라는 부분이 있을 겁니다.


해당 구문 맨 앞에 #을 붙여서 주석처리하고...

(여기까지만 하면 SFTP 기능을 못쓰게 됩니다. SSH는 쓸 수 있습니다.)


▲ 바로 아랫줄에 Subsystem sftp internal-sftp 라고 입력합니다.

(sftp-server 대신 internal-sftp를 쓰겠단 거죠.)


▲ 맨 아래에 위 스샷처럼 추가하고 저장 후 빠져나옵니다. aaa는 우분투 계정명, /var/www는 본인이 원하는 최상위 디렉토리 경로로 바꿔 넣으면 됩니다(예 : /home/aaa ). 경로결정 지금 못했더라도 괜찮습니다. 이따가 아래에서 이 부분을 다시 언급할 테니까요. 이 스샷은 개념만 익히셔도 돼요.


※ 참고로 http://studyforus.tistory.com/243 포스팅에 Group 별로 최상위 디렉토리를 제한하는 방법도 설명되어 있으니까... 그룹별로 설정하길 원하신다면 들어가서 참고하시면 될 듯합니다.


▲ sudo service ssh restart

명령어 쳐서 ssh 서비스 재시작해 주세요.(sudo service sshd restart 라고 쳐도 될거예요.)



SSH쪽의 설정은 마쳤습니다. 하지만 Chroot Directory의 ①소유자는 root가 되어야만 그 디렉토리로 SFTP 접속이 가능해집니다(그룹에 chroot 디렉토리를 할당하는 경우에는 그룹 소유가 root여야 할겁니다.). 그래서 디렉토리의 소유자 변경조치가 필요합니다. ②Chroot 디렉토리의 상위 디렉토리도 전부 root 소유여야 합니다(저는 chroot를 /var/www라고 정했었는데, var, www 가 root 소유여야 되는 겁니다.). ③또... chroot 디렉터리의 권한은 무조건 755로 설정되어 있어야 한다고 합니다(이건 권한에 대해 이해하고 계신다면 유도리있게 처리하셔도 될 듯합니다. 그룹이면 775라던지...). 또... ④Chroot Directory 하위에 우분투 계정 권한의 디렉토리를 (추가로) 생성해야 그 디렉토리에 쓰기작업을 할 수 있습니다.

=> 굵게 밑줄친 부분, 전부 중요합니다!


스샷으로 설명해보면...


▲ 붉은색 밑줄로 표시한 것처럼 소유자가 root라고 되어있어야 SFTP 접속이 가능합니다(그룹 설정시에는 그룹).


▲ 이렇게 디렉토리 소유자가 우분투 계정으로 설정되어 있다면 SFTP 접속이 안되고요.


-------------------------------------------------------

※ 디렉토리 권한 755는 또 뭔가?


위 스샷을 보면 아시겠지만 ll 명령어(또는 ls 명령어)로 파일/디렉토리 권한을 확인하면 d(디렉토리) / r(읽기) / w(쓰기) / x(실행) 으로 나타나는 것을 알 수 있습니다. [디렉토리 여부 1자리][사용자권한 3자리][그룹권한 3자리][다른사용자 3자리]로 표현되고요.


▲ 예를 들어 bbb는 디렉토리(d)이고 / aaa 사용자에게 읽기쓰기실행 허용(rwx) / aaa 그룹에게 읽기쓰기실행 허용(rwx) / 다른사용자에게 읽기실행 허용(r-x)합니다.

emailipaddress.sh는 파일이고(-) / aaa 사용자에게 읽기쓰기실행 허용(rwx) / aaa 그룹에게 읽기쓰기 허용(rw-) / 다른사용자에게 읽기 허용(r--)합니다.


[사용자권한 3자리][그룹권한 3자리][다른사용자 3자리]는 영문자가 있으면(권한이 있으면 : rwx) 해당 자리에 이진수 1을, 영문자가 없으면(권한이 없으면 : -표시) 해당 자리에 이진수 0을 매칭시킬 수 있습니다.

그러니까 bbb디렉토리의 권한(rwxrwxr-x)을 이진수로 표현하면 111111101이 되겠죠.

세자리씩 끊어서 십진수로 표현해보면? 775.

그런데... 세자리(rwx)를 유심히 보면 첫째 자리에는 r(읽기)만, 둘째 자리에는 w(쓰기)만, 셋째 자리에는 x(실행)만 오는 것을 알 수 있습니다. 그래서 쉽게 r은 십진수 4, w는 십진수 2, x는 십진수 1이라고 외워뒀다가 권한 적용할 때 전부 더해서 적으면 편합니다.


▲ 이런 식으로요.


-------------------------------------------------------


각설하고,

/home/계정명 디렉토리에서... 기본값으로 home은 root소유, 하위의 계정명 디렉토리는 계정소유로 할당되어 있습니다. 계정명 디렉토리의 소유를 root로 바꾸면... 그 아래의 바탕화면 디렉토리 등등 일반적으로 쓰는 공간들이 꼬일 수 있으니까 /home/test 디렉토리를 따로 만들어서 세팅해 보겠습니다.


▲ 터미널 창을 하나 띄우고(단축키 : Ctrl+Alt+T), ll /(또는 ls -al)이라고 쳐서 home 디렉토리(새 디렉토리 만들 곳의 상위 경로)의 소유가 root인지, 권한이 755인지 확인합니다(화면이 넘어가서 안보이면 스크롤해서 보세요.). root+755가 아니라면 아래처럼 명령어를 입력해서 root소유, 755권한으로 바꿔줍니다.


sudo chown root:root /home

sudo chmod 755 /home

(참고로 chown root:root 에서 앞쪽 root는 소유자, 뒤쪽 root는 그룹을 뜻합니다.)


이제 아래처럼 입력해서 test 디렉토리를 만들고, test 디렉토리가 root 소유인지, 755권한인지 확인합니다.


▲ sudo mkdir /home/test

ll /home


만약 root+755가 아니라면 아래처럼 명령어를 입력해서 root소유, 755권한으로 바꿔줍니다.

sudo chown root:root /home/test

sudo chmod 755 /home/test


-----------------------------------------------------

※ 참고로 말씀드리는 건데, 노틸러스 같은 내장 파일관리자 프로그램을 쓰면 GUI로 소유자/그룹/권한 변경을 쉽게 처리할 수 있긴 합니다. 터미널 창에서 sudo nautilus 라고 치면 루트권한으로 노틸러스를 실행할 수 있고, 마우스 우클릭 등으로 디렉토리 생성 후 해당 디렉토리에서 마우스 우클릭→“속성”메뉴에 진입하여 “권한”탭에서 변경 후 X버튼을 눌러 빠져나오면 되지요(아래 스샷 참고).


-----------------------------------------------------


이제 /home/test 디렉토리를 sshd_config 설정파일에 등록할 차례입니다.


▲ 터미널 창(단축키 : Ctrl+Alt+T)에서 sudo gedit /etc/ssh/sshd_config 라고 입력합니다.


▲ ChrootDirectory에 /home/test 경로를 적어주고, 저장 후 빠져나옵니다.

(블록 지정한 부분에 대한 설명은 위에서 했었으니까 생략할게요.)


▲ 설정파일 변경사항을 반영하기 위해 터미널 창에 아래의 명령어를 입력하여 ssh 서비스를 재시작해 줍니다.

sudo service ssh restart



접속 잘 되는지 테스트해 봐야죠? SFTP 접속 가능한 FTP클라이언트 프로그램으로 접속해보세요. 저는 파일질라를 이용할 건데요,


▲ 저는 테스트용 세컨드 PC가 없어서... 우분투 소프트웨어 센터에서 FileZilla 받아 실행시키고, 호스트 주소에 127.0.0.1(또는 localhost) 입력해서 접속테스트 진행했습니다.ㅋ


▲ 아마 접속은 될 거예요. 근데... 파일 업로드가 안 될걸요? open for write: permission denied / 파일 전송 실패 오류가 뜨면서.


Chroot Directory 하위에 “우분투 계정 권한의” 디렉토리를 (추가로) 생성해주면 그 디렉토리에는 쓸 수 있다고 언급했었으니... 해봅시다!

/home/test 하위에 bbb 폴더를 만들고, 소유자를 aaa로 바꾸고, 권한을 755로 설정해줄 겁니다.


▲ 위 스샷처럼 명령어를 입력해가면서 처리&결과확인 해보세요.

sudo mkdir /home/test/bbb

sudo chown 계정명 /home/test/bbb

sudo chmod 755 /home/test/bbb

ll /home/test

계정명 소유의 bbb 디렉토리가 보이면 성공입니다.

(참고로 bbb 디렉토리를 지우려면 sudo rm -r /home/test/bbb 라고 입력하면 됩니다. sudo는 root소유의 파일이 내부에 존재할 경우를 대비해서 넣어준 겁니다.)


이제 모든 설정이 끝났어요. 접속해서 bbb 디렉토리에 파일 업로드 테스트해 볼게요.


▲ 파일 전송 성공 + 상위 디렉토리로 계속 올라가려고 시도해봐도 bbb디렉토리 보이는 곳에서 더이상 안올라가져요.


테스트 성공. 끝.

다음 포스팅은 vsftpd 프로그램을 써서 FTPS(FTPES) 구축하는 법에 대해서 적을 예정이에요.

반응형