PAM (Pluggable Authentication Module)
- 사용자 인증을 모듈화 하고 관리자가 응용프로그램들의 사용자 인증 방법을 선택하고 설정할 수 있다.
즉, 사용자를 인증하고 사용자의 서비스에 대한 액세스를 제어하는 모듈이다.
/etc/pam.d - 어플리케이션별 pam설정 파일 위치 디렉토리
/lib/security - pam 모듈 디렉토리
-------------------------------------------------------------------
관련 사이트 : http://kldp.org/HOWTO/html/User-Authentication-HOWTO/x106.html
-------------------------------------------------------------------
기본 형식
[module-type] [control-flag] [module-path] [module-arguments] module-type : PAM 이 어떤 타입의 인증이 사용될 기성인가를 지정한다. - auth : 사용자인증에 사용하며 올바른 패스워드인지 문도 확인하는 절차를 가진다. - account : 사용자의 접근 허가 여부를 확인하며, 계정만료, 특정 시간대에 접근이 허용되었는지 여부를 확인한다. - password : 패스워드를 설정하고 확인한다. - session : 사용자가 인증 받기 전후에 필요한 홈 디렉토리 마운트, 메일박스 생성 등의 유저섹션을 구성하기 위해 부가적인 작업을 수행한다. control-flag : PAM에서 사용되는 모듈들이 결과에 따라 어떠한 동작을 취해야 하는지를 지시한다. - required : 인증이 거부되기 전에 PAM이 이 서비스에 등록된 다른 모든 모듈들을 요규함에도 불고하고 실패할 경우 인증을 거부하도록 한다. - requisite : 이 모듈을 이용하는 인증이 실패할 경우, 즉시 인증을 거부하도록 한다. - sufficient : 이전에 요청되어진 모듈이 실패하더라도 이 모듈에 의해서 인증이 성공할 경우, PAM은 인증을 승인한다. - optional : 이 모듈이 성공 또는 실패하는지는 그 모듈이 서비스에 대한 형식에 유일한 모듈일 경우에 해당한다.(성공 여부는 상관없음) module-path : PAM에게 어떤 모둘을 사용할 것인지 그리고 그것을 어디서 찾을 지를 알려준다. 대부분 구성은 로그인 구성 파일의 경우와 마찬가지로 모듈의 이름만 가지고 있다. 이와 같은 경우, PAM은 기본 PAM 모듈의 디렉토리에서 (/lib/security) 모듈을 찾는다. module-arguments : 모듈에게 전달되는 인수를 나타낸다. 각각의 모듈들은 각각의 인수를 가지고 있다. |
1. pam_nologin.so & pam_securetty.so
- /etc/nologin 파일이 존재하면 root 만 로그인이 가능하고 일반 사용자는 로그인이 거부된다.
[root@server3 pam.d]# vi /etc/pam.d/login #%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so - /etc/securetty 파일에 기록된 내용과 비교하여 root 사용자가 로그인 가능한 콘솔을 확인한다. auth include system-auth account required pam_nologin.so - 이 설정으로 인해 /etc/nologin 파일이 있으면 사용자들의 접근이 거부된다. account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session include system-auth session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session optional pam_keyinit.so force revoke [root@server3 pam.d]# touch /etc/nologin - /etc/nologin 파일이 생성되면 root 사용자만 로그인이 가능하다. /etc/nologin 파일의 내용과는 상관없이 파일의 생성 유무만 판단한다. [root@server3 pam.d]# ls -l /etc/nologin -rw-r--r-- 1 root root 0 1월 29 11:47 /etc/nologin |
2. pam_listfile.so
- 임의의 파일에 대해 서비스를 허가 하거나 거부하는 방법을 제공한다.
[root@server3 ~]# vi /etc/pam.d/vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include system-auth account include system-auth session include system-auth session required pam_loginuid.so 참고 - item=user / tty / rhost / ruser / group / shell 아이템을 지정한다. 사용자, 터미널, 원격사용자, 그룹, 쉘 등을 사용할 수 있다. - sense=deny / allow 센스를 지정한다. allow 또는 deny 값을 넣을 수 있다. - file=/etc/vsftpd/ftpusers 아이템에 맞는 임의의 파일을 지정한다. - onerr=succeed / fail sense 값에 반대로 적어둔다. |
3. ssh 접속 제한
root 계정에 ssh 로그인 금지하기 [root@server3 pam.d]# vi /etc/ssh/sshd_config 36 # Authentication: 37 38 #LoginGraceTime 2m 39 #PermitRootLogin yes 40 PermitRootLogin no - ssh 사용시 root로의 접속은 막고 일반 사용사의 접속은 가능하다.(#ssh 10.10.33.2 -l test2) 하지만 접속을 막기 원하는 일반 사용자는 선택할수 없다. 41 #StrictModes yes 42 #MaxAuthTries 6 ------------------------------------------------------------------- PAM을 사용한 루트 계정 로그인 금지하기 [root@server3 pam.d]# vi /etc/pam.d/sshd #%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/ssh/sshusers onerr=succeed - 이부분을 추가해주고 /etc/ssh/sshusers를 생성해준다.(파일 경로나 이름은 마음대로 설정하면 된다.) auth include system-auth account required pam_nologin.so account include system-auth password include system-auth session optional pam_keyinit.so force revoke session include system-auth session required pam_loginuid.so [root@server3 pam.d]# vi /etc/ssh/sshusers - 파일을 새로 만들어 준다. test2 - ssh 접속을 제한할 사용자를 입력해준다. 이렇게 해주면 ssh 접속을 원하지 않는 일반 사용자의 접속을 선택해서 막을 수 있다. |
4. pam_rootok.so
- root가 암호 입력없이 해당 서비스에 접근을 허용할 때 사용한다.
[root@server3 ~]# vi /etc/pam.d/su #%PAM-1.0 auth sufficient pam_rootok.so - 이부분을 주석처리하면 root도 su명령어 사용시 패스워드를 입력해야 한다. # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth include system-auth account sufficient pam_succeed_if.so uid = 0 use_uid quiet account include system-auth password include system-auth session include system-auth session optional pam_xauth.so |
5. pam_time.so
- 특정 서비스에 대해 시간대 별로 접근 제어를 한다.
[root@server3 ~]# vi /etc/pam.d/login #%PAM-1.0 account required pam_time.so - /etc/pam.d/login 파일에 모듈 내용을 추가한다. auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth include system-auth account required pam_nologin.so account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session include system-auth session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session optional pam_keyinit.so force revoke [root@server3 ~]# vi /etc/security/time.conf - pam_time.so 모듈 환경설정 파일이다. #service;ttys;users;times - 형식에 맞게 추가해준다. login;tty* & !ttyp*;!root;Al0900-1800 - root 사용자를 제외한 모든 사용자는 매일 09시 부터 18시 까지만 콘솔 로그인이 가능하다. 참고 service : 규칙이 적용될 서비스의 이름을 지정한다. login, sshd 등 tty : 규칙을 적용할 터미널의 이름을 지정한다. tty*, ttyp*(pts:원격접속터미널) users : 적용할 사용자 이름을 지정한다. times : 언제 이 규칙을 적용할 것인가를 지정한다. (Al : 매일, Mo : 월, Th : 화, We : 수, Th : 목, Fr : 금, Sa : 토, Su : 일, Wk : 주중, Wd : 주말) !root : root를 제외한 모든 사용자 Al0900-1800 : Al : 매일, 0900-1800 : 09시 부터 18시까지의 시간 예) ssh 일반 사용자, 주중, 09-18 에만 접속가능하게... [root@server3 ~]# vi /etc/pam.d/sshd #%PAM-1.0 account required pam_time.so auth required pam_listfile.so item=user sense=deny file=/etc/ssh/sshusers onerr=succeed auth include system-auth account required pam_nologin.so account include system-auth password include system-auth session optional pam_keyinit.so force revoke session include system-auth session required pam_loginuid.so [root@server3 ~]# vi /etc/security/time.conf sshd;tty* & ttyp*;!root;Wk0900-1600 |
6. pam_limits.so
- 특정 서비스에 대해 자원을 제한 하거나 제어를 한다. 프로세스 수 및 메모리의 양을 제어하여 로콜에서의 컴파일이나 서비스 거부 공격등을 방지할 수 있다.
- 이 설정이 활성화 되어 있으면 가상 콘솔창에서 로그인 이 거부될 수 있다.
[root@server3 ~]# vi /etc/pam.d/login #%PAM-1.0 account required pam_limits.so - 모듈의 내용을 추가한다. account required pam_time.so auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth include system-auth account required pam_nologin.so account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session include system-auth session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session optional pam_keyinit.so force revoke [root@server3 ~]# vi /etc/security/limits.conf #Each line describes a limit for a user in the form: # #<domain> <type> <item> <value> - 형식에 맞게 추가해준다. test1 hard maxlogins 3 - test1 사용자는 동시 접속을 3개로 제한한다. 참고 domain : 사용자 명 또는 와일드카드 *, @group 등을 사용할 수 있다. type : soft, hard 값을 사용하며, soft limit 는 일반 유저가 변경할 수 있지만, hard limit는 root 사용자만 변경할 수 있다. item : 아이템을 사용하여 제한한다. (core : 코어파일, data : 데이터, fsize : 파일, rss : 메모리 사이즈, nproc : 프로세스 개수, maxlogins : 동시접속 개수) value : 제한 값을 지정한다. |
7. 기타
[root@server3 ~]# vi /etc/profile or .bash_profile TMOUT=3600 HISTSIZE=50 참고 TMOUT : 계정의 접속시간을 제한하는 경우에 추가해준다. 기본 단위는 초(sec)이다. HISTSIZE : 히스토리 값에 대해서 보안을 강화하기 위하여 변경해준다. ------------------------------------------------------------------- [root@server3 ~]# vi /etc/security console #vc/1 #vc/2 - 접속을 허용할 터미널만 설정하고 나머지는 주석처리하여 root 사용자의 터미널 접속을 제한한다. ------------------------------------------------------------------- |
'Linux > 보안' 카테고리의 다른 글
네트워크 서비스 보안 - ssh (0) | 2009.01.30 |
---|---|
네트워크 서비스 보안 - tcpdump (0) | 2009.01.30 |
네트워크 서비스 보안 - TCP_Wrapper (0) | 2009.01.30 |
사용자 보안 - 루트권한 제한(sudo) (0) | 2009.01.29 |
사용자 보안 - 패스워드 크랙 (0) | 2009.01.29 |
시스템 보안 - Kernel tuning (0) | 2009.01.23 |