728x90

리눅스는 참 요물입니다.
확장 가능한 지점들이 참 많아서 매력적이기도 하구요. 
최근에 기본적인 쉘 인증 이외에 
MFA 적용 방법을 찾다가 PAM을 처음 접해봤습니다. 

What is PAM?
Pluggable Authentication Module의 약어로 리눅스 시스템이 사용자 인증에 대한 정책을 정의하고 인증 방법 및 절차에 대한 구성을 할 수 있게 해주는 모듈. 이름에 적혀 있는 것처럼 Pluggable이기 때문에 3rd party의 다양한 인증, 인가 솔루션들을 연동하는 지점이 되기도 함 

PAM 의 기본 구성 

PAM은 다양한 서버의 기능별로 구성이 가능합니다. 
/etc/pam.d/ 경로 하위에는 인증을 요구하는 
여러가지 서버, 애플리케이션에 대한 구성 파일이 존재합니다. 
가령, 쉘 접근의 인증과 관련된 구성은 /etc/pam.d/sshd 에 위치하고 있습니다. 
ChatGPT 가 알려준 sshd PAM 구성 파일은 다음과 같을 수 있습니다.

#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
session    optional     pam_keyinit.so force revoke
session    include      password-auth

암호처럼 보이는 이 문서는 컬럼별로 다음과 같이 이해하면 됩니다.

# Module Type   # Control Flag    # Module Name        # Module Argument
auth            required          pam_sepermit.so
account         required          pam_nologin.so
password        include           password-auth
session         optional          pam_keyinit.so       force revoke

 

Module Type

모듈의 타입은 크게 4가지가 있습니다. 
인증을 요청하고 검증하는 방법을 정의하는 auth 
계정에 대한 접근 통제 및 정책을 관리하는 account
비빌번호 갱신 등에 관한 내용을 관리하는 password
인증 전후 수행해야 하는 일을 정의하는 session

Control Flag

제어 플레그는 지정된 모듈을 반드시 수행해야 하는지 
아니면 옵셔널하게 수행해야 하는지 등을 정의합니다. 

Module Name

모듈 이름은 실행할 모듈의 이름입니다. 
리눅스에 내장된 모듈도 있을 수 있고 
서드파티 사업자가 제공했거나 
직접 만든 모듈을 지정할 수도 있습니다. 

Module Argument 

모듈 실행시 필요한 매개변수를 전달할 수도 있습니다. 
이는 필수는 아니며 모듈에 따라 달라지게 됩니다. 


https://medium.com/@avirzayev/linux-pam-how-to-create-an-authentication-module-cc132115bdc5

728x90
728x90

여러 보안 도구들은 패키지를 최신 버전으로 유지할 것을 강요(?)합니다.
아무래도 노출된 취약점들이 구버전 패키지에 대한 경우가 많기 때문이죠.
어김 없이 기억력은 쇠퇴하고 또 한번 yum 으로 패키지 설치에 실패하여 기록을 남겨둡니다.


yum 업데이트시 에러 : Error unpacking rpm package...

보통은 yum 으로 패키지 설치가 잘 됩니다. 
권한 문제가 있더라도 sudo로 왠만하면 설치가 됩니다. 
하지만 간혹 이유 없이 되지 않을때가 있습니다. 
다음과 같은 에러와 함께...

$ sudo yum update openssh-clients
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
...
...
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : openssh-clients-7.4p1-23.el7_9.x86_64                                                            1/2
Error unpacking rpm package openssh-clients-7.4p1-23.el7_9.x86_64
error: unpacking of archive failed on file /etc/ssh/ssh_config: cpio: rename

압축 해제가 되지 않았다의 메세지가 눈에 보입니다. 
그리고 특정한 경로의 파일도 언급됩니다. 
원인이 뭘까요? 정답은 파일의 속성 문제였습니다.

속성 확인 : lsattr / 속성 교체 : chattr

파일의 속성을 확인하는 명령은 lsattr입니다.
아마도 불변(immutable) 속성이 지정되어 있어서 
파일의 교체가 실패했을 거라고 추정이 됩니다.

확인하고 교체해 보겠습니다.

$ sudo lsattr /etc/ssh/ssh_config
----i----------- /etc/ssh/ssh_config
$ sudo chattr -i /etc/ssh/ssh_config
$ sudo lsattr /etc/ssh/ssh_config
---------------- /etc/ssh/ssh_config

네, 이후 yum 명령으로 업데이트가 잘 되는 것을 확인할 수 있었습니다. 
아마도 어떤 이유로든 immutable 이 지정된 것일 수 있으니
관리자와 싸우지 않기 위해 다시 속성을 걸어줍니다.

$ sudo chattr +i /etc/ssh/ssh_config
$ sudo lsattr /etc/ssh/ssh_config
----i----------- /etc/ssh/ssh_config

뺄때 -i 였으니 본능적으로 +i 를 하니 잘 수행됩니다. 
다시 immutable 상태가 되었으니 작업을 마무리하고 커피 한잔...

#linux #lsattr #chattr #immutable #yum #yum_error

728x90
728x90
728x90
728x90

CentOS를 비롯한 Redhat 계열에서는 Yum을 이용해 패키지를 관리합니다.
간혹 yum 으로 패키지를 설치하다 패키지 데이터베이스를 열 수 없다는 에러를 만날 수 있습니다.
영문 기준으로 rpmdb open failed 라는 메세지가 바로 그것이죠.

이런 상황을 해결하는 가장 쉬운 방법은 RPM DB 삭제입니다.
DB를 삭제한다고 뭔가 큰 일이 일어나는 것은 아닙니다. 
DB 자체에 뭔가 이슈가 생긴 경우이기 때문에 
DB 파일 삭제후 다시 생성하면 됩니다. 

rm -f /var/lib/rpm/_db*
rpm -vv --rebuilddb
728x90

+ Recent posts