- 2024.06.24.보안 day552024년 06월 24일 10시 19분 22초에 업로드 된 글입니다.작성자: 202401to07
오늘은 PAM , 셀리눅스
PAM (장착형 인증모듈) : 중요 포인트 : pam_tally2 / 복잡성
pluggable authentication module
리눅스 상에 인증방법을 제공하는 인증모듈
정책에 따라서 정책에 맞는 인증 방식을 제공
구성파일
/etc/pam.d => 적재된 서비스 pam 설정파일
/lib/security
/lib64/security => PAM에 의해 호출되는 라이브러리 파일 (.so) [모듈]
/etc/security => pam모듈 실행에 필요한 추가 설정 파일128 mkdir /backup
129 cp -a /etc/pam.d/ /backup/
130 cd /etc/pam.d/
131 vi passwd#password substack system-auth password required pam_cracklib.so try_first_pass retry=3 type=SEVAS_LINUX
***위같은 경우는 비번을 변경해도 적용이 안됨***
[root@SEVAS210 pam.d]# cat passwd #%PAM-1.0 password required pam_cracklib.so try_first_pass retry=3 type=SEVAS_LINUX auth include system-auth account include system-auth password substack system-auth -password optional pam_gnome_keyring.so
** 위치를 바꿔준뒤에 주석을 풀어주면 적용이 됨****
passwd
passwd sevas
다시 10.10.10.10 에서 sevas로 로그인후
passwd하면 sevas 비번과 SEVAS_LINUX의 비번을 묻는다
테스트 후 vi passwd 원복하기 ~
[TYPE] PAM에 어떤 타입의 인증이 사용될것인지 선언
auth : 사용자 인증에 대한 타입
account : 인증이후 계정관리 수행 (접속관리)
서비스에 대한 접근 허가/제한
session : 서비스 시행전과 직후에 필요한 작업
(mount/로그인/로그아웃,로그기록등등....)
password : 인증토큰 갱신시 필요, 주로 auth 모듈과 연결되서 사용됨
(패스워드 변경 모듈 결정)
[control] 모듈실행 결과 (성공/실패)에 대한 행동 지침
required 모듈 실패시 다른모듈 인증요청 수행하나 최종적으로 거부 /일단 다 요구하는데 하나라도 실패면 결과는 무조건 실패가 나온다 , 보통 required를 많이 함
(성공시에는 다음 모듈 호출)
모듈 실패 = 거부 모듈성공 = 다음모듈 호출
requisite 모듈 실패시 즉시 실패 (성공시에는 다음 모듈 호출)
optional 선택사항으로 모듈의 성공/실패가 불분명시 모듈의 결과에 따라 결정 (보통 안써)
sufficient 모듈 인증 성공시 즉시 인증
단 required의 실패 이후에 호출된 경우나 모듈 실패는 인증에 영향 X
include 다른 PAM설정을 불러올때 적용
[module PATH] 지정한 PAM 라이브러리를 호출 (/lib64/security)
env 환경변수 호출
unix.so 사용자에게 ID/Password 질의 응답내용 검증 (auth에서 사용)
permit.so 무조건 성공
deny.so 무조건 실패 (인증 마지막에 사용)
access.so access control table 사용 가능
사용자 계정/호스트/도메인을 통해 시스템 접근 허용(account에 사용)
limits.so 자원제한 (쓰기 어려워 잘안씀)
listfile.so 파일 리스트 확인 후 허가/ 거부 (ftpusers)
[module_argument] = 모듈마다 다르다
debug 오류 발생시 syslog에 추가정보 제공
no_warn 응용프로그램 경고 메세지 X
use_first_pass 앞에 실행된 모듈로 PW정보를 받으나 틀린경우 재입력 요청 X (auth,password에서 사용)
try_first_pass 앞에 실행된 모듈로 PW정보를 받으나 틀린경우 재입력 요청 (auth,password 에서 사용)
추가적으로 try_first_pass retry=3 식으로 쓰임
use_uid 인증하는 UID가 아닌 현재 사용중이 UID로 대응
PAM 실습 )
sevas , test 계정에 대해 ssh 접속 막기 (putty 안들어가짐)
/etc/pam.d/sshdauth required pam_listfile.so item=user sense=deny file=/login/sevas onerr=succeed
140 useradd test
141 useradd sevas
142 useradd sevas2
143 passwd test
144 passwd sevas
145 passwd sevas2
146 vi /login/sevas
147 mkdir /login
148 cat > /login/sevas
sevas
test
^C결과 : sevas, test 는 putty안들어가짐
sevas2는 들어가짐
본사 DMZ) 10.10.10.10 vm1 ->192.168.10.10 / 192.168.10.2 vm 8
2. /bin/bash가 아닌 쉘을 쓰는 사용자에 대해 ssh 접속불가
[root@www pam.d]# chsh sevas2
Changing shell for sevas2.
New shell [/bin/bash]: /bin/csh
Shell changed.
[root@www pam.d]# tail -3 /etc/passwd |grep sevas
sevas2:x:1002:1002::/home/sevas2:/bin/csh
sevas2로 로그인 확인
vi /etc/pam.d/sshd
#auth required pam_listfile.so item=user sense=deny file=/login/sevas onerr=succeed
auth required pam_listfile.so item=shell sense=allow file=/login/sevas onerr=succeed
vi /login/sevas
/bin/bash
sevas 로그인 확인 (접속가능)
sevas2 로그인 확인 (막힘)
vi /etc/pam.d/passwd
pam_permit.so : 무조건 통과 :
auth sufficient pam_permit.so
pam_deny.so : 무조건 거부 :
auth requisite pam_deny.so
pam_rootok.so : root인 경우에만 성공
auth sufficient pam_rootok.so #auth sufficient pam_wheel.so trust use_uid
pam_wheel.so wheel 그룹 사용자 적용
#auth sufficient pam_rootok.so auth sufficient pam_wheel.so trust use_uid
usermod -G wheel sevas2
sevas2에서 su 를 쓰면 그룹에 가입되서 비번 (X) 통과
pam_succeed_if.so : 조건 식
auth required pam_succeed_if.so uid > 1000 auth required pam_sepermit.so
quiet_fail 결과에 따라 syslog에 알리지 않음
quiet_success 결과에 따라 syslog에 남김pam_issue.so
auth optional pam_issue.so issue=/etc/sevas_issue
auth type에서만 사용가능 / 주로 optional 로 설정이 됨.
사용자로그인전 issue파일 내용 출력*** centos7로 오면서 디폴트 값으로 /etc/issue 바뀜 ****
pam_motd.so
session optional pam_motd.so motd=/etc/motd2
주로 session에서만 사용가능
인증할때 /etc/motd2 내용 출력 / 기본적으로 /etc/motd 를 쓰면 인증완료후 메세지를 띄움
**issue 는 로그인전 타이틀 내용 출력을 하고
motd 는 인증완료후 내용출력하는부분이 다름 **pam_access.so
auth requied pam_access.so
모든 type에서 사용가능
+ - : 허가 거부
origins 터미널명(tty),컴퓨터이름,도메인,아이피,ALL,LOCAL
설정은 /etc/security/access.conf에서 설정
[ permission(+/-) : users : origins ]
ex)
+ : ALL EXCEPT sevas sevas2 : 100.100.100. (sevas와 sevas2를 제외하고 다른사람은 100.100.100.0/24 에서만 접속을 허가한다)
- : ALL : ALL (모든 사용자는 어디에서든 접속을 허용하지 않는다)
*** 둘다 설정해줘야되용~ ***pam_unix.so
auth sufficent pam_unix.so nullok try_first_pass
사용자에게 ID/Password 를 질의하고 응답 받은 정보를 검증
nullok : null 사용 허용
try_first_pass : 이전 모듈에서 입력받은 패스워드로 먼저 인증을 시도하고 없으면 사용자에게 패스워드를 물어봄
pam_tally2 (계정 잠금 정책)
system-auth 는 로컬
password-auth 는 원격실습 ) 로컬계정 3번 실패시 접속불가 (root는 제외)
vi system-auth
auth required pam_env.so auth required pam_tally2.so deny=3 unlock auth sufficient pam_unix.so nullok try_first_pass
(임계값 1분 제한시에는 unlock 대신 unlock_time=60 )
결과 : sevas 비번 3회 이상 비번 틀리면 막힘
pam_tally2 로 확인 가능
횟수 초기화
pam_tally2 -u sevas -r
PW복잡성 설정
pam_pwquality.so : 비밀번호 복잡성 모듈
vi system-auth
#password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=SEVAS_PASSWORD minlen=10 dcredit=-1 ucredit=-1 ocredit=-1
*** 설정파일로 바꿀때는 /etc/security/pwquality.conf 를 바꿔줘도 됨
etry : 패스워드 입력 실패 시 재시도횟수
difok : 기존 패스워드와 비교. 기본값10 (50%)
minlen : 크레디트를 더한 패스워드최소길이
dcredit : 정수 / 숫자에 주어지는 크레디트값. 기본 1
udredit : 영어대문자에 주어지는 크레디트값
lcredit : 영어 소문자에 주어지는 크레디트값
ocredit : 숫자, 영어대/소문자를 제외한 특수문자-1 값을 주면 반드시 해당하는 문자를 포함
적용 결과 :
정리 : PAM은 인증 방법 설정하는 인증 모듈이다 ~
모듈 종류가 너무 많다~
SELINUX
리눅스 보안
보안 약함
그동안은 항상 셀리눅스 비활성화 하고 실습 했었다
cat /etc/selinux/config
#SELINUX=enforcing SELINUX=disabled
getsebool -a
[root@localhost login]# ll / |head -3
합계 24
drwxr-xr-x 3 root root 19 6월 23 18:10 backup
lrwxrwxrwx. 1 root root 7 4월 24 17:01 bin -> usr/bin^ 이 점 : '.selinux' 표시
SELINUX
enforcing - SELinux security policy is enforced. 강제적활성 <------------------- 기본값
permissive - SELinux prints warnings instead of enforcing. 로깅수행
disabled - No SELinux policy is loaded. 비활성화SELINUXTYPE
targeted - Targeted processes are protected, 부분 프로세스 수행 <------------------- 기본값
mls - Multi Level Security protection. 레벨에 따른 안전 보호
실습을 위해 이제 se리눅스 키자
vi /etc/selinux/config
SELINUX=enforcing #SELINUX=disabled
init 6
sestatus : 상태확인
setenforce 1 : enforcing 정책설정
setenforce 0 : permissive 정책설정getenforce : 정책확인
**재부팅 시 유지는 되지 않음 **
selinux 콘솔 패키지
yum install setools-console
rpm -ql setools-console
yum install policycoreutils-python
rpm -ql policycoreutils-python
cd /login
ls -Z : 디렉토리 보안 설정을 봄ps -efZ : 해당 데몬 정책 확인할때 사용
[root@localhost login]# mkdir /samba
[root@localhost login]# ls -dZ /samba
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /sambaunconfined_u 사용자 seinfo -u , semanage login -l
object_r 시스템 자원을 통제subject_r 사용자나 프로세스 통제
samba_share_t 타입
s0 레벨사용자
selinux 사용자 ID
마지막에 _u로 표시
unconfined => 제한되지 않은역활
객체와 주체의 역활
마지막에 _r로 표시
object_r 시스템 자원을 통제
subject_r 사용자나 프로세스 통제
RBAC접근 통제를 사용함
ps -Z레벨
MLS (다중레벨보안(레벨로 보안 지정)) / MCS (여러 카테고리 보안(카테고리로 보안 지정))
S0:S0-0 : 낮은 보안
s0-s0:c0.c1023 낮은보안 - 높은보안
s0:c0.c1023 : 높은 보안
ACCESS 접근제어
: DAC(계정으로 관리)/ MAC (권한으로 관리 )
DAC (Discretionary Access Control) => 개인 그룹 (계정/그룹) = 임의적 접근 통제 =setuid / Ex) rootkit관리자는 맘대로 일반은 제한적
장 : 정보레벨을 손쉽게 제어
단 : 중앙집중적인 접근 제어가 불가능
관리자의 권한에 의존 트로이목마,악성코드,서비스적 침투에 약함
MAC (MAC - Mandatory Access Control)=> 주체 오브젝트 권한 (보통 셀리눅스 / 서비스 및 시스템 범위 )=강제접근 통제 (소유권허권으로 강제 통제)
소유권 허가권 주는것
장 : 중앙집중적인 관리
단 : 객체단위 세밀한 설정불가
정책으로 인한 성능저하및 구현의 복잡성
정보 보안 모델
**계정이 아닌 문서 이야기이다
쓰기=보안등급변경
읽기=보안등급확인**
1. 벨라파둘라(기밀성(인가된사용자만접근허용) 접근통제 모델)
단순보안 규칙 : 주체는 자신보다 높은 등급의 객체를 읽을 수 없음 /낮은 권한을 가진 주체가 높은 레벨의 객체에 접근 하는것을 통제
==> 하이라키 Hierarchy 구조
상위레벨 읽기금지정책 : 낮은 보안레벨에서 높은 보안문서 읽기 금지
하위레벨 쓰기금지정책: 높은 보안모델에서 낮은 보안모델 쓰기 금지낮은 권한이 높은거 못봐 / 위가 아래 감시 가능
2. 비바(무결성(변조x위조x) 통제 모델)
무결성에 기반하여 주체는 자신보다 낮은 등급에 있는 객체를 읽을수 없음
하위레벨 읽기 금지정책 : 낮은 보안레벨에서 높은보안문서 읽기 가능 낮은 보안문서 읽기 불가
상위레벨 쓰기 금지정책 : 낮은 보안레벨의 문서에서 높은 보안문서로 높일수 없음
낮은 보안문서로 낮출순 있음 (한번 내려감 못올라감)한번 올라가면 낮은건 신경안쓰는거 / 내려갈수는있는데한번내려가면 못 올라감
https://blog.naver.com/365blackstar/223332723434
ㄴ 여기 자세함 이거 보셈
yum install setools-console
[정책리스트보기]
seinfo -r 역활정책
seinfo -t 타입정책
seinfo -a 속성정책[보안정책로그]
tail -4 /var/log/audit/audit.log
yum install setroubleshoot-server (보안로그 분석툴)
[객체에 대한 정책 초기화]
restorecon -v [파일/디렉토리]
[복구시 자동 설정 정책(제안만해주고 바꾸지 않음)]
matchpathcon [파일/디렉토리]
[객체별 사전에 설정된 정책 조회]
semanage fcontext -l | grep /var/www
실습 )
정책은 상속된다
디렉토리마다 정책 다르다
ps -ZC httpd : 프로세스 정책확인
http://192.168.10.10/setest.html
chcon -t admin_home_t /var/www/html/setest.html : 파일 타입 변경
http://192.168.10.10/setest.html ===> forbidden 뜸
restorecon -v setest.html : 정책 초기화 (원복)
chcon -t admin_home_t /var/www/html/setest.html
matchpathcon setest.html : 제안만 해줌 바꾸지 않음
[ 객체별 사전에(원래) 설정된 정책 조회 ]
semanage fcontext -l | grep /var/www
tail -5 /var/log/messages
sealert -l 5c6203f6-49ad-4aac-907e-02f9702fa6dc : 제안 자세히 보기
포트 정책 바꾸기
[ 특정포트 정책확인 ]
seinfo --portcon=80[ 사용가능 포트 확인 ]
semanage port -l | grep http_port_t
semanage port -l | grep http포트에 대한 허용정책 확인
sesearch -A -t http_port_t -s httpd_t -d
sesearch -A -t http_cache_port_t -s httpd_t -dvi /etc/httpd/conf/httpd.conf
42 #Listen 80
43 Listen 8888
service httpd restart ===> 에러가 나면서 permission denied 발생이걸 해야돼
semanage port -a -t http_port_t -p tcp 8888 :허용포트 추가
semanage port -l | grep http_port_t : 추가한것 확인
netstat -lntup |grep httpd : 추가한것 확인
ㄴ 8888 되는것 확인 가능
귀찮고 복잡하지?
그래서 처음부터 selinux를 disabled하고 시작하는거야
셀리눅스 끝~
이제 도커랑 쿠버네티스 시작
도커설치
도커 이미지
도커허브 올리는거
'보안' 카테고리의 다른 글
2024.06.28.보안 day59 (0) 2024.06.28 2024.06.27.보안 day58 (0) 2024.06.27 2024.06.21.보안 day54 (0) 2024.06.21 2024.06.20.보안 day53 (0) 2024.06.20 2024.06.19.보안 day52 (0) 2024.06.19 다음글이 없습니다.이전글이 없습니다.댓글