PAM (Pluggable Authentication Module)
- 사용자 인증을 모듈화 하고 관리자가 응용프로그램들의 사용자 인증 방법을 선택하고 설정할 수 있다.
즉, 사용자를 인증하고 사용자의 서비스에 대한 액세스를 제어하는 모듈이다.
/etc/pam.d - 어플리케이션별 pam설정 파일 위치 디렉토리
/lib/security - pam 모듈 디렉토리
기본 형식
[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 접속을 원하지 않는 일반 사용자의 접속을 선택해서 막을 수 있다.
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 사용자의 터미널 접속을 제한한다. |
[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 사용자의 터미널 접속을 제한한다.
'배워서 남주자 > System 관리' 카테고리의 다른 글
[ulimit] 시스템 제한 설정 관련 확인 및 변경 (0) | 2018.03.23 |
---|---|
[Disk Speed] 하드디스크 속도 알아보기 (0) | 2018.03.23 |
[서비스 관리] systemclt (1) | 2018.03.23 |
[Single mode] 싱글모드 사용하기...( root 비번 변경 ) (0) | 2018.03.23 |
[시간/날짜 설정] timedatectl (0) | 2018.03.23 |