티스토리 뷰
보안의 기본, SSH Key 로그인
- 리눅스에 로그인하는 가장 전통적인 방법은 아이디와 비밀번호를 이용하는 것이다. 하지만, 이 방법은 외부인에게 비밀번호를 탈취당할 경우 바로 로그인을 허용할 수 있어 위험한 인증 방식이다.
- 현재 가장 널리 쓰이고 권장되는 방법은 SSH Key를 이용한 로그인이다. 사용자는 임의의 Private Key/Public Key 조합을 생성한 후, 원격지 서버에 Public Key를 복사한 후 자신만이 소유한(소유해야할) Private Key를 이용하여 로그인하는 것이다. 외부인이 탈취하기 힘들어 보안이 강화되는 효과가 있다. [관련 링크]
- 가장 먼저 원격지 서버에서 SSH Key 로그인을 허용하도록 설정해야 한다.
# SSH Key 인증 허용
$ sudo nano /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# SSH 데몬 재시작
$ sudo service sshd restart
# 자신의 사용자 계정 로그인 후 허가된 Public Key 목록에 생성한 Public Key를 추가
$ nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXGoj3+7huZBUqf4wj57r25SHCKiiShyla335flX7Rsmb4meExpdh2NzfzffG15xl1wo0xBZ3HdZdqF2GUniEcNbtVjS1FKzQwPfsYPHMCY58qT0U2ZgK1zsXj2o0D2RWrCv3DFFfwUgNyZRYN2HK32umY6OmGSOVuJvIKhT+X6YaCVyax3CHv2ByB2OTBl9mh4nrwYAVXToT+X2psBE+MKB5R85lrUGkl3GtymTk10Dvf5O80exdTLFRMvkCA5RAIZgvxMk/bbNaH/0UHQoctX9oaDeKGWUPfVaknFBQdU9009+lK/ocAlKVNHEQkw+1wuV6dFoT1/hngSw== someuser@hostname
$ chmod g-w ~
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
원격지에서 root 계정 로그인 활성화
- 일반적으로
SSH
를 통한 원격 로그인시root
계정으로 바로 로그인하는 것은 보안상 허용되지 않는다. 하지만 꼭 root 계정으로 로그인해야 한다면 아래와 같이 설정할 수 있다.
$ nano /etc/ssh/sshd_config
# root 권한 접속을 활성화
PermitRootLogin yes
# 텍스트 입력 패스워드 인증을 활성화
PasswordAuthentication yes
# SSH 데몬 재시작
$ service sshd restart
sudo 권한을 가진 사용자 계정 생성
- 직접적으로 root 권한으로 로그인하여 중요한 작업을 수행하는 것은 보안상 위험한 일이다. 일반 사용자 계정을 생성하여 작업하다가 root 권한이 요구되는 명령어만 sudo 명령어를 사용하는 것이 바람직하다.
- 일반 사용자 계정에 sudo 권한을 부여하려면 아래와 같이 해당 사용자를 wheel 그룹에 추가하면 된다. [관련 링크]
# wheel 사용자 그룹에 모든 명령 실행 권한 부여
$ visudo
%wheel ALL=(ALL) ALL
# 새 사용자 생성
$ useradd someuser
# 사용할 패스워드 설정
$ passwd someuser
Changing password for user someuser.
New password: *****
Retype new password: *****
# sudo 권한을 가진 wheel 그룹에 생성된 사용자를 추가
# 이 시점부터 sudo 명령어 이용이 허가
$ usermod -aG wheel someuser
- wheel 그룹에 속한 사용자는 평소처럼 명령어를 실행하다가 root 권한이 요구되는 명령어를 실행하면 아래와 같은 오류가 등장한다.
# root 권한이 필요한 명령어는 실행 거부
$ yum update
You need to be root to perform this command.
# sudo로 실행하여 자신의 비밀번호를 입력하면 실행 허가
$ sudo yum update
[sudo] password for someuser:
모든 사용자 계정 목록 조회
$ less /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
alias를 이용하여 명령어 축약
- 매번 동일한 명령어를 키보드로 타이핑하는 것은 비효율적인다. alias 기능을 이용하면 자주 사용하는 명령어를 축약할 수 있다.
# 현재 계정애 대한 alias 설정
$ nano ~/.bashrc
alias dev="ssh me@121.122.123.124"
alias prod="ssh me@121.122.123.124"
# 설정된 alias 확인
$ alias
alias dev="ssh me@121.122.123.124"
alias prod="ssh me@121.122.123.124"
# 설정한 alias를 이용하여 명령어 실행
$ dev
현재 계정에 fish 쉘 적용
# fish 설치
$ sudo yum install yum-utils
# CentOS 6에서 설치할 경우
$ sudo yum-config-manager --add-repo https://download.opensuse.org/repositories/shells:fish:release:2/CentOS_6/shells:fish:release:2.repo
# CentOS 7에서 설치할 경우
$ sudo yum-config-manager --add-repo https://download.opensuse.org/repositories/shells:/fish:/release:/3/RHEL_7/shells:fish:release:3.repo
$ sudo yum install fish
# fish 실행
$ fish
Welcome to fish, the friendly interactive shell
# 현재 접속 계정의 기본 쉘을 bash에서 fish로 변경
$ chsh -s /usr/bin/fish
# 현재 계정에 대한 alias 설정
$ nano ~/.config/fish/config.fish
alias dev="ssh me@121.122.123.124"
파일 또는 디렉토리 권한 제어
- 파일 또는 디렉토리 권한의 확인 및 제어 방법은 아래와 같다.
# 파일 및 디렉토리 목록 조회
$ ls -al
drwx------ 4 foo for 4096 2019-10-15 09:48 foo
_rwx------ 4 bar bar 4096 2016-01-13 13:36 bar
- 첫번째 자리는 디렉토리 또는 파일 여부를 의미한다. (
d
:디렉토리,_
:파일) - 다음 3자리는 현재
user
에게 부여된 권한을 의미한다. (r
:읽기,w
:쓰기x
:실행) - 다음 3자리는 현재 user가 소속된
group
의 user들에게 부여된 권한을 의미한다. (r
:읽기,w
:쓰기x
:실행) - 마지막 3자리는 현재 다른 그룹의 user들에게 부여된 권한을 의미한다. (
r
:읽기,w
:쓰기x
:실행) - 권한의 제어 방법은 아래와 같다.
# foo 디렉토리에 대해 다른 그룹에게 실행 권한 부여
$ sudo chmod o+x foo
# foo 디렉토리에 대해 모든 사용자에게 모든 권한 해제
$ sudo chmod ugo-rwx foo
# foo 디렉토리에 대해 모든 사용자에게 모든 권한 부여
$ sudo chmod ugo+rwx foo
$ sudo chmod u+rwx,g+rwx,o+rwx foo
참고 글
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 평속
- 태그를 입력해 주세요.
- JavaScript
- Spring Boot
- Tomcat
- maven
- node.js
- Kendo UI Web Grid
- graylog
- 자전거
- MySQL
- java
- 구동계
- CentOS
- spring
- chrome
- DynamoDB
- 알뜰폰
- Kendo UI
- Docker
- jstl
- bootstrap
- Spring MVC 3
- Eclipse
- 로드 바이크
- 로드바이크
- kotlin
- jsp
- JHipster
- jpa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함