브라우저가 제공하는 비동기 리소스 요청 API인 XMLHttpRequest 객체나 fetch API는 별도의 옵션 없이 브라우저의 쿠키 정보나 인증과 관련된 헤더를 기본적으로 요청에 담지 않으므로, credentials 옵션을 변경하지 않고서는 cookie를 주고 받을 수 없음
인증정보 포함 요청의 세가지 옵션
omit → 절대로 cookie들을 전송하거나 받지 않음
same-origin → 동일 출처(same origin)이라면, user credentials (cookies, basic http auth 등..)을 전송 (default 값)
include → cross-origin 호출이라 할지라도 언제나 user credentials (cookies, basic http auth 등..)을 전송
credentials 설정을 include/true로 설정하면 CORS정책에 의해 Access-Control-Allow-Origin을 모든 출처를 허용하는 * 로 지정할 수 없다는 에러가 발생
CORS 설정에서 *을 입력하여 모든 출처를 허용한 경우에는 특정 출처를 정확히 명시
인증 정보 포함하여 요청하는 예시
fetch('주소', {
credentials: 'include', // 모든 요청에 인증 정보 포함
});
axios 로 통신할 시, withCredentials 설정을 true 로 넣어주면 됨
axios.post(주소, 데이터, { withCredentials: true });
// 또는 공통으로 추가
axios.defaults.withCredentials = true;
CORS 해결 방법
CORS 정책 위반으로 에러가 발생했을때 해결하는 방법
1. Access-Control-Allow-Origin 응답 헤더 세팅
서버측 응답에서 접근 권한을 주는 헤더를 추가하여 해결
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*"); // 모든 도메인
res.header("Access-Control-Allow-Origin", "https://example.com"); // 특정 도메인
});
2. CORS 모듈 사용
아무 옵션없이 설정하면 모든 cross-origin 요청에 대해 응답 → 특정 도메인이나 특정 요청에만 응답하게 옵션을 설정하는 것이 좋음
const cors = require("cors");
const app = express();
app.use(cors());
특정 도메인 접근 혀용
const options = {
origin: "http://example.com", // 접근 권한을 부여하는 도메인
credentials: true, // 응답 헤더에 Access-Control-Allow-Credentials 추가
optionsSuccessStatus: 200, // 응답 상태 200으로 설정
};
app.use(cors(options));
$ crontab -e
# crontab을 통해 편집할 수 있는 곳에 접근
*/3 * * * * /opt/fujitsu/ServerViewSuite/RAIDManager/svrack/svrack.sh -c
# srvmagtCron: restarts daemons that died
0,15,30,45 * * * * /bin/sh -c "[ -x /etc/srvmagt/srvmagtCron ] && /etc/srvmagt/srvmagtCron"
crontab -e 입력 후 다음과 같은 내용을 입력 → crontab 갱싱
별이 다섯개 뒤에 명령어 입력 → "매분마다 실행" 별이 지칭하는 것"
쉘스크립트 뿐만 아니라 리눅스 커맨드도 사용 가능
$ crontab -e
# crontab 파일 내용
* * * * * ls -al
# crontab 파일 내용을 수정한 후 wq!로 저장하면 아래의 내용 출력
no crontab for root - using an empty one
crontab: installing new crontab
# * * * * * 를 적용해서 매분마다 ls -al 실행
SFTP는 서버 접속, 파일 전송, 그리고 파일 관리를 지원하기 위해 IETF(Internet Engineering Task Force)에서 개발한 네트워크 프로토콜
SFTP를 사용하기 위해선 SSH2 프로그램을 설치한 후에 활성화 필요
SFTP의 특징
안전한 파일 전송
SFTP는 안전한 파일 전송을 위해 SSH로 연결을 암호화
안전한 FTP 서버 접속
안전한 서버 접속을 위해 인증 방법으로서 패스워드 뿐만 아니라 공개키(Public Key)를 이용한 접속을 지원
대부분의 플랫폼에서 사용 가능
SFTP는 Windows, Unix, linux 등 대부분의 플랫폼에서 지원
SSH 서버가 제공하는 프로그램 (VSFTP 서버와 별개)
VSFTP 서버와 별개의 프로그램이지만, 안전한 파일 전송을 지원한다는 점에서 FTP와 동일한 역할
SFTP 서버 설정
1. OpenSSH 패키지 다운
sftp 명령어를 사용하려면 SSH 패키지가 필요
OpenSSH 패키지를 설치하면 SSH 패키지를 설치 가능
$ yum install openssh-server openssh -y
2. SSH 서버의 설정 파일 변경
/etc/ssh/sshd_confg 파일을 수정
기존에 있던 설정을 internal-sftp로 변경 (아래에 설명)
$ vi /etc/ssh/sshd_config
# 기존에 있던 Subsystem을 주석처리하고 새로운 Subsystem을 추가
# override default of no subsystems
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# Example of overriding settings on a per-user basis
Match User sftp-users
X11Forwarding no
AllowTcpForwarding no
# ChrootDirectory /home/%u
ForceCommand internal-sftp
3. /etc/ssh/sshd_config 파일 내 적용 요소 설명
#Subsystem sftp /usr/libexec/openssh/sftp-server
서브시스템으로 사용되던 기존 sftp 프로그램을 사용 X → 앞에 주석 추가
Subsystem sftp internal-sftp
SSH 서버에서 외부 프로그램을 사용
키워드 Subsystem에 이름 sftp와 명령어 internal-sftp를 지정
internal-sftp는 Match Group sftp-users의 ChrootDirectory 옵션을 사용해 각 사용자 별로 chroot를 적용하기 위해 sftp-server 대신 사용
Match Group sftp-users
sftp를 사용할 그룹 이름과 옵션을 정의
그룹 안에 속한 사용자들은 ssh 및 scp를 사용 불가능 → 오직 sftp만 사용 가능
X11Forwarding no → ssh 접속해서 GUI 기반의 어플리케이션 실행 X
AllowTcpForwarding no → TCP 포워딩을 불가능
chroot를 적용돼 자신의 홈 디렉토리를 루트(/) 디렉토리로 인식
ChrootDirectory는 root로 적용될 디렉토리 위치를 지정
%u → 인증된 사용자의 사용자 이름을 지정
ForceCommand internal-sftp → internal-sftp를 강제 명령으로 실행
4. 그룹 생성 및 그룹에 사용자 포함
SFTP 사용이 적용될 그룹 sftp-users를 생성하기 위해 명령어 groupadd를 사용
그룹을 만든 후 사용자를 그룹에 포함 → 예시 : hippo 사용자
hippo 사용자의 홈디렉토리에 그룹 회원들이 접속할 수 있도록 권한을 변경
# 변경한 /etc/ssh/sshd_config을 새로 적용
$ systemctl restart sshd
# sftp-users 그룹 생성
$ groupadd sftp-users
# sftp-users 그룹에 root 사용자를 추가
# usermod -g sftp-users root를 하면 그룹 하나만 속함 -> 사용 X
$ usermod -aG sftp-users root
$ id root
uid=0(root) gid=0(root) groups=0(root),10(wheel),1000(sftp-users)
# hippo 사용자가 없기에 새로 추가 필요
$ id hippo
id: hippo: no such user
# hippo 사용자 추가
$ adduser hippo
$ passwd hippo
# sftp-users에 hippo 사용자 추가
$ usermod -aG sftp-users hippo
# hippo 사용자가 정상적으로 생성되고 sftp-users에 들어있는 지 확인
# wheel 그룹에 속하려면 /etc/group의 wheel에 hippo를 추가해야 함
$ id hippo
uid=1000(hippo) gid=1001(hippo) groups=1001(hippo),10(wheel),1000(sftp-users)
# 권한 변경
$ chmod 755 /home/hippo
$ ls -al /home
drwxr-xr-x 2 hippo hippo 4096 Jan 30 21:54 hippo
리눅스 SFTP 클라이언트 테스트
접속하는 윈도우 SFTP 클라이언트
리눅스 클라이언트로 이용하여 테스트
리눅스 SFTP 접속 → IP 접속을 허용해줘야 함 (ACL 정책 확인 필요)
$ sftp -P 22000 root@[서버 IP]
root@[서버 IP]'s password:
Connected to [서버 IP].
# SFTP 접속 위치의 파일 확인
sftp> ls
test.sh time
# SFTP 현재 위치 확인
sftp> pwd
Remote working directory: /root
# SFTP 접속 해제
sftp> exit`