728x90
반응형

 

Linux에서 디렉토리나 파일을 최근 변경된 순서로 정렬하여 리스트하고 싶다면, ls 명령어에 다음 옵션들을 조합해서 사용하면 됩니다:

가장 기본적인 명령어

ls -lt
옵션의미
-l 상세 목록(long format)
-t 최종 수정 시간(descending) 기준으로 정렬
 

💡 결과는 최근에 수정된 파일이 가장 위에 표시됩니다.

 

디렉토리만 보고 싶다면?

ls -ltd */
  • */는 현재 디렉토리 내의 하위 디렉토리만 대상으로 리스트업
  • -d는 디렉토리 자체에 대한 정보만 출력 (디렉토리 내부 내용 출력 방지)

수정 시간 말고 "변경 시간(ctime)" 기준 정렬하려면?

ls -ltc
  • -c: inode 변경 시간(change time) 기준 정렬
    (예: 권한 변경, 소유자 변경 등도 포함)

서브 디렉토리 포함 전체 탐색하려면

find . -type f -printf "%T@ %Tc %p\n" | sort -n
항목설명
-type f 파일만 찾음
%T@ epoch 시간 출력 (정렬용)
%Tc human-readable 시간
%p 파일 경로
sort -n 시간 오름차순 정렬
 

→ sort -nr로 바꾸면 최근 변경된 순으로 정렬됩니다.

전체 예시: 최근 변경된 디렉토리 Top 5

bash
복사편집
ls -ltd -- */ | head -n 5
find . -type f -printf "%T@ %Tc %p\n" | sort -n

 

요약 명령어 모음

목적명령어
전체 파일/디렉토리 변경순 ls -lt
디렉토리만 최근순 ls -ltd */
변경시간(ctime) 기준 ls -ltc
서브디렉토리 포함 전체 파일 변경순 `find . -type f -printf "%T@ %Tc %p\n"
 

 

728x90
반응형
728x90
반응형

 

Linux lsyncd log 파일 초기화

1. : > 연산자 사용 (내용만 비우고 파일 유지)

: > /var/log/lsyncd/lsyncd.log
  • 파일 내용만 모두 지우고, 파일 자체는 그대로 유지
  • touch와 달리 변경시간은 갱신됨
  • 프로세스가 계속해서 이 파일을 로그로 쓰는 경우에도 안전하게 사용 가능

2. truncate 명령 사용

truncate -s 0 /var/log/lsyncd/lsyncd.log
  • 파일의 사이즈를 0으로 줄여 초기화
  • 동일하게 내용만 삭제, 권한/소유자/경로 그대로 유지

3. echo 명령 사용

echo "" > /var/log/lsyncd/lsyncd.log
  • 빈 문자열을 덮어씌워 내용 삭제

주의사항

  • 로그 파일을 삭제(rm)하고 새로 만드는 것은 서비스나 데몬이 파일 핸들 유지 중일 경우 로그 기록이 끊기는 문제가 발생할 수 있습니다.
  • 따라서 파일 삭제보다는 내용만 비우는 방법이 안전합니다.

 

 

리눅스에서 각 파일의 line 수를 확인하는 방법

1. 단일 파일의 라인 수 확인

wc -l filename.txt
  • 출력 예시:
    123 filename.txt → 총 123줄

2. 현재 디렉토리의 모든 파일에 대한 라인 수 확인

wc -l *
  • 각 파일의 라인 수와 파일명이 나열되고, 마지막에 전체 합계가 나옵니다.
  • 디렉토리 포함시 에러 발생 가능성이 있으므로 텍스트 파일만 지정하려면:
     
wc -l *.txt

3. 하위 디렉토리 포함 모든 파일 라인 수 확인 (재귀적)

find . -type f -exec wc -l {} +
  • .: 현재 디렉토리부터
  • -type f: 파일만 검색
  • -exec wc -l {}: 각 파일에 대해 wc -l 실행

4. 결과를 정렬하여 출력 (라인 수 기준 내림차순)

find . -type f -exec wc -l {} + | sort -nr

 

5. 특정 확장자만 필터링 (예: .py)

find . -name "*.py" -type f -exec wc -l {} + | sort -nr

🔍 참고: 라인 수만 합산하려면

find . -type f -name "*.java" -exec cat {} + | wc -l
  • 모든 .java 파일의 라인을 합쳐서 총 라인 수만 출력합니다.
find . -name "*.tpl.html" -type f -exec wc -l {} + | sort -nr
find . -name "*.tpl.html" -exec wc -l {} + | sort -nr

라인수만계산
find . -type f -name "*.tpl.html" -exec cat {} + | wc -l
find . -type f -name "*.tpl.html" -exec wc -l {} + | sort -nr

 

 

linux csv파일 상위 10개 라인만 조회하는 명령어

 

리눅스에서 **CSV 파일의 상위 10개 라인(행)**만 조회하려면, 일반적으로 head 명령어를 사용합니다.

기본 명령어

head -n 10 yourfile.csv
  • yourfile.csv 파일의 앞 10줄을 출력합니다.
  • -n 뒤에 원하는 숫자를 지정하면 해당 줄 수만큼 출력됩니다.

예시

head -n 10 customers.csv

→ customers.csv 파일의 1행(헤더 포함)부터 10행까지 보여줍니다.

✅ 헤더 제외 상위 10개 데이터만 보고 싶을 때

tail -n +2 yourfile.csv | head -n 10
  • tail -n +2: 2번째 줄부터 끝까지 출력 (즉, 헤더 제외)
  • 그 후 head -n 10으로 상위 10줄을 자릅니다.

CSV 파일의 상위 10개 라인만 추출해서 새로운 파일로 저장

head 명령어 + 리디렉션 사용

bash
복사편집
head -n 10 original.csv > top10.csv
  • original.csv의 앞 10줄을 읽어서
  • top10.csv라는 새 파일에 저장합니다.
  • 기존 파일이 있을 경우 덮어씌워집니다.

헤더 제외하고 상위 10개 데이터만 저장하려면

head -n 10 original.csv > top10.csv
  • 2번째 줄부터 읽은 뒤 상위 10줄만 추출하여 저장
  • 보통 데이터만 필요할 때 사용

헤더 포함 + 상위 10개 데이터 저장 (즉, 11줄: 헤더 + 10줄)

(head -n 1 original.csv && tail -n +2 original.csv | head -n 10) > top10_with_header.csv
  • head -n 1: 헤더 1줄 추출
  • tail -n +2 | head -n 10: 데이터 10줄 추출
  • 전체를 ()로 묶고 >로 새로운 파일에 저장

 

728x90
반응형
728x90
반응형

1. 인증서 형식 오류 (PEM 형식 아님)

  • 인증서 파일은 반드시 **PEM 형식 (Base64 인코딩)**이어야 하며, 다음과 같은 헤더가 포함되어야 합니다:
-----BEGIN CERTIFICATE-----
... (Base64 encoded content)
-----END CERTIFICATE-----
  • 형식이 맞지 않으면 무시됩니다.

확인 방법:

cat /etc/pki/ca-trust/source/anchors/your-cert.crt.pem

 

2. 잘못된 경로에 파일을 넣음

  • 유효한 경로는 다음 중 하나입니다:
    • /etc/pki/ca-trust/source/anchors/ ✅ (권장)
    • /etc/pki/ca-trust/source/blacklist/ ❌ (차단 리스트)
    • /usr/share/pki/ca-trust-source/ (시스템 전역)
  • anchors 폴더 외 경로에 넣으면 적용되지 않습니다.

3. 파일 확장자가 .crt 또는 .pem이 아님

  • 파일 확장자는 반드시 .crt, .pem, .cer 중 하나여야 하며, 그렇지 않으면 무시됩니다.

✔️ 권장 예:

your-cert.crt

 

4. 인증서 내용이 실제로 CA 인증서가 아님

  • 개인 인증서(Client Cert)나 중간 인증서가 아닌 Root 또는 Intermediate CA 인증서여야 합니다.
  • openssl x509 -in cert.pem -text -noout 명령어로 Basic Constraints: CA:TRUE 여부를 확인하세요.

5. extract 실행 후 시스템에 적용 안 됨

  • update-ca-trust extract는 시스템 내 /etc/ssl/certs/ca-bundle.crt 등을 갱신하지만,
    • 이를 사용하는 앱(OpenSSL, curl 등)만 영향을 받음
    • Java는 전혀 영향을 받지 않습니다. (cacerts 별도 관리)

빠르게 점검하는 체크리스트

항목점검
.crt 파일이 PEM 형식인가요?
파일에 -----BEGIN CERTIFICATE----- 헤더가 있나요?
anchors 폴더에 위치했나요? (/etc/pki/ca-trust/source/anchors/)
update-ca-trust extract를 실행했나요?
openssl verify로 테스트해 봤나요?
적용 여부 테스트
openssl verify -CAfile /etc/ssl/certs/ca-bundle.crt your-target-cert.pem​

이 명령어로 시스템에 반영되었는지 테스트할 수 있습니다.

 

/etc/pki/ca-trust/extracted/java/cacerts 에 update-ca-trust extract로 your-cert.cer를 등록하는 방법
 
/etc/pki/ca-trust/extracted/java/cacerts 경로에 인증서를 등록하려는 경우, 이는 Java용 Trust Store에 해당하는 시스템 CA 통합 결과 파일입니다. 이 파일은 직접 수정하는 것이 아니라, update-ca-trust extract 명령으로 자동 생성되며, 다음 절차에 따라야 등록이 성공합니다.

 

목적:

update-ca-trust extract 실행 시 **/etc/pki/ca-trust/extracted/java/cacerts**에
your-cert.cer 인증서가 포함되도록 만드는 절차

등록 절차 요약

1. 인증서를 PEM 형식으로 준비

# 확인: PEM 형식인지 체크
grep "BEGIN CERTIFICATE" your-cert.cer

2. anchors 폴더에 복사

sudo cp your-cert.cer /etc/pki/ca-trust/source/anchors/​

⚠️ 반드시 .cer, .crt, .pem 확장자 중 하나여야 하고, PEM 형식이어야 합니다.

3. Trust Store 갱신

sudo update-ca-trust extract​

이 명령은 /etc/ssl/certs/ca-bundle.crt와 함께 /etc/pki/ca-trust/extracted/java/cacerts도 함께 갱신합니다.

4. 등록 성공 여부 확인

grep -A 1 "BEGIN CERTIFICATE" /etc/pki/ca-trust/extracted/java/cacerts | less​

또는, 파일 내부에 인증서 정보가 포함됐는지 openssl로 확인:

openssl x509 -in /etc/pki/ca-trust/extracted/java/cacerts -text -noout

(위 명령은 일부 시스템에서 오류 발생 가능 — 이 경우 단순 문자열 검색이 더 유효함)

인증서가 포함되지 않는 경우 주요 원인

원인설명
인증서 형식이 DER openssl x509 -inform der로 확인 및 PEM 변환 필요
인증서에 CA:TRUE가 없음 루트 또는 중간 CA 인증서가 아닌 경우 무시됨
파일 위치 또는 확장자 오류 /anchors/가 아닌 위치거나 확장자가 비표준일 경우 무시됨
필요시 PEM 변환
openssl x509 -in your-cert.cer -inform der -out your-cert.pem -outform pem
sudo cp your-cert.pem /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract

결론

/etc/pki/ca-trust/extracted/java/cacerts는 수동 수정 대상이 아니며,
PEM 인증서를 anchors/에 넣고 update-ca-trust extract를 실행해야 반영됩니다.

728x90
반응형
728x90
반응형
Linux 시스템의 cacerts 파일은 Java 신뢰할 수 있는 인증서 저장소 (Java TrustStore) 입니다. 오래된 인증서를 제거하고 최신 인증서를 관리하는 것은 보안상 매우 중요합니다.

 

인증서 제거 절차

1. keytool 명령어 확인

Java TrustStore는 keytool로 관리합니다.
우선 keytool 경로와 Java 환경을 확인합니다.

which keytool
java -version

예시 TrustStore 경로:
/etc/alternatives/java_sdk/jre/lib/security/cacerts

2. 현재 저장된 인증서 목록 확인

sudo keytool -list -keystore /etc/alternatives/java_sdk/jre/lib/security/cacerts -storepass changeit
  • 기본 패스워드: changeit (변경했으면 해당 패스워드 사용)
  • 주요 정보:
    • 별칭 (Alias)
    • 만료일
    • 인증기관 정보

3. 제거할 인증서 결정

  • 예전 인증서를 별칭(Alias) 기준으로 제거합니다.
  • 목록에서 예전 인증서를 찾고 별칭을 메모해 두세요.

4. 인증서 삭제 명령어

sudo keytool -delete -alias <alias_name> -keystore /etc/alternatives/java_sdk/jre/lib/security/cacerts -storepass changeit
  • <alias_name>: 삭제할 인증서의 별칭
  • 예시:
sudo keytool -delete -alias old_cert -keystore /etc/alternatives/java_sdk/jre/lib/security/cacerts -storepass changeit

5. 삭제 후 확인

sudo keytool -list -keystore /etc/alternatives/java_sdk/jre/lib/security/cacerts -storepass changeit

삭제된 인증서가 목록에서 사라졌는지 반드시 확인하세요.

📌 주의 사항

  • cacerts는 시스템 전역 Java 인증서 저장소입니다. 삭제 전 반드시 백업 하시기 바랍니다.
sudo cp /etc/alternatives/java_sdk/jre/lib/security/cacerts /etc/alternatives/java_sdk/jre/lib/security/cacerts.bak​
  • 패스워드를 변경했을 경우, changeit 대신 새 패스워드를 사용 하시기 바랍니다.
  • 일부 시스템에서는 경로가 다를 수 있습니다. 확인 후 정확한 경로 사용 필요.
728x90
반응형
728x90
반응형

 

START_DT START_TIME END_DT END_TIME
20250427 001003 20250427 001238
20250427 001003 20250427 001120
20250427 001003 20250427 001145
20250427 001500 20250427 005432

 

값중에서 START_TIME과 END_TIME의 차이를 초로 계산하는 방법

 

START_DT START_TIME END_DT END_TIME 차이 (초)
20250427 001003 20250427 001238 155
20250427 001003 20250427 001120 77
20250427 001003 20250427 001145 102
20250427 001500 20250427 005432 2372

 

Excel 함수로 변환 공식

만약 A1 셀에 021320처럼 숫자 형태로 입력되어 있다고 가정할 때, 이를 초(second)로 변환하는 공식은 다음과 같습니다:

=INT(A1/10000)*3600 + INT(MOD(A1,10000)/100)*60 + MOD(A1,100)

설명

부분의미
INT(A1/10000) 시(hour) 추출
MOD(A1,10000)/100 분(minute) 추출
MOD(A1,100) 초(second) 추출
각각 시는 ×3600, 분은 ×60을 해서 모두 초로 변환 후 합산  

두 값의 초 차이 구하는 공식

예를 들어,

  • A1 = 021320
  • B1 = 021428
    이렇게 두 값이 있다고 하면, 두 값의 초 차이를 구하는 공식은:
=(INT(B1/10000)*3600 + INT(MOD(B1,10000)/100)*60 + MOD(B1,100)) 
- (INT(A1/10000)*3600 + INT(MOD(A1,10000)/100)*60 + MOD(A1,100))

결과

  • 위 수식을 입력하면,
  • B1 - A1의 초 단위 차이가 바로 계산됩니다.

추가 팁

  • 결과를 분:초 형식으로 보고 싶으면 =TEXT(초값/86400,"[mm]:ss") 형식으로 변환할 수도 있습니다.
  • 예를 들어 위 공식 결과가 68초라면,
    =TEXT(68/86400,"[mm]:ss") 로 01:08처럼 표시할 수 있습니다.

결과를 시:분:초 (hh:mm:ss) 형식으로 변환

엑셀에서는 시간 = 초 / 86400 을 하면 시간 형식으로 바꿀 수 있습니다.
(하루 = 24시간 × 60분 × 60초 = 86400초)

=TEXT(
   ((INT(B1/10000)*3600 + INT(MOD(B1,10000)/100)*60 + MOD(B1,100)) 
   - (INT(A1/10000)*3600 + INT(MOD(A1,10000)/100)*60 + MOD(A1,100))) / 86400,
   "hh:mm:ss"
)

결과 예시

위 식을 적용하면 668초 → 00:11:08 로 출력됩니다.

추가 팁

  • TEXT(..., "hh:mm:ss")로 표시 형식을 지정하지 않으면 엑셀이 소수로 인식할 수 있으므로 반드시 TEXT로 감싸거나, 셀 서식을 **사용자 지정 → hh:mm:ss**로 설정하세요.
728x90
반응형
728x90
반응형

HTTP Request Smuggling (요청 스머글링)이란?

**HTTP 요청 스머글링(HTTP Request Smuggling, HRS)**이란,
**프론트엔드 서버(리버스 프록시, 로드 밸런서 등)**와 백엔드 서버(애플리케이션 서버)
HTTP 요청 해석 차이점을 악용하여 요청을 변조하거나 몰래 끼워 넣는 공격 기법을 의미합니다.

간단히 말하면,

"앞단 서버는 하나의 요청이라 생각했지만, 뒷단 서버는 두 개 이상의 요청으로 인식하여
공격자가 숨겨둔 악의적 요청이 몰래 처리되는 것"
이라고 할 수 있습니다.

어떻게 발생하는가?

HTTP 요청 본문의 길이를 명시하는 Content-Length 헤더와
요청을 여러 개로 구분하는 Transfer-Encoding: chunked 헤더의 해석 차이를 이용합니다.

  • 프론트 서버와 백엔드 서버가 서로 다르게 이 두 헤더를 해석하면,
  • 공격자가 숨긴 두 번째 요청이 정상 요청에 끼워 넣어져 처리될 수 있습니다.

예시 흐름

POST / HTTP/1.1
Host: example.com
Content-Length: 50
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
Host: example.com
 
  • 프론트 서버는 Content-Length를 기준으로 해석하여 요청 완료라 판단하지만,
  • 백엔드 서버는 Transfer-Encoding을 기준으로 해석하여 뒤의 숨은 GET 요청을 별개로 처리할 수 있습니다.

주요 공격 결과

공격 효과설명
요청 가로채기 다른 사용자의 요청을 탈취할 수 있습니다.
세션 하이재킹 세션 토큰 탈취 가능.
캐시 포이즈닝 잘못된 응답을 캐시하여 불특정 다수에게 악성 응답을 제공할 수 있습니다.
비인가 요청 전송 관리자 페이지 접근, CSRF 보조 공격 등.

방어 및 대응 방법

대응 방법세부 설명
단일 길이 기준 강제화 Content-Length 또는 Transfer-Encoding 중 하나만 허용.
HTTP 요청 일관성 검사 서버 간 동일한 해석 기준 유지 (엄격한 RFC 준수).
최신 웹서버/프록시 업데이트 nginx, Apache, HAProxy 등의 보안 패치 적용.
WAF 규칙 강화 WAF(Web Application Firewall)에서 의심 요청 차단.
input validation 강화 HTTP 요청 헤더와 바디를 철저히 검증.

덧붙여

HTTP Request Smuggling은 2005년에 처음 발견되었으나,
2020년대 이후 클라우드 환경, API Gateway, Reverse Proxy 사용 증가로 인해 다시 부각되었습니다.
특히 Android 앱에서도 백엔드와 통신할 때 리버스 프록시를 거치는 경우, 서버 측 대응이 매우 중요합니다.

 

추가로

Android App 관점에서 HTTP Request Smuggling 대응 가이드

1. 앱 내부 네트워크 통신 라이브러리 설정 강화

Android 앱은 보통 OkHttp, Retrofit, HttpURLConnection 등을 통하여 서버와 통신합니다.
이를 사용하는 경우, 기본 설정만으로는 일부 우회 시도가 가능할 수도 있으므로, 아래를 꼭 지켜야 합니다.

OkHttp / Retrofit 대응

  • HTTP/1.1 또는 HTTP/2 명시적 사용 (HTTP/0.9, HTTP/1.0은 지원 차단)
  • Transfer-Encoding: chunked 사용 최소화
  • Content-Length 헤더의 일관성 확보 (명시적 지정 권장)
val client = OkHttpClient.Builder()
    .protocols(listOf(Protocol.HTTP_1_1, Protocol.HTTP_2))
    .build()
  • Interceptor 추가로 비정상 요청 방어
class HeaderValidationInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        val headers = request.headers

        // 의심스러운 헤더 검증
        if (headers.names().any { it.equals("Transfer-Encoding", ignoreCase = true) }
            && headers.names().any { it.equals("Content-Length", ignoreCase = true) }) {
            throw IOException("Invalid HTTP headers detected: Smuggling risk.")
        }

        return chain.proceed(request)
    }
}

// 적용 예시
val safeClient = OkHttpClient.Builder()
    .addInterceptor(HeaderValidationInterceptor())
    .build()

 

2. 서버와 통신 시 HTTPS 강제 사용

  • 반드시 HTTPS 통신만 허용할 것.
  • 앱의 network_security_config.xml을 설정하여 **Cleartext Traffic(HTTP)**을 차단할 것.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
  • AndroidManifest.xml에도 반영
<application
    android:networkSecurityConfig="@xml/network_security_config"
    android:usesCleartextTraffic="false">
 

3. 서버 측 검증 동시 강화

비록 앱에서 요청을 조심하더라도,
**서버(백엔드)**가 최종적으로 요청을 검증하고 해석하므로 서버단에서도 반드시 다음을 해야 합니다 :

서버 측 조치설명
Proxy, LB 업데이트 nginx, HAProxy 등을 최신 버전으로 유지.
Content-Length/Transfer-Encoding 혼용 차단 둘 중 하나만 허용하거나, 둘 모두 존재할 경우 요청 거부.
Request size 제한 요청 본문 크기에 상한 설정 (예: 8KB 제한).
경계 테스트 수행 BurpSuite, OWASP ZAP 등으로 Smuggling 테스트.

4. 취약점 대응 주기적 점검

  • 앱과 서버 모두 대상으로 OWASP ASVS 4.0 기준을 활용하여 정기 점검을 수행할 것.
  • OWASP HTTP Request Smuggling Cheat Sheet를 참조하여 공격 패턴 업데이트 및 방어할 것.

HTTP Request Smuggling Cheat Sheet (OWASP)

맺음말

"애초에 요청이 올바르게 구성되도록 하고, 서버가 의심스러운 요청을 철벽같이 막아내는 것이
HTTP Request Smuggling을 완전히 차단하는 길"입니다.

 

Android 앱에서도 '안전한 요청 생성'은 매우 중요하니,
앱 단에서부터 안전한 통신을 기본으로 삼고, 서버와의 협력 체계를 단단히 다지는 것이 필수라 할수 있습니다.

728x90
반응형
728x90
반응형

jQuery 1.4에서 jQuery 3.5(또는 3.x 최신 버전)로 업그레이드하는 데 소요되는 시간은 웹 애플리케이션의 규모, jQuery 의존도, 사용자 정의 코드의 복잡도에 따라 달라집니다. 다음은 일반적인 상황에서의 추정과 주요 고려사항입니다.

예상 소요 시간

업무 범위작업 항목예상 소요 시간
사전 분석 및 계획 사용 중인 jQuery 기능 목록화, 호환성 확인 0.5 ~ 1일
라이브러리 교체 및 기본 테스트 jQuery 3.5로 교체, Migrate 플러그인 적용 0.5일
기능 점검 및 수정 비호환 API, deprecated 기능 수정 (예: .bind(), .size(), .live() 등) 1 ~ 3일
UI/UX 테스트 주요 브라우저 및 기기 호환성 점검 1 ~ 2일
최종 배포 및 리그레션 테스트 CI/CD 배포 및 회귀 테스트 0.5 ~ 1일

총 예상 기간: 약 3 ~ 7일 (기준: 중간 규모 단일 SPA 또는 jQuery 위주의 레거시 웹사이트 기준)


주요 고려사항

1. jQuery Migrate 플러그인 도입

  • jquery-migrate-3.4.1.js를 먼저 삽입하여 deprecated 기능을 경고로 확인
  • 콘솔 로그에서 호환성 경고를 통해 수정 대상 API 파악 가능

2. 대체 API 매핑

제거된 기능대체 방법
.size() .length
.bind() / .unbind() .on() / .off()
.live() .on() (동적 요소에 대한 이벤트 바인딩 시 주의)
.toggle() (2개 이상의 함수 인자) 커스텀 함수로 대체 필요

3. jQuery 플러그인 호환성

  • 사용하는 타사 플러그인이 jQuery 3.x와 호환되는지 확인
  • 오래된 플러그인은 최신 버전이나 다른 대안으로 교체 필요

  • 가능한 경우 jQuery 제거를 고려해도 좋습니다 (예: Vue, React, vanilla JS 대체).
  • 다수의 페이지에 공통으로 로딩되는 경우, 점진적 전환(모듈 단위)보다는 전면 교체가 효율적일 수 있습니다.
  • 레거시 시스템에서는 jQuery 1.x 코드 스타일이 많이 섞여 있어 예상보다 수정량이 많을 수 있습니다.
728x90
반응형
728x90
반응형

리눅스에서 지정한 날짜 이전에 변경된 파일을 찾으려면 find 명령어를 -newermt 옵션과 조합하여 사용할 수 있습니다.

예시: 2023년 12월 31일 이전에 변경된 파일 찾기

find /path/to/search -type f ! -newermt "2024-01-01"

이 명령어는 2024-01-01 보다 이전에 마지막으로 수정된 파일들을 찾습니다.
! -newermt는 지정한 날짜 이전이라는 의미입니다.

설명

  • /path/to/search: 검색할 디렉토리 (예: . 현재 디렉토리)
  • -type f: 파일만 찾음 (디렉토리는 제외)
  • -newermt "YYYY-MM-DD": 해당 날짜 이후 수정된 파일
  • ! -newermt "YYYY-MM-DD": 해당 날짜 이전 수정된 파일

예시 사용

# 현재 디렉토리에서 2024년 1월 1일 이전에 수정된 파일 찾기 
find . -type f ! -newermt "2024-01-01"​

날짜와 시간까지 지정하고 싶다면?

find . -type f ! -newermt "2024-01-01 15:00"​

 

필요하다면 특정 확장자나 이름 패턴도 추가할 수 있어요:

# .log 파일 중에서 2024년 1월 1일 이전에 수정된 것 
find . -type f -name "*.log" ! -newermt "2024-01-01"​
728x90
반응형
728x90
반응형

 

brew에서 Package 설치 방법

brew install tree

 

brew에서 Package 제거 방법

 

우선 설치된 목록 확인 - brew list

% brew list
==> Formulae
autoconf		graphite2	libslirp	mysql-client	python@3.9
automake		guile		libssh		ncurses		qemu
bdw-gc			harfbuzz	libssh2		nettle		qt@5
c-ares			icu4c@76	libtasn1	nghttp2		readline
ca-certificates		isl		libtiff		ninja		ruby
cairo			jansson		libtool		nmap		snappy
capstone		jemalloc	libunistring	oniguruma	socat
cask			jenv		libusb		openblas	sqlite
cmake			jmeter		libx11		openjdk		telnet
cocoapods		jpeg		libxau		openjpeg	tesseract
coreutils		jpeg-turbo	libxcb		openssl@1.1	tesseract-lang
dlib			jq		libxdmcp	openssl@3	tree
dtc			leptonica	libxext		p11-kit		tree-sitter
emacs			libarchive	libxrender	pango		unbound
fontconfig		libb2		libyaml		pcre		vde
freetype		libcbor		little-cms2	pcre2		webp
fribidi			libev		llvm		pipx		wget
gcc			libevent	lua		pixman		xorgproto
gdbm			libffi		lz4		pkg-config	xz
gettext			libfido2	lzo		protobuf	z3
giflib			libidn2		m4		protobuf@21	zlib
git			liblinear	maven		putty		zsh-syntax-highlighting
glib			libmpc		md4c		pyqt@5		zstd
gmp			libnghttp2	mpdecimal	python@3.11
gnutls			libomp		mpfr		python@3.12
gradle			libpng		mysql		python@3.13

==> Casks
anaconda	flutter		temurin		temurin17	temurin@11	temurin@8
chromedriver	ngrok		temurin11	temurin8	temurin@17

 

brew list를 통해서 나온 결과는 설치한 package 목록이 나타나게 되며, 설치된 종류로 Formulae, Casks 가 있습니다.

 

 

Formulae 는 Mac 용 패키지 매니저이며, 터미널에서 패키지를 설치합니다. 패키지를 다운로드하고 컴파일 하는 방법 (바이너리를 받아 설치시키는 방법도 가능함)

  • ex) brew install git, brew install python3

Casks 는 homebrew의 확장으로 Mac용 GUI 애플리케이션을 명령어로 설치합니다. formula와 유사하지만 컴파일이 아닌 단일 바이너리를 설치하는 방법

  • ex) brew cask install google-chrome

오픈소스의 경우 Formulae 비중이 높고 패키지 설치 파일이나 바이너리로 배포되는 앱의 경우 Cask를 이용하는 경우가 많습니다.

 

제거할 package 이름을 확인한 다음 brew uninstall 을 이용하여서 제거

brew uninstall tree

 

 

728x90
반응형
728x90
반응형

인증(Authentication)과 인가 (Authorization, 권한 부여) 비교 – 특징 및 차이점

인증과 인가(혹은 권한 부여) 무엇이 다를까요? 인증 단계에서는 사용자의 신원을 확인합니다. 인가 권한 부여 단계에서는 신원이 확인된 사용자에게 리소스에 액세스할 있는 권한을 부여합니다.

인증과 인가가 비슷하게 들릴 수도 있지만 IAM(Identity and Access Management) 환경에서는 명확히 구분되는 보안 프로세스입니다.

인증에 대한 정의

인증은 사용자의 신원을 검증하는 행위로서 보안 프로세스에서 번째 단계입니다

인증 프로세스는 다음과 같이 구성됩니다.

  • 비밀번호사용자 이름과 비밀번호는 가장 많이 사용되는 인증 요소입니다. 사용자가 데이터를 올바르게 입력하면 시스템은 아이덴티티가 유효하다고 판단하고 액세스를 허용합니다.
  • 일회용 . 단일 세션이나 트랜잭션에 한하여 액세스를 허용합니다.
  • 인증 액세스를 허용하는 외부 기관을 통해 보안 코드를 생성합니다.
  • 생체인식사용자가 시스템에 액세스하기 위해 지문이나 망막 스캔을 제출합니다

상황에 따라 인증 요소를 2가지 이상 성공적으로 확인해야만 시스템에 액세스할 있는 경우도 있습니다. 이러한 다중 요소 인증(MFA) 요건이 배포되어 비밀번호의 한계를 넘어 보안을 강화하는 경우도 많습니다.

인가 (권한 부여) 대한 정의

시스템 보안에서 인가란, 사용자에게 특정 리소스나 기능에 액세스할 있는 권한을 부여하는 프로세스를 말합니다. 용어는 흔히 액세스 제어나 클라이언트 권한을 서로 대체하여 사용되기도 합니다.

대표적으로, 서버에서 특정 파일을 다운로드할 있는 권한을 부여하거나, 개별 사용자에게 관리자 권한으로 애플리케이션에 액세스할 있는 권한을 부여하는 경우가 여기에 해당합니다.

보안 환경에서 권한 인증은 항상 인증 이후에 진행되어야 합니다. 사용자가 먼저 자신의 자격 증명을 입증하면 기업의 관리자가 해당 사용자에게 요청한 리소스에 액세스할 있는 권한을 부여합니다.

 

 

인증과 인가의 비교

인증과 인가는 로그인 프로세스에서 서로 다른 단계입니다. 따라서 IAM 솔루션을 성공적으로 구현하려면 둘의 차이점을 알고 있어야 합니다.

이를 비유적으로 설명해보겠습니다.

여기 가족이 휴가를 떠나 집에 홀로 남겨진 반려 동물을 보살피기 위해 누군가가 잠긴 문으로 다가가고 있습니다. 사람에게 필요한 것은 다음과 같습니다.

  • 열쇠 형태의 인증 필요합니다. 자격 증명을 정확하게 입력하는 사용자에 한해서 액세스가 허용되는 것처럼 현관 자물쇠에 맞는 열쇠를 가진 사람에게만 접근이 허용됩니다.
  • 출입 허가에 해당하는 인가 권한 부여가 필요합니다. 일단 안으로 들어가면 주방에 가서 반려 동물 사료가 보관된 찻장을 있는 권한 인증을 받게 됩니다. 하지만 침실에 들어가서 낮잠을 있는 권한은 없습니다

위의 예에서 인증과 권한 인증은 함께 작동합니다. 반려 동물 관리인은 집에 들어갈 있는 권한(인증) 있으며, 일단 내부로 입장하면 특정 영역에 접근할 있습니다(권한 인증).

  인증 (Authentication) 인가 (Authorization)
기능 자격 증명 확인 권한 허가/거부
진행 방식 비밀번호, 생체인식, 일회용 또는 보안 팀에서 관리하는 설정 사용
사용자가 있는가? 아니오
사용자가 직접 변경할 있는가? 부분적으로 가능 불가능 
데이터 전송 ID 토큰 사용 액세스 토큰 사용 

 

시스템도 동일한 방식으로 이러한 개념을 구현하므로 IAM 관리자는 가지 프로세스의 활용 방식에 대해 알고 있어야 합니다.

  • 인증선택한 인증 요건과 관련하여 적합한 자격 증명을 입력하는 직원에게 기업 시스템에 대한 액세스를 허용합니다.
  • 인가 (권한 부여). 부서별 파일에 액세스할 있는 권한을 부여하고, 필요할 경우 금융 정보 등의 기밀 데이터에 대한 액세스 권한도 갖습니다. 직원은 업무 수행에 필요한 파일에도 액세스할 있어야 합니다

인증과 인가의 차이점에 대해 알았다면 이제 프로세스를 확실하게 지원할 있는 IAM 솔루션을 구현해야 합니다. 이를 통해 기업의 데이터 유출을 막고 직원의 생산성을 더욱 높일 있습니다.

Okta 통한 권한 부여

Okta Lifecycle Management에서는 사용자 권한을 한눈에 확인하여 필요에 따라 시스템과 툴에 대한 액세스를 손쉽게 허용하거나 취소할 있습니다. 또한 Okta Adaptive MFA (Multi-factor Authentication, 다중 인증 요소)에서는 선택한 인증 요소를 통해 인프라를 안전하게 보호할 있습니다

예를 들어 기업 자격 증명과 음성 인식을 모두 사용해 인증에 성공하는 사용자에 한하여 생산 오더에 액세스하도록 허용할 있습니다

728x90
반응형

+ Recent posts