본문 바로가기

Oracle VM, Debian

Oracle VM 에 Debian 적재하기 1

반응형

하드웨어 모델 : Dell Inc. OptiPlex AIO Plus 7410

메모리 : 16.0GiB

프로세서 : 13th Gen Intel® Core™ i7-13700 × 24

그래픽 : AMD® Radeon rx 6500 / Mesa Intel® Graphics (RPL-S)

디스크 : 261.1 GB


OS : Ubuntu 22.04.3 LTS

OS - Type : 64-bit

GNOME Version : 42.9

Windowing System : X11


Oracle VM Version : 7.0.14 r161095 (Qt5.15.3)

Debian Version : 12.5.0.vdi

iso file : debian-12.5.0-amd64-netinst.iso


이번 노트는 Oralce VM 에 Debian 을 올려서 가상 머신을 생성하고,

LVM 설정과 비밀번호 관련 옵션을 설정하고자 한다


 

 

파티션 LVM(Logical Volume Manager) 설정 - 이부분은 가상머신 생성 과정에서 인터페이스에서 설정하는 것을 권장

 

암호화 논리 그룹 설정 (약 10GB)

 

그룹명 : LVMGroup  로 작성

 

root      -     3.1G   =>   /(root) 마운팅

home    -    1.4G   =>   /home 마운팅

var-log  -    1.3G   =>   /var/log (직접입력) 마운팅

var        -    976M   =>   /var 마운팅

srv        -    976M   =>   /srv 마운팅

tmp       -    976M   =>   /tmp 마운팅

swap     -   780M   =>   스왑영역 마운팅

 

디스크 파티션

 

파일시스템 파티션

 

Partition

- 큰 디스크를 효율적으로 관리하기 위해서 하나의 물리적 디스크 (PV, Physical Volume)를

하나를 논리적 디스크(LV, Logical Volume)로 여러개로 나누어 쓸 수 있으며,

나누어진 디스크를 통해 하나의 디스크에 OS를 두 개 이상 설치하는 등의 기능을 사용할 수 있음

(windows 와 Linux 멀티 부팅, 맥북에서 MACOS 와 windows 로 듀얼 부팅 등)

 

<파티션 기본 구조>

 

HDD1

MBR Boot Sector Primary (Active) Extended (Logical1, 2, 3 ...)

         (boot loader)

 

HDD2

MBR Boot Sector Primary (Active)
MBR Extended (Logical1, 2, 3 ...)

 

 

Primary Partition : OS 가 부팅이 될 수 있는 파티션 (액티브 여부에 따라)

-> 부팅이 되는 OS 라면 꼭 만들어 줘야지 boot loader 가 파티션 바로 앞자리를 잡게 됨

-> main으로 가장 먼저 부팅이 되는 파티션을 꼭 Active 파티션으로 세팅되어야함

 

Extended Partition : 데이터가 저장되는 논리적(Logical) 파티션을 최대 4개까지 포함 가능

-> 부팅이 필요없는 데이터를 저장하기 위한 파티션

 

LVM

-  하나 이상의 물리적인 하드디스크를 하나의 논리적인 파티션으로 쓰기 위해서 디스크와 파티션을 관리

 

LVM 설정 후

fdisk -l

 

또는

lsblk

 

를 입력하면 현재 파티션의 상태를 확인할 수 있다.


명령어로 파티션 설정

 

디스크 크기 확인

fdisk -l

 

용량확인 (disk free)

df (비트로 출력)

<또는>

df -h (데이터 단위로 출력)

 

df -T (파일 시스템 유형)

df -T | grep "^/dev"

 

출력 내용 중 확인되는 <tmpfs> 는 가상의 파일 시스템으로, 디스크에 실제 존재하는 것이 아닌 메모리의 일부를 디스크로 만들어서 용량이 작지만 빠르고 빈번하게 처리하는 부분들 (공유메모리, 동기화를 위한 락 파일)을 메모리 파일 시스템에서 관리하기 위해서 사용하는 것

 

 

추가된 디스크 인식 및 확인

(인터페이스에서 디스크 추가 후에 확인을 위한 작업으로 위의 LVM 에서 파티션 확인 명령어를 사용하면 됨)

 

[파티션 생성]

fdisk /dev/sda (입력)

<결과>
Welcome to fdisk (util-linux 2.38.1).
Change will remain in memory only, util you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartiting is probably a bad idea.
It\'s recommended to umount all file systems, and swapoff all swap
partitions on this disk.

command (m for help): m (옵션 설명을 보기위해 m 입력 후 [enter])

Help:

  Dos (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag
   
  Generic
   d   delete a partition
   F   list free unpartitioned sapce
   l   list known partition types
   n   add a new partition
   p   print the aprtition tatble
   t   chage a partiton table
   i   print information about a partition
   
  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)
   
  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file
   
  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes
  
  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty MBR (DOS) partition table
   s   create a new empty Sun partition table
 
command (m for help): n (새로 생성)
partition type
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbred from 5)
   
Select (default p) p (파티션 유형 primary로 선택 [enter])

Partition number (1-4, default 1): 1 (파티션 번호 선택 [enter])

First sector (2045-20971519, default 2048) : (용량설정 [enter])

Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): ([enter])
(기본으로 설정되어서 화면에 표시된 First sector 부터 가장 큰 sector 까지 전체 용량을 잡아줌)
(필요하다면 용량을 직접 MB, GB 등으로 입력하면 됨) 

create a new partiton 1 of type 'Linux' and of size 10 GiB.

Command (m for help): w (설정 저장 [enter])

The partition table has been altered.
Calling iodtl() to re-read partition table.
Syncing disk.

 

디스크 포맷 & 연결하기 (수동 mount)

 

mkfs.ext4 /dev/sdb1

또는

mkfs -t ext4/dev/sdb1
(ext4 파일 시스템 타입으로 시리얼 디스크의 두 번째 유형인 sdb, 그중에서도 첫 번째 파티션인 sdb1 을 포맷)

<결과>
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 2621184 4k blocks and 655360 inodes
Filesystem UUID: bc6c3452-16fe-4798-a3ab-1c4a2dd5727
Superblock backups stored on blocks:
		32768, 98304, 163840, 229376, 294912, 819200, 884736, 160532

Allocating group tables: done
Writing inode tables: done
Craeting journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

mkdir /data (마운트할 파일 생성)

mount /dev/sbd1 /data (/data 를 /sbd1 에 마운트)

ls -al data
합계 24
drwxr-xr-x  3 root root  4096 mm dd hh:mm .
drwxr-xr-x 15 root root  4096 mm dd hh:mm ..
drwx------  2 root root 16384 mm dd hh:mm lost+found
(lost+found 는 디스크에 손상된 파일이 생겼거나 할 때 저널링 파일 시스템이 있는 기능들을 통해서 복구가
됐을 때 그 복구된 파일을 lost+fount 디렉토리 안에 복원을 시키기 위해서 만들어지는 디렉토리로 아무것도
들어있지 않으며, 아무것도 없는 것이 좋음)

 

자동 mount (부팅시마다 하드디스크 자동 연결)

 

cat /etc/fstab (입력)

<결과>
# /etc/fstab: static file system information
#
# Use 'blkid' to print the universally unique indetifier for a
# device; this may be used with UUID= as a more see robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount (5).
# Please run 'systemctl daemon-reload' after making chagnes here.
#
# <file system> <mount point>   <type>  <options>      <dump>  <pass>
/dev/mapper/LVMGroup-root		ext4	errors=remount-ro	0	1
(여기서 부터 LVMGroup 내용들은 인터페이스에서 생성했던 LV 들임)
# /boot was on /dev/sda1 during installation
UUID=c0343537-f33e-4eb5-8e27-8e7decc5e566 /boot	ext2	defaults	0	2
/dev/mapper/LVMGroup-home /home		ext4	defaults	0	2
/dev/mapper/LVMGroup-srv /srv		ext4	defaults	0	2
/dev/mapper/LVMGroup-tmp /tmp		ext4	defaults	0	2
/dev/mapper/LVMGroup-var /var		ext4	defaults	0	2
/dev/mapper/LVMGroup-var--log /var/log	ext4	defaults	0	2
/dev/mapper/LVMGroup-swap none		swap	sw		0	0
/dev/sr0		/media/cdrom0	udf,iso9660 user,noauto

 

 

 

 

(TMI : 과거에는 물리적으로 전원을 끄고, 하드디스크를 탈부착 하던 시절이라 파티션이 필수였지만 요즘은 Hot Swap 방식에

전원이 인과되어 있는 상태에서 디스크를 자유롭게 탈부착 하는 방식이 많이 이용하게 되면서 파티션의 중요성과 활용성이 많이 떨어지게 되어 파티션없이 디스크를 통째로 파일 시스템으로 포맷해서 쓰는 방식을 많이 사용하고도 있음)


[계정 관련 명령어]

 

사용자계정 확인 문서 /etc/passwd

(TMI : 계정확인 문서명이 passwd 인 이유는 과거엔 계정과 패스워드를 한 파일에서 관리했던터라 당시의 파일명임)

(후에 보안이 취약해서 잦은 문제가 발생하여 password를 따로 관리하게 됐는데 그 파일이 /etc/shadow 파일임)


useradd <옵션> <생성하고자하는 계정>

-> 비밀번호 없이 바로 계정 추가되나 옵션없이 생성하면 기본값으로 계정이 추가되어 계정전환에서 에러가 발생함

 

useradd -D : 사용자 생성 기본값 확인

             (ubuntu ~14, 16 버전까지 기본 쉘이 /bin/sh 가 아닌 /bin/bash 로 적용되는 버그가 존재함)

             (ubuntu 18 버전에 이 버그를 수정하였기에 이 전 버전에서는 아래에 있는 adduser 명령어를 사용할 것을 추천)

useradd -D -b /usr : 사용자 기본 홈 디렉토리 /usr 로 변경

useradd -D -s /bin/bash : 사용자 기본 쉘 bash 로 변경

useradd -D -e yyyy-mm-dd : 사용자 계정 만료일 설정

 

(TMI : 계정 생성시 참조하는 파일들 => /etc/default/useradd , /etc/login.defs , /etc/skel)

 

 

adduser <생성하고자하는 계정>

->  비밀번호를 작성후, 기타 옵션설정 후에 계정이 생성됨

 

계정에 대한 UID 번호는 1000 이후 번호로 계정생선순으로 할당받음


 

deluser <옵션> <계정명>

 

deluser <계정명>

-> 계정만 삭제할 뿐 계정의 파일들은 삭제하지 않음

-> 후에 같은 계정으로 생성시 남아있던 파일들에 매핑이되어 사용이 가능함(복구가능)

 

deluser <계정명> --remove-home

-> home 디렉토리 내용까지 삭제하므로 위와 같은 일이 발생하지 않음 (복구불가)

 

userdel <옵션> <계정명> 

 

userdel <계정명>

-> none-interactive 모드로 사용자 계정삭제시 home 디렉토리도 같이 삭제

 

userdel -f <계정명>

-> 로그인 중이더라도 계정 삭제

 

 

*참고*

UID 0                 : root

UID 1 ~ 99         : 고전적으로 사용되었던 service account (predefined)

UID 100 ~ 999   : 사용자에 필요에 의해 직접 정의하려는 계정들 (administrative and system accounts)

UID 1000 ~        : user


[group 관련 명령어]

 

group 은 group 에 속해있는 계정끼리 같은 자원을 공유할 목적으로 만듦

 

group 에는  primary 그룹과 secondary 그룹이 존재하는데

 

 기본적으로 사용자 자신이 포함된 그룹을 primary 그룹이라고 하며 (보통 그룹명도 계정명과 같음)

 

사용자가 다른 권한을 사용하기 위해 포함된 그룹들을 secondary 그룹이라고 함

 

일반적으로 UID 와 GID 가 같은 경우가 많으나 

 

직접 GID 를 추가시엔 UID 와 GID 는 달라짐


 

groups

-> 현재 계정이 속해있는 그룹 확인

 

groups <계정명>

-> <계정명>이 속해있는 그룹확인

 

id

-> 현재 계정의 UID, GID, 속해있는 group들 확인

 

id <계정명>

-> <계정명>의 UID, GID, 속해있는 group들 확인

 

group <생성하고자하는 그룹명> 

-> 생성시 기존에 있던 그룹중 마지막으로 생성된 그룹의 UID 이후의 번호로 GID 를 할당받음 ( default 499 이후 번호)

 

group <-r> <생성하고자하는 그룹명>

-> 시스템용 그룹생성

-> 생성시 GID 를 0 ~499 번호중 할당되지 않은 번호의 제일 높은 번호를 줌

 

addgroup <옵션> <그룹명>

- 스크립트 파일을 통해 동작하는 것으로 실제 동작은 groupadd를 통해 실행됨

(TMI : 정확히는 groupadd 를 호출하는 것이 아닌 adduser 스크립트의 symbolic link 를 통해서 호출됨)

 

groupadd <옵션> <그룹명> (실제 addgroup 의 바이너리)


groupdel <옵션> <그룹명>

-> <그룹명> 삭제

 

gpasswd -d <계정명> <그룹명>


 

그룹 계정 / 사용자 할당 (or 사용자 정보 수정) ( 그룹에 사용자 추가)

 

usermod <옵션> <계정명>

 

usermod -c <name change> <사용자계정>

-> 사용자 이름 수정

 

usermod -a -G <그룹명> <사용자 계정> 

-> <그룹명> 에 <사용자 계정> 추가


 

사용자를 그룹에서 제거하고자 할 때

 

deluser <사용자 계정> <그룹명>

-> <그룹명> 에서 <사용자 계정> 제거

(TMI : 한국어 번여 오류 존재)

 

ex) deluser <사용자 계정> <그룹명>

한국어 설정시 결과 = '<사용자계정' 그룹에서 '<그룹명>' 사용자 제거중 ...

완료.

 

- 처럼 그룹명과 사용자 계정 위치가 바뀌어서 나타남 (번역의 오류일 뿐 정상적인 처리)


이 과정부턴 root 계정을 통해 구현하였기에, 일반 계정으로는 작업할 수 없는 경우도 있습니다.

 

 

비밀번호 만료 기간 확인 및 설정

 

(참고 : 계정 비밀번호 관련 문서 /etc/shadow (암호화 되어있어서 직관하진 못함))

 

chage 명령어

옵션 내용
- 지정한 계정의 정보 표시
-d 최근 passwd 를 바꾼 날을 수정, 날짜로 지정시 'YYYY-MM-DD' 로 입력, 숫자로 지정할 경우 1970.01.01 부터  + <기간> 으로 지정
-E 계정의 만료일 설정, 날짜로 지정시 'YYYY-MM-DD' 로 입력, 숫자로 지정할 경우 1970.01.01 부터  + <기간> 으로 지정
-m passwd 변경일로 부터 최소 며칠이 경과해야 다른 패스워드로 변경 가능한지를 설정, 패스워드 의무사용 일수 설정 옵션 
-M passwd 최종 변경일로부터 passwd 변경 없이 사용할 수 있는 최대 일수 설정 옵션
-I passwd 만료일까지 passwd 를 바꾸지 않아 계정이 만료되어 비활성화 되는 부분에서 유예기간을 지정하는 옵션
-W passwd 만료 며칠 전부터 사용자에게 경고 메시지를 보낼지 설정

ex) root 계정으로 확인

 

[기간 확인 명령어]

 

chage -l <계정명>

chage -l root (명령어 입력)

<결과>
Last password change						: Apr 12, 2024
Password expires						: never
Password inactive						: never
Account expires							: never
Minimim number of days between password change			: 0
Maximum number of days between password change			: 999999
Number of days of warning before password expires		: 7

 

 

chage -l <계정명>| rep -i "^password expires" (결과중에 'password expires' 로 시작하는 것만(^) 표시)

chage -l root | grep -i "^Password expires"


Password expires						: never

 

Password expires                                 : never (현재 기간 설정이 없어 never 표시)


[만료기간 설정 명령어]

 

chage -M<기간> <계정>

 

설정 후 변경된 내용 확인(2024.04.15 기준)

chage -M30 root (명령어 입력)

chage -l root (명령어 입력)

<결과>
Last password change						: Apr 12, 2024
Password expires						: May 12, 2024
Password inactive						: never
Account expires							: never
Minimim number of days between password change			: 0
Maximum number of days between password change			: 30
Number of days of warning before password expires		: 7

 

<기간> 을 '-M99999' 설정 시 기간제한 없음 (never 표시)


[만료기간 최소 사용 일수 명령어]

 

chage -m<기간> <계정>

 

설정 후 변경된 내용 확인

chage -m2 root (명령어 입력)

chage -l root (명령어 입력)

<결과>
Last password change						: Apr 12, 2024
Password expires						: Nay 12, 2024
Password inactive						: never
Account expires							: never
Minimim number of days between password change			: 2
Maximum number of days between password change			: 30
Number of days of warning before password expires		: 7

[만료 전 사용자에게 경고 메시지 보낼 날짜 설정]

 

chage -W<날짜 수> <계정>

 

설정 후 변경된 내용 확인

chage -W15 root (명령어 입력)

chage -l root (명령어 입력)

<결과>
Last password change						: Apr 12, 2024
Password expires						: Nay 12, 2024
Password inactive						: never
Account expires							: never
Minimim number of days between password change			: 2
Maximum number of days between password change			: 30
Number of days of warning before password expires		: 15

위의 명령문은 개별적인 유저에 적용하는 것이기 때문에 매번 설정해줘야 하는 번거러움이 있음

 

그래서 시스템적으로 일괄 적용시키는 방법이 있음. 

 

[기간 설정 방법]

 

/etc/login.defs 설정 

 

[복잡도 설정 방법]

/etc/security/pwquality.conf 설정 과

/etc/pam.d/common-password 에서 pam_pwquality.so 설정 방법이 있음

둘의 차이점은 (본인의 개인적인 테스트 결과를 토대로 설명하는지라 뇌피셜임을 미리 말씀드립니다.)

etc/security/pwquality.conf 설정은 강제성이 없다는 것이다

즉, 계정 생성 중 비밀번호 작성시 설정된 비밀번호 룰에 맞지않으면 경고문만 발생할 뿐

계정 생성에는 문제없이 진행된다는 얘기

그에 반해

/etc/pam.d/common-password 에서 pam_pwquality.so 설정은

룰에 맞지않으면 패스워드를 다시 작성하겠끔 작동하므로 

룰에 맞지않으면 계정 생성이 안됨

 

둘 다 같은 동작을 하나

(reboot 해야 적용, 안해도 적용이 되는 차이가 있다는 풍문이 있으니 궁금하시면 확인해보시는 걸로^^)

 

root 는 비밀번호 관련해서 룰이 어긋날 경우 경고문만 발생할 뿐 계정 생성에는 문제없이 진행됨

일반사용자가 비밀번호 관련해서 룰이 어긋날 경우 다시 작성하겠끔 작동함

(일반사용자가 sudo 권한으로 비밀번호 설정시 root 동작과 같은 처리가 됨)

 

- 확인 방법은 비밀번호 변경을 try 해보는 것을 추천 (root , 계정 별로 각각)

 

각 계정으로 로그인한 뒤

 

passwd

 

로 해보면 일반 사용자는 비밀번호를 재입력해야됨 


우선 login.defs 부터 설정해보자

 

(이 시스템을 적용한 시점에서 생성되는 계정들부터 시스템의 관리가 받아지기 때문에 이 파일을 수정하기 전 생성된

root 와 계정들은 개별적으로 위의 chage 명령어를 통해서 날짜를 맞춰주거나 passwd 로 변경하면 동일하게 적용이 됨)

 

설정하고자하는 기간 옵션

1. 비밀번호 최대 사용기간(갱신 주기) 30일

2. 비밀번호 최소 사용기간 2일(비밀번호 변경 후 재변경 가능 기간)

3. 사용기간 만료 7일 전 경고 메시지 

4. 비밀번호 최소 길이 10문자 설정

cat /etc/login.defs | grep PASS(입력)

<결과>
#		PASS_MAX_DAYS	MAXIMUM number of days of days a password may be used.
#		PASS_MIN_DAYS	MINIMUM number of days od days allowed between password changes.
#		PASS_WARN_AGE	Number of days warning given before a password expires.
PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_WARN_AGE	7
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
#PASS_MIN_LEN
#PASS_MAX_LEN
 NO_PASSWORD_CONSOLE

 

grep 을 통해 전체에서 "PASS" 부분만 확인

 

vi 를 통해 전문을 확인해서 위에 해당하는 구문으로 이동 후 수정

 

vi /etc/login.defs(입력)

<결과>
#
# /etc.login.defs - Configuration control definitions for the login package.
# Three items must be defined: MAIL_DIR, ENV_SUPTH, and ENV_PATH.
# If unspecified, some arbitrary (and possibly incorrect) value will
# be assumed. all other items are optional - if not specified then
# the described action or option will be inhibited.
#
# Comment lines (lines beginning with "#") and blank lines are ignored.
#
# Modified for Linux. --marekm

# REQUIRED for useradd/userdel/usermod
#	Directory where mailboxes reside, _or_ name of file, relative to the
#	home directory. If you _do_ define MAIL_DIR and MAIL_FILE,
#	MAIL_DIR takes precedence.
#
#	Essentially:
#		- MAIL_DIR defines the location of users mail spool files
#		  (for mbox use) by appending the username to MAIL_DIR as defined
#		  below.
#		- MAIL_FILE defines the location of the users main spool files as the
#		  fully-qualified filename obtained by prepending the user home
#         	  directory before $MAIL_FILE
#
# NOTE: This is no more used for setting up users MAIL environment variable
#	which is, starting from shadow 4.0.12-1 in Debian, entirely the
#       job of the pam_mail PAM modules
#       see default PAM configuration files provided for 
#       login, su, etc.
#
# This is a temporary situation: setting these variables will soon
# move to /etc/default/useradd and the variables will then be
# no more supported
MAIL_DIR		/var/mail
#MAIL_FILE		.mail

#
# Enable logging and display of /var/log/faillog login failure info.
# This option conflicts with the pam_rally PAM module.
#
FAILLOG_ENAB		yes

#
# Enable display of unknown usernames when login failures are recorded.
#
# WARNING: Unknown usernames may become world readable.
# See #290803 and #298773 for details about how this could become a security
# concern
LOG_UKFAIL_ENAB		no

#
# Enable logging of successful logins
#
LOG_OK_LOGINS		no

#
# Enable "syslog" logging of su activity - in addition to sulog file logging.
#
SYSLOG_SU_ENAB		yes
SYSLOG_SG_ENAB		yes

#
# If defined, all su activity is logged to this file.
#
#SULOG_FILE	/var/log/sulog

# If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100 tty01".
#
#TTYTYPE_FILE	/etc/ttytype

#
# If defined, login failures will be logged here in a utmp format
# last, when invoked as lastb, will read /var/log/btmp, so...
#
FTMP_FILE	/var/log/btmp

#
# If defined, the command name to display when running "su -", For
# example, if this is defined as "su" then a "pa" will display the
# command is "-su". If not defined, then "ps" would display the
# name of the shell actually being run, e.g. something like "-su".
#
US_NAME		su

#
# If defined, file which inhibits all the usual chatter during the login
# sequence. If a full pathname, the hushed mode will be enabled if the
# user's name or shell are found in the file. If not a full pathname, then
# hushed mode will be enabled if the file exists in the user's home directory.
#
HUSHLOGIN_FILE	.hushlogin
#HUSHLOGIN_FILE	/etc/hushlogins

#
# *REQUIRED* The default PATH settings, for superuser and normal users.
#
# (they are miniaml, add the rest in the shell startup files)
ENV_SUPATH	PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin
ENV_PATH	PATH=/usr/local/bin:/usr/bin:/usr/local/games:/usr/games

#
# Terminal permissions
#
#	TTYGROUP	Login tty will be assigned this group ownership.
#	TTYPERM		Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620.  Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
# In Debian /usr/bin/bsd-write or similar programs are setgid tty
# However, the default and recommended value for TTYPERM is still 0600
# to not allow anyone to write to anyone else console or terminal

# Users can still allow other people to write them by issuing 
# the "mesg y" command.

TTYGROUP	tty
TTYPERM		0600

#
# Login configuration initializations:
#
#	ERASECHAR	Terminal ERASE character ('\010' = backspace).
#	KILLCHAR	Terminal KILL character ('\025' = CTRL/U).
#	UMASK		Default "umask" value.
#
# The ERASECHAR and KILLCHAR are used only on System V machines.
# 
# UMASK is the default umask value for pam_umask and is used by
# useradd and newusers to set the mode of the new home directories.
# 022 is the "historical" value in Debian for UMASK
# 027, or even 077, could be considered better for privacy
# There is no One True Answer here : each sysadmin must make up his/her
# mind.
#
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.
#
# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
#
ERASECHAR	0177
KILLCHAR	025
UMASK		022

# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
# home directories.
# If HOME_MODE is not set, the value of UMASK is used to create the mode.
HOME_MODE	0700

#
# Password aging controls:
#
#	PASS_MAX_DAYS	Maximum number of days a password may be used.
#	PASS_MIN_DAYS	Minimum number of days allowed between password changes.
#	PASS_WARN_AGE	Number of days warning given before a password expires.
#
PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_WARN_AGE	7

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN			 1000
UID_MAX			60000
# System accounts
#SYS_UID_MIN		  100
#SYS_UID_MAX		  999
# Extra per user uids
SUB_UID_MIN		100000
SUB_UID_MAX		600100000
SUB_UID_COUNT		65536

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN			 1000
GID_MAX			60000
# System accounts
#SYS_GID_MIN		  100
#SYS_GID_MAX		  999
# Extra per group ids
SUB_UID_MIN		100000
SUB_UID_MAX		600100000
SUB_UID_COUNT		65536

#
# Max number of login retries if password is bad. This will most likely be
# overriden by PAM, since the default pam_unix module has it's own built
# in of 3 retries. However, this is a safe fallback in case you are using
# an authentication module that does not enforce PAM_MAXTRIES.
#
LOGIN_RETRIES		5

#
# Max time in seconds for login
#
LOGIN_TIMEOUT		60

#
# Which fields may be changed by regular users using chfn - use
# any combination of letters "frwh" (full name, room number, work
# phone, home phone).  If not defined, no changes are allowed.
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".

#
CHFN_RESTRICT		rwh

#
# Should login be allowed if we can't cd to the home directory?
# Default in no.
#
DEFAULT_HOME	yes

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD	/usr/sbin/userdel_local

#
# If set to yes, userdel will remove the user's group if it contains no
# more members, and useradd will create by default a group with the name
# of the user.
#
# Other former uses of this variable such as setting the umask when
# user==primary group are not used in PAM environments, such as Debian
#
USERGROUPS_ENAB yes

#
# Instead of the real user shell, the program specified by this parameter
# will be launched, although its visible name (argv[0]) will be the shell's.
# The Program may do whatever it wants (logging, additional authentification,
# banner, ...) before running the actual shell.
#
# FAKE_SHELL /bin/fakeshell

#
# If defined, either full pathname of a file containing device names or
# a ":" delimited list of device names.  Root logins will be allowed only
# upon these devices.
#
# This variable is used by login and su.
#
#CONSOLE	/etc/consoles
#CONSOLE	console:tty01:tty02:tty03:tty04

#
# List of groups to add to the user's supplementary group set
# when logging in on the console (as determined by the CONSOLE
# setting).  Default is none.
#
# Use with caution - it is possible for users to gain permanent
# access to these groups, even when not logged in on the console.
# How to do it is left as an exercise for the reader...
#
# This variable is used by login and su.
#
#CONSOLE_GROUPS		floppy:audio:cdrom

#
# If set to "yes", new passwords will be encrypted using the MD5-based
# algorithm compatible with the one used by recent releases of FreeBSD.
# It supports passwords of unlimited length and longer salt strings.
# Set to "no" if you need to copy encrypted passwords to other systems
# which don't understand the new algorithm.  Default is "no".
#
# This variable is deprecated. You should use ENCRYPT_METHOD.
#
#MD5_CRYPT_ENAB	no

# If set to MD5 , MD5-based algorithm will be used for encrypting password
# If set to SHA256, SHA256-based algorithm will be used for encrypting password
# If set to SHA512, SHA512-based algorithm will be used for encrypting password
# If set to BCRYPT, BCRYPT-based algorithm will be used for encrypting password
# If set to YESCRYPT, YESCRYPT-based algorithm will be used for encrypting password
# If set to DES, DES-based algorithm will be used for encrypting password (default)
# MD5 should not be used for new hashes, see crypt(5) for recommendations.
# Overrides the MD5_CRYPT_ENAB option
#
# Note: It is recommended to use a value consistent with
# the PAM modules configuration.
#
ENCRYPT_METHOD SHA512

#
# Only works if ENCRYPY_METHOD is set to SHA256 or SHA512.
#
# Define the number of SHA rounds.
# With a lot of rounds, it is more difficult to brute forcing the password.
# However, more CPU resources will be needed to authenticate users if 
# this value is increased.
#
# If not specified, the libc will choose the default number of rounds (5000),
# which is orders of magnitude too low for modern hardware.
# The values must be inside the 1000-999999999 range.
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
#
# SHA_CRYPT_MIN_ROUNDS 5000
# SHA_CRYPT_MAX_ROUNDS 5000

# Only works if ENCRYPT_METHOD is set to YESCRYPT.
#
# Define the YESCRYPT cost factor.
# With a higher cost factor, it is more difficult to brute-force the password.
# However, more CPU time and more memory will be needed to authenticate users
# if this value is increased.
#
# If not specified, a cost factor of 5 will be used.
# The value must be within the 1-11 range.
#
#YESCRYPT_COST_FACTOR 5

# The pwck(8) utility emits a warning for any system account with a home
# directory that does not exist. Some system accounts intentionally do
# not have a home directory. Such accounts may have this string as
# their home directory in /etc/passwd to avoid a spurious warning.
#
NONEXISTENT		/nonexistent

#
# Allow newuidmap and newgidmap when running under an alternative
# primary group.
#
#GRANT_AUX_GROUP_SUBIDS yes

#
# Prevents an empty password field to be interpreted as "no authentication
# required".
# Set to "yes" to prevent for all accounts
# Set to "superuser" to prevent for UID 0 / root (default)
# Set to "no" to not prevent for any account (dangerous, historical default)
PREVENT_NO_AUTH superuser

#
# Select the HMAC cryptography algorithm.
# Used ind pam_timestamp module to calculate the keyed-hash message
# authentication code.
#
# Note: It is recommended to check hmac(3) to see the possible algorithms
# that are available in your system.
#
#HMAC_CRYTO_ALGO SHA512

################# OBSOLETED BY PAM ##############
#						#
# These options are now handled by PAM. Please	#
# edit the appropriate file in /etc/pam.d/ to	#
# enable the equivelants of them.
#
###############

#MOTD_FILE
#DIALUPS_CHECK_ENAB
#LASTLOG_ENAB
#MAIL_CHECK_ENAB
#OBSCURE_CHECKS_ENAB
#PORTTIME_CHECKS_ENAB
#SU_WHEEL_ONLY
#CRACKLIB_DICTPATH
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
#ENVIRON_FILE
#NOLOGINS_FILE
#ISSUE_FILE
#PASS_MIN_LEN
#PASS_MAX_LEN
#ULIMIT
#ENV_HZ
#CHFN_AUTH
#CHSH_AUTH
#FAIL_DELAY

################# OBSOLETED #######################
#						  #
# These options are no more handled by shadow.    #
#                                                 #
# Shadow utilities will display a warning if they #
# still appear.                                   #
#                                                 #
###################################################

# CLOSE_SESSIONS
# LOGIN_STRING
# NO_PASSWORD_CONSOLE
# QMAIL_DIR

 

 

해석본 (with PAPAGO)

 

# /etc.login.defs - 로그인 패키지에 대한 구성 제어 정의입니다.
# MAIL_DIR, ENV_SUPTH 및 ENV_PATH의 세 가지 항목을 정의해야 합니다.
# 지정하지 않으면 일부 임의(및 잘못된 것일 수도 있음) 값이 가정됩니다. 
# 다른 모든 항목은 선택 사항입니다. 지정하지 않으면 설명된 작업 또는 옵션이 금지됩니다.
#
# 주석 행("#"로 시작하는 행) 및 공백 행은 무시됩니다.
#
# Linux용으로 수정되었습니다. --marekm

# user add/userdel/user mod에 필수
#	편지함이 존재하는 디렉토리, 파일 이름, 상대적인
#	홈 디렉토리. MAIL_DIR 및 MAIL_FILE을 정의하면,
#	MAIL_DIR이 우선합니다.
#
#	기본적으로:
#		- MAIL_DIR은 아래 정의된 대로 MAIL_DIR에 사용자 이름을 추가하여 사용자 메일 스풀 파일의 
#		  위치(폼박스 사용)를 정의합니다.
#		- MAIL_FILE은 사용자 메인 스풀 파일의 위치를 $MAIL_FILE 앞에 사용자 홈 디렉토리를 추가하여
#		  얻은 완전한 파일 이름으로 정의합니다
#
# 참고: 이것은 더 이상 사용자 MAIL 환경 변수 설정에 사용되지 않습니다. 즉, Debian의
#      shadow 4.0.12-1부터 시작하여 전체적으로 pam_mail PAM 모듈의 작업입니다
#	로그인, su 등에 제공되는 기본 PAM 구성 파일을 참조하십시오.
#
# 이는 일시적인 상황입니다. 이러한 변수를 설정하면 곧 /etc/default/useradd로 이동하고 
# 변수가 더 이상 지원되지 않습니다
MAIL_DIR		/var/mail
#MAIL_FILE		.mail

#
# /var/log/failelog 로그인 실패 정보를 기록하고 표시합니다.
# 이 옵션이 pam_rally PAM 모듈과 충돌합니다.
#
FAILLOG_ENAB		yes

#
로그인 실패 기록 시 알 수 없는 사용자 이름 표시를 활성화합니다.
#
# 경고: 알 수 없는 사용자 이름이 세계에서 읽을 수 있게 될 수 있습니다.
# 이 문제가 어떻게 보안 문제가 될 수 있는지에 대한 자세한 내용은 #290803 및 #298773을 참조하십시오
LOG_UKFAIL_ENAB		no

#
# 성공적인 로그인 기록 사용
#
LOG_OK_LOGINS		no

#
# sulog 파일 로깅 외에 su 활동의 "syslog" 로깅을 사용 가능으로 설정합니다.
#
Syslog_SU_ENAB		yes
Syslog_SG_ENAB		yes

#
# 정의된 경우 모든 su 활동이 이 파일에 기록됩니다.
#
#SULOG_FILE	/var/log/sulog

# 정의된 경우 tty line을 TERM 환경 파라미터에 매핑하는 파일입니다.
# 파일의 각 행은 "vt100 tty01"과 같은 형식입니다.
#
#TTYTYPE_FILE	/etc/tytype

#
# 정의된 경우 로그인 실패가 utmp 형식으로 여기에 기록됩니다
# last, lastb로 호출하면 /var/log/btmp를 읽으므로...
#
FTMP_FILE	/var/log/btmp

#
# 정의된 경우 "su -"를 실행할 때 표시할 명령 이름은 다음과 같습니다,
# 이것이 "su"로 정의되면 "pa"는 명령어를 "-su"로 표시합니다.
# 정의되지 않은 경우 "ps"는 "-su"와 같은 실제 실행 중인 셸의 이름을 표시합니다.
#
US_NAME su

#
# 정의된 경우 로그인 시퀀스 중 일반적인 모든 채팅을 금지하는 파일입니다.
# 전체 경로 이름인 경우 파일에서 사용자 이름 또는 셸이 발견되면 쉬쉬 모드가 활성화됩니다.
# 전체 경로 이름이 아닌 경우 파일이 사용자의 홈 디렉토리에 있는 경우 쉬쉬 모드가 활성화됩니다.
#
HUSHLOGIN_FILE.hush로그인
#HUSHLOGIN_FILE /etc/hush 로그인

#
# *필수* 슈퍼유저 및 일반 사용자의 기본 PATH 설정입니다.
#
# (그것들은 miniaml이고 나머지는 셸 시작 파일에 추가합니다.)
ENV_SUPATH	PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin/bin
ENV_PATH	PATH=/usr/local/bin:/usr/local/bin:/usr/local/games:/usr/games

#
# 터미널 권한
#
#	TTYGROUP	Loginty에 이 그룹 소유권이 할당됩니다.
# 	TTYPERM		Loginty가 이 권한으로 설정됩니다.
#
# 터미널을 소유한 특수 그룹에 "setgid"인 "write" 프로그램이 있는 경우 TTYGROUP을 그룹 번호로 
# 정의하고 TTYPERM ~ 0620을 정의합니다.
# 그렇지 않으면 TTYGROUP에서 코멘트를 생략하고 TTYPERM을 622 또는 600에 할당합니다.
#
# Debian /usr/bin/bsd-write 또는 이와 유사한 프로그램은 setgidty입니다
# 그러나 TTYPERM의 기본값과 권장값은 여전히 0600이므로 다른 콘솔이나 터미널에 아무도 글을 쓸 수 
# 없습니다

# 사용자는 "mesg y" 명령을 실행하여 다른 사용자가 작성할 수 있도록 허용할 수 있습니다.

TTYGROUP	tty
TTYPERM		0600

#
# 로그인 구성 초기화:
#
#	ERASECHAR	터미널 ERASE 문자('\010' = 백스페이스).
#	KILLCHAR	터미널 KILL 문자('\025' = CTRL/U).
#	UMASK		기본 "umask" 값입니다.
#
# ERASECHAR 및 KILLCHAR는 시스템 V 시스템에서만 사용됩니다.
#
# UMASK는 pam_umask의 기본 umask 값이며 사용자 추가 및 새 사용자가 새 홈 디렉토리의
# 모드를 설정하는 데 사용합니다.
# 022는 UMASK에 대한 데비안의 "historical" 값입니다
# 027 또는 심지어 077은 개인 정보 보호를 위해 더 나은 것으로 간주될 수 있습니다
# 여기에는 하나의 진정한 답이 없습니다. 각 시스템 관리자는 자신의 결정을 내려야 합니다.
#
# USERGROUPS_ENAB를 "yes"로 설정하면 개인 사용자 그룹에 대한 UMASK 기본값이 수정됩니다.
# 즉, uid는 gid와 같고 사용자 이름은 기본 그룹 이름과 같습니다.
# 이러한 사용자 권한은 그룹 권한으로 사용됩니다.
# 예를 들어 022는 002가 됩니다.
#
# 이 값들 앞에 "0"을 붙여 팔분의 일이 되게 하고, "0x"를 붙여 16진법이 나오게 합니다.
#
ERASECHAR	0177
KILLCHAR	025
UMASK		022

#
# HOME_MODE는 사용자 추가(8) 및 새 사용자(8)가 새 홈 디렉토리의 모드를 설정하는 데 사용됩니다.
# HOME_MODE가 설정되지 않은 경우 UMASK 값을 사용하여 모드를 만듭니다.
HOME_MODE	0700

#
# 암호 기간 제어:
#
#	PASS_MAX_DAYS	비밀번호를 사용할 수 있는 최대 일수.
#	PASS_MIN_DAYS	비밀번호 변경 사이에 허용되는 최소 일수입니다.
#	PASS_WARN_AGE	암호가 만료되기 전에 제공되는 일 수 경고입니다.
#
PASS_MAX_DAYS	30
PASS_MIN_DAYS	2
PASS_WARN_AGE	7

#
# 사용자 추가에서 자동 UID 선택에 대한 최소/최대 값
#
UID_MIN			1000
UID_MAX			60000
# 시스템계정
#SYS_UID_MIN	100
#SYS_UID_MAX	999
# 사용자 당 추가 ID
SUB_UID_MIN		100000
SUB_UID_MAX		600100000
SUB_UID_COUNT		65536

#
# 그룹 추가에서 자동 gid 선택에 대한 최소/최대 값
#
GID_MIN			1000
GID_MAX			60000
# 시스템계정
#SYS_GID_MIN	100
#SYS_GID_MAX	999
# 그룹 ID당 추가 수
SUB_UID_MIN		100000
SUB_UID_MAX		600100000
SUB_UID_COUNT		65536

#
# 암호가 잘못된 경우 최대 로그인 재시도 횟수입니다.
# 기본 pam_unix 모듈에는 3번의 재시도가 내장되어 있기 때문에 이 문제는 PAM에 의해
# 재정의될 가능성이 높습니다.
# 그러나 PAM_MAXTRIES를 적용하지 않는 인증 모듈을 사용하는 경우 안전한 폴백입니다.
#
LOGIN_RETRIES	5

#
# 로그인 최대 시간(초)
#
LOGIN_TIMEOUT	60

#
# 일반 사용자가 chfn을 사용하여 변경할 수 있는 필드 - "frwh" 문자 조합(전체 이름, 방 번호,
#                                                         회사 전화, 집 전화)을 사용합니다.
# 정의되지 않은 경우 변경이 허용되지 않습니다.
# 하위 호환성의 경우 "yes" = "rwh" 및 "no" = "frwh"입니다.

#
CHFN_RESTRICT	rwh

#
# 홈 디렉토리에 cd를 할 수 없는 경우 로그인을 허용해야 합니까?
# 기본값은 no입니다.
#
DEFAULT_HOME yes

#
# 정의된 경우 이 명령은 사용자를 제거할 때 실행됩니다.
# 소유한 at/cron/print 작업 등을 제거해야 합니다
# 제거할 사용자(첫 번째 인수로 전달됨).
#
#USERDEL_CMD	/usr/sbin/userdel_local

#
# yes로 설정하면 userdel은 더 이상 구성원이 없는 경우 사용자 그룹을 제거하고 
# useradd는 기본적으로 사용자 이름이 있는 그룹을 만듭니다.

#
# Debian과 같은 PAM 환경에서 user== primary group이 사용되지 않을 때 umask를 설정하는 것과
# 같은 이 변수의 이전 용도
#
USUERGROUPS_ENAB yes

#
# 실제 사용자 셸 대신 이 매개 변수에 의해 지정된 프로그램이 시작되지만 표시되는 이름(argv[0])은 셸의 이름이 됩니다.
# 프로그램은 실제 셸을 실행하기 전에 원하는 모든 작업(로깅, 추가 인증, 배너 등)을 수행할 수 있습니다.
#
# FAKE_SHELL /bin/fakeshell

#
# 정의된 경우 장치 이름이 포함된 파일의 전체 경로 이름 또는
# ":" 구분된 장치 이름 목록입니다.
# 루트 로그인은 이러한 장치에서만 허용됩니다.
#
# 이 변수는 로그인 및 su에서 사용됩니다.
#
#CONSOLE	/etc/consoles
#CONSOLE	console:tty01:tty02:tty03:tty04

#
# 콘솔에 로그인할 때 설정된 사용자의 보조 그룹에 추가할 그룹 목록입니다(CONSOLE 설정에 따라 결정됨).
# 기본값은 none입니다.
#
# 주의해서 사용 - 콘솔에 로그인하지 않은 경우에도 사용자가 이러한 그룹에 영구적으로 액세스할 수 있습니다.
# 어떻게 하는지는 독자들의 연습으로 남깁니다...
#
# 이 변수는 로그인 및 su에서 사용됩니다.
#
#CONSOLE_GROUPS	floppy:audio:cdrom

#
# "es"로 설정하면 MD5 기반을 사용하여 새 암호가 암호화됩니다
# 최근 FreeBSD 릴리스에서 사용되는 알고리즘과 호환됩니다.
# 무제한 길이와 더 긴 염줄의 비밀번호를 지원합니다.
# 암호화된 암호를 새 알고리즘을 이해하지 못하는 다른 시스템에 복사해야 하는 경우 "no"로 설정합니다.
# 기본값은 "no"입니다.
#
# 이 변수는 권장되지 않습니다. ENCRYPT_METHOD를 사용해야 합니다.
#
#MD5_CRYPT_ENAB no

#
# MD5로 설정하면 MD5 기반 알고리즘이 암호화에 사용됩니다
# SHA256으로 설정하면 SHA256 기반 알고리즘이 암호화에 사용됩니다
# SHA512로 설정하면 SHA512 기반 알고리즘이 암호화에 사용됩니다
# BCRYPT로 설정하면 비밀번호 암호화에 BCRYPT 기반 알고리즘이 사용됩니다
# YESCRYPT로 설정하면 YESCRYPT 기반 알고리즘이 암호화에 사용됩니다
# DES로 설정하면 암호화에 DES 기반 알고리즘이 사용됩니다(기본값)
# MD5는 새 해시에 사용해서는 안 됩니다. 권장 사항은 crypt(5)를 참조하십시오.
# MD5_CRYPT_ENAB 옵션을 재정의합니다
#
# 참고: PAM 모듈 구성과 일치하는 값을 사용하는 것이 좋습니다.
#
ENCRYPT_METHOD SHA512

#
# ENCRYPT_METHOD가 SHA256 또는 SHA512로 설정된 경우에만 작동합니다.
#
# SHA 라운드 수를 정의합니다.
# 라운드가 많으면 암호를 강제하는 것이 더 어렵습니다.
# 그러나 이 값이 증가하면 사용자를 인증하는 데 더 많은 CPU 리소스가 필요합니다.
#
# 지정하지 않으면 libc는 기본 라운드 수(5000개)를 선택합니다. 이는 최신 하드웨어에 비해 너무 낮은 크기입니다.
# 값은 1000-99999999 범위 내에 있어야 합니다.
# MIN 또는 MAX 값 중 하나만 설정하면 이 값이 사용됩니다.
# MIN > MAX인 경우 가장 높은 값이 사용됩니다.
#
# SHA_CRIPT_MIN_ROUNDS 5000
# SHA_CRIPT_MAX_ROUNDS 5000

# ENCRYPT_METHOD가 YESCRYPT로 설정된 경우에만 작동합니다.
#
# YESCRYPT 비용 요소를 정의합니다.
# 비용 요소가 높을수록 암호를 단순하게 강제하기가 더 어렵습니다.
# 그러나 이 값이 증가하면 사용자를 인증하는 데 더 많은 CPU 시간과 더 많은 메모리가 필요합니다.
#
# 지정하지 않으면 비용 계수 5가 사용됩니다.
# 값은 1-11 범위 내에 있어야 합니다.
#
#YESCRYPT_COST_FACTOR 5

# pwck(8) 유틸리티는 홈 디렉토리가 없는 시스템 계정에 대해 경고를 보냅니다.
# 일부 시스템 계정에는 홈 디렉토리가 없습니다.
# 이러한 계정은 가짜 경고를 피하기 위해 이 문자열을 /etc/passwd의 홈 디렉토리로 사용할 수 있습니다.
#
NONEXISTENT		/nonexistent

#
# 다른 기본 그룹에서 실행할 때 새 UID맵과 새 Gidmap을 허용합니다.
#
#GRANT_AUX_GROUP_SUBIDS yes

#
# 빈 암호 필드가 "인증 필요 없음"으로 해석되지 않도록 합니다.
# 모든 계정을 금지하려면 "yes"로 설정합니다
# UID 0 / root(기본값)을 방지하려면 "superuser"로 설정합니다
# 계정을 방지하지 않도록 "no"로 설정합니다(위험, 과거 기본값)
PREVENT_NO_AUTH superuser

#
# HMAC 암호 알고리즘을 선택합니다.
# indpam_timestamp 모듈을 사용하여 키 해시 메시지 인증 코드를 계산합니다.
#
# 참고: 시스템에서 사용할 수 있는 가능한 알고리즘을 보려면 hmac(3)을 확인하는 것이 좋습니다.
#
#HMAC_CRYTO_ALGO SHA512

################# OBSOLETED BY PAM ###############
#                                                #
# 이러한 옵션은 이제 PAM에서 처리됩니다.               #
#                                               #
# /etc/pam.d/에서 해당 파일을 편집하여 해당 파일을     #
# 활성화하십시오.                                  #
#                                               #
#################################################

#MOTD_FILE
#DIALUPS_CHECK_ENAB
#LASTLOG_ENAB
#MAIL_CHECK_ENAB
#OBSCURE_CHECKS_ENAB
#PORTTIME_CHECKS_ENAB
#SU_WHEEL_ONLY
#CRACKLIB_DICTPATH
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
#ENVIRON_FILE
#NOLOGINS_FILE
#ISSUE_FILE
#PASS_MIN_LEN
#PASS_MAX_LEN
#ULIMIT
#ENV_HZ
#CHFN_AUTH
#CHSH_AUTH
#FAIL_DELAY

################# OBSOLETED ###############
#                                         #
# 이 옵션들은 더 이상 shadow로 처리되지 않습니다.#
#                                        #
# shadow 유틸리티가 계속 나타나면             #
# 경고를 표시합니다.                         #
#                                         #
###########################################

# CLOSE_SESSIONS
# LOGIN_STRING
# NO_PASSWORD_CONSOLE
# QMAIL_DIR

 

 

PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7

이 부분을 찾아서

PASS_MAX_DAYS 30
PASS_MIN_DAYS 2
PASS_WARN_AGE 7

PASS_MIN_LEN 10 (LEN 설정을 10 으로 해서 10보다 작은 Hj159 를 설정했으나 다음 문구가 뜬다)

BAD PASSWORD: The password is shorter than 8 characters


MIN_LEN 을 10으로 설정했는데 8글자(기본으로 설정되어 있는 최소길이) 보다 작다고 에러를 띄우길래

Hj024689 로 8자 설정해보니 에러 문구가 뜨지 않는다...

 

이유는 다음과 같다

login.defs 파일 해석본 하단 내용에 

 

#####OBSOLETED BY PAM#####

 

내용에 "이러한 옵션들은 이제 PAM에서 처리하게 됩니다"

 

############################

라고 하면서 하단에 적힌 변수들 중에

 

PASS_MIN_LEN 이 포함이 되는 것을 확인할 수 있다.

 

이전엔 이 파일에서 설정이 가능하였으나 이젠 안되는것으로 보여서 해단 변수 설정을 삭제하였다.

 

(PASS_MIN_LEN 은 다음 과정인 복잡도 설정에서 설정하면 된다.)


이번엔 /etc/pwqaulity.conf 로 복잡도 설정

 

일단 debian manpage에서의 pwqaulity.conf 설명을 보자

https://manpages.debian.org/testing/libpam-pwquality/pam_pwquality.8.en.html (debian manpage)

 

이름 

        pwquality.conf - libpwquality 라이브러리 구성

개요 

       /etc/security/pwquality.conf

      /etc/security/pwquality.conf.d/*.conf

설명 

      pwquality.conf는 시스템 비밀번호에 대한 기본 비밀번호 품질 요구 사항을 구성하는 방법을 제공합니다.

      이 파일은 암호 확인 및 생성을 위해 이 라이브러리를 사용하는 libpwquality 라이브러리 및 유틸리티에서 읽습니다.

      파일은 "#" 문자 로 시작하는 주석이 포함된 매우 간단한 이름 = 값 형식을 갖습니다 .

      줄 시작 부분, 줄 끝 부분, "=" 기호 주변의 공백은 무시됩니다.

      또한 libpwquality 라이브러리는 먼저 /etc/security/pwquality.conf.d 디렉터리 에서 모든 *.conf 파일을 ASCII 정렬 순서로

      읽습니다.

      동일한 설정의 값은 파일이 구문 분석되는 순서대로 재정의됩니다.


설정하고자 하는 옵션

 

1. 비밀번호는 영어 대, 소문자, 숫자를 포함

2. 동일한 문자 연속 3번 사용불가

3. 비밀번호에 사용자 이름 사용불가

4. 이전 비밀번호의 일부가 아닌 7자 이상의 문자 포함 (root 계정은 예외처리)

 

우선 

apt install libpam-pwquality

 

을 통해 파일을 내려받으면 pwquality.conf 파일이 생성되는데

 

이 파일을 열어보면 다음과 같이 나온다.

cat /etc/security/pwquality.conf (입력)

<결과>
# Configuration for systemwide password quality limits
# Defaults:
#
# Number of characters in the new password that must not be present in the
# old password.
# difok = 1
#
# Minimum acceptable size for the new password (plus one if
# credits are not disabled which is the default). (See pam_cracklib manual.)
# Cannot be set to lower value than 6.
# minlen = 8
#
# The maximum credit for having digits in the new password. If less than 0
# it is the minimum number of digits in the new password.
# dcredit = 0
#
# The maximum credit for having uppercase characters in the new password.
# If less than 0 it is the minimum number of uppercase characters in the new
# password.
# ucredit = 0
#
# The maximum credit for having lowercase characters in the new password.
# If less than 0 it is the minimum number of lowercase characters in the new
# password.
# lcredit = 0
#
# The maximum credit for having other characters in the new password.
# If less than 0 it is the minimum number of other characters in the new
# password.
# ocredit = 0
#
# The minimum number of required classes of characters for the new
# password (digits, uppercase, lowercase, others).
# minclass = 0
#
# The maximum number of allowed consecutive same characters in the new password.
# The check is disabled if the value is 0.
# maxrepeat = 0
#
# The maximum number of allowed consecutive characters of the same class in the
# new password.
# The check is disabled if the value is 0.
# maxclassrepeat = 0
#
# Whether to check for the words from the passwd entry GECOS string of the user.
# The check is enabled if the value is not 0.
# gecoscheck = 0
#
# Whether to check for the words from the cracklib dictionary.
# The check is enabled if the value is not 0.
# dictcheck = 1
#
# Whether to check if it contains the user name in some form.
# The check is enabled if the value is not 0.
# usercheck = 1
#
# Length of substrings from the username to check for in the password
# The check is enabled if the value is greater than 0 and usercheck is enabled.
# usersubstr = 0
#
# Whether the check is enforced by the PAM module and possibly other
# applications.
# The new password is rejected if it fails the check and the value is not 0.
# enforcing = 1
#
# Path to the cracklib dictionaries. Default is to use the cracklib default.
# dictpath =
#
# Prompt user at most N times before returning with error. The default is 1.
# retry = 3
#
# Enforces pwquality checks on the root user password.
# Enabled if the option is present.
# enforce_for_root
#
# Skip testing the password quality for users that are not present in the
# /etc/passwd file.
# Enabled if the option is present.
# local_users_only

 

필요한 옵션들을 확인해서 주석을 해제하고 값을 입력 || 수정한다.

 

difok

       이전 비밀번호에 있어서는 안 되는 새 비밀번호의 문자 수입니다. (기본값 1)

       특수 값 0은 새 비밀번호가 이전 비밀번호와 정확히 동일한 경우를 제외하고 새 비밀번호와 이전 비밀번호의 유사성에 대한

       모든 검사를 비활성화합니다.

minlen

      새 비밀번호에 허용되는 최소 크기(기본값인 크레딧이 비활성화되지 않은 경우 1 추가). ( pam_pwquality(8) 참조 .)

      6보다 낮은 값으로 설정할 수 없습니다. (기본값 8)

dcredit

      새 비밀번호의 숫자에 대한 최대 크레딧입니다.

      0보다 작으면 새 비밀번호의 최소 자릿수입니다. (기본값 0)

ucredit

      새 비밀번호에 대문자가 포함된 최대 크레딧입니다.

      0보다 작으면 새 비밀번호의 최소 대문자 수입니다. (기본값 0)

lcredit

      새 비밀번호에 소문자를 포함하는 최대 크레딧입니다.

      0보다 작으면 새 비밀번호의 최소 소문자 수입니다. (기본값 0)

ocredit

      새 비밀번호에 다른 문자를 포함하는 데 따른 최대 크레딧입니다.

      0보다 작으면 새 비밀번호의 최소 문자 수입니다. (기본값 0)

minclass

      새 비밀번호에 필요한 최소 문자 클래스 수(숫자, 대문자, 소문자, 기타)입니다. (기본값 0)

maxrepeat

      새 비밀번호에 허용되는 동일한 연속 문자의 최대 수입니다.

      값이 0이면 검사가 비활성화됩니다. (기본값 0)

maxsequence

      새 비밀번호의 단조 문자 시퀀스의 최대 길이입니다. 이러한 시퀀스의 예는 '12345' 또는 'fedcb'입니다.

      대부분의 비밀번호는 시퀀스가 ​​비밀번호의 작은 부분이 아닌 이상 단순성 검사를 통과하지 못합니다.

      값이 0이면 검사가 비활성화됩니다. (기본값 0)

maxclassrepeat

      새 비밀번호에 허용되는 동일한 클래스의 연속 문자의 최대 수입니다. 값이 0이면 검사가 비활성화됩니다. (기본값 0)

gecoscheck

      0이 아닌 경우 사용자 passwd(5) 항목의 GECOS 필드 에서 3자보다 긴 단어가 새 비밀번호에 포함되어 있는지

      확인하십시오. 값이 0이면 검사가 비활성화됩니다. (기본값 0)

dictcheck

      0이 아닌 경우 비밀번호(수정 가능)가 사전에 있는 단어와 일치하는지 확인하세요.

      현재 사전 검사는 cracklib 라이브러리를 사용하여 수행됩니다. (기본값 1)

usercheck=N

      0이 아닌 경우 비밀번호(수정 가능)에 어떤 형식으로든 사용자 이름이 포함되어 있는지 확인하세요.

      3자 미만의 사용자 이름에 대해서는 수행되지 않습니다. (기본값 1)

usersubstr=N

      3보다 큰 경우(usercheck의 최소 길이로 인해) 비밀번호에 어떤 형태로든 N 길이 이상의 하위 문자열이 포함되어 있는지

     확인하세요 . (기본값 0)

enforcing=N

      0이 아닌 경우 검사에 실패하면 비밀번호를 거부하고, 그렇지 않으면 경고만 인쇄합니다.

      이 설정은 pam_pwquality 모듈과 이를 기반으로 동작을 명시적으로 변경하는 다른 응용 프로그램에만 적용됩니다.

      pwmake(1)  pwscore(1) 에는 영향을 미치지 않습니다 . (기본값 1)

badwords

      비밀번호에 포함되어서는 안 되는 공백으로 구분된 단어 목록입니다.

      이것은 cracklib 사전 확인에 대한 추가 단어입니다.

      이 설정은 아직 생성되지 않은 사용자 계정에 대한 gecos 검사를 에뮬레이트하기 위해 애플리케이션에서 사용될 수도

      있습니다.

dictpath

      cracklib 사전의 경로입니다.

      기본값은 cracklib 기본값을 사용하는 것입니다.

retry=N

      오류가 발생하기 전에 사용자에게 최대 N 번 메시지를 표시합니다.

      기본값은 1 입니다 .

enforce_for_root

      비밀번호를 변경하는 사용자가 루트인 경우에도 모듈은 확인 실패 시 오류를 반환합니다.

      이 옵션은 기본적으로 꺼져 있습니다.

      이는 실패한 확인에 대한 메시지만 인쇄되지만 루트는 어쨌든 비밀번호를 변경할 수 있음을 의미합니다.

      루트에는 이전 비밀번호를 묻지 않으므로 이전 비밀번호와 새 비밀번호를 비교하는 검사가 수행되지 않습니다.

local_users_only

     모듈은 /etc/passwd 파일 에 없는 사용자에 대한 비밀번호 품질을 테스트하지 않습니다 .

     모듈은 스택의 다음 모듈이 use_authtok 옵션을 사용할 수 있도록 여전히 비밀번호를 묻습니다.

     이 옵션은 기본적으로 꺼져 있습니다.

Debian manpage 참고 https://manpages.debian.org/testing/libpam-pwquality/pam_pwquality.8.en.html 

 

# Configuration for systemwide password quality limits
# Defaults:
#
# Number of characters in the new password that must not be present in the
# old password.
difok = 7
#
# Minimum acceptable size for the new password (plus one if
# credits are not disabled which is the default). (See pam_cracklib manual.)
# Cannot be set to lower value than 6.
minlen = 10
#
# The maximum credit for having digits in the new password. If less than 0
# it is the minimum number of digits in the new password.
dcredit = -1
#
# The maximum credit for having uppercase characters in the new password.
# If less than 0 it is the minimum number of uppercase characters in the new
# password.
ucredit = -1
#
# The maximum credit for having lowercase characters in the new password.
# If less than 0 it is the minimum number of lowercase characters in the new
# password.
lcredit = -1
#
# The maximum credit for having other characters in the new password.
# If less than 0 it is the minimum number of other characters in the new
# password.
# ocredit = 0
#
# The minimum number of required classes of characters for the new
# password (digits, uppercase, lowercase, others).
# minclass = 0
#
# The maximum number of allowed consecutive same characters in the new password.
# The check is disabled if the value is 0.
maxrepeat = 2
#
# The maximum number of allowed consecutive characters of the same class in the
# new password.
# The check is disabled if the value is 0.
# maxclassrepeat = 0
#
# Whether to check for the words from the passwd entry GECOS string of the user.
# The check is enabled if the value is not 0.
# gecoscheck = 0
#
# Whether to check for the words from the cracklib dictionary.
# The check is enabled if the value is not 0.
# dictcheck = 1
#
# Whether to check if it contains the user name in some form.
# The check is enabled if the value is not 0.
# usercheck = 1
#
# Length of substrings from the username to check for in the password
# The check is enabled if the value is greater than 0 and usercheck is enabled.
# usersubstr = 0
#
# Whether the check is enforced by the PAM module and possibly other
# applications.
# The new password is rejected if it fails the check and the value is not 0.
# enforcing = 1
#
# Path to the cracklib dictionaries. Default is to use the cracklib default.
# dictpath =
#
# Prompt user at most N times before returning with error. The default is 1.
# retry = 2
#
# Enforces pwquality checks on the root user password.
# Enabled if the option is present.
# enforce_for_root
#
# Skip testing the password quality for users that are not present in the
# /etc/passwd file.
# Enabled if the option is present.
# local_users_only

 

이를 통해 비밀번호의 영대, 소문자, 숫자 설정 및 같은 문자의 3번 사용 불허,

(참고로 maxrepeat 값은 설정 값 이하까지만 중복 허락이라고 해석하는게 편함 (3번 중복불가 -> maxrepeat=2))

비밀번호 최소길이 10, 이전 비밀번호와 겹치지 않는 문자 7개 설정은 했는데...

(difok 옵션 = 새 패스워드에서 예전 패스워드에 있지 않는 문자들을 몇 자나 사용해야 하는지 나타내는 수.

                     현재 7로 설정되 어있으며, 새 패스워드 글자 수의 1/2 이 이전과 다르다면 새 패스워드로 받아짐

                     (== 이전 비밀번호 + 이전 비밀번호 길이 만큼의 다른 문자 - 도 된다는 얘기... max 상한선으로 해결하면 되지만)

[블로그엔 설정된 값을 보여드디고 있지만 블로그 초반부에 설명드린 강제성이 없기 때문에 설정하는 의미가 없는것으로

느껴져서 다시 주석처리 하였음]

 

패스워드에 사용자 이름 사용불가 설정이 애매하다...

 

뇌피셜로는 usercheck 옵션을 켜면 될 꺼 같은데...

 

그럼 2자 이내의 아이디는 어떻게 되는건가?

 

(애초에 2자로 설정이 안된다면 다행인데 유저명을 2글자로해도 생성이 되니... 두 글자 유저명에 대해선 필터링이 안되는...) 

 

cat /etc/pam.d/common-password (입력)

<결과>
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.

# Explanation of pam_unix options:
# The "yescrypt" option enables
#hashed passwords using the yescrypt algorithm, introduced in Debian
#11.  Without this option, the default is Unix crypt.  Prior releases
#used the option "sha512"; if a shadow password hash will be shared
#between Debian 11 and older releases replace "yescrypt" with "sha512"
#for compatibility .  The "obscure" option replaces the old
#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage
#for other options.

# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
password	[success=1 default=ignore]	pam_unix.so obscure yescrypt
# here's the fallback if no module succeeds
password	requisite					pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password	required					pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
~
~
~

 

터미널에 좀 전에 시도했던

 

apt install libpam-pwquality

 

를 내려받으면 하단처럼 바뀌는데 해석하면 다음과 같다

 

 

해석본 (with PAPAGO)

#
# /etc/pam.d/common-password - 모든 서비스에 공통적인 비밀번호 관련 모듈
#
# 이 파일은 다른 서비스별 PAM 구성 파일에 포함되어 있으며 사용자 암호를 변경하는 데 사용할 
# 서비스를 정의하는 모듈 목록을 포함해야 합니다.
# 기본값은 pam_unix입니다.

# pam_unix 옵션 설명:
# "yescrypt" 옵션을 사용하면 다음과 같이 활성화됩니다
#Debian 11에 소개된 yescrypt 알고리즘을 사용하여 해시된 비밀번호입니다.
#이 옵션을 사용하지 않으면 기본값은 Unix crypt입니다.
#이전 릴리스에서는 "sha512" 옵션을 사용했습니다;
#데비안 11 이상의 릴리스 간에 shadow password 해시를 공유할 경우 호환성을 위해 "yescrypt"를 
#"sha512"로 대체합니다.
#"Obscure" 옵션은 login.defs의 이전 'OBSCURE_CHECKs_ENAB' 옵션을 대체합니다.
#다른 옵션은 pam_unix manpage를 참조하십시오.

# pam 1.0.1-6을 기준으로 이 파일은 기본적으로 pam-auth-update에 의해 관리됩니다.
# 이를 이용하려면 기본 블록 이전 또는 이후에 로컬 모듈을 구성하고 pam-auth-update를 사용하여 다른 
# 모듈의 선택을 관리하는 것이 좋습니다.
# 자세한 내용은 pam-auth-update(8)를 참조하십시오.

# 다음은 패키지별 모듈입니다("기본" 블록)
password	requisite			pam_pwquality.so retry=3
password	[success=1 default=ignore]	pam_unix.so obulous yescrypt
# 성공한 모듈이 없으면 여기에 폴백이 있습니다
password	requisite					pam_deny.so
# 스택이 이미 없는 경우에는 양의 반환 값으로 스택을 프라이밍합니다;
# 이것은 성공 코드를 설정하지 않기 때문에 오류를 반환하지 않습니다
# 위의 모듈들은 각각 뛰어다닐 것이기 때문입니다
password	requisite					pam_permit.so
# 그리고 여기에 더 많은 패키지별 모듈("추가" 블록)이 있습니다
pam-auth-update 구성의 끝

 

"pam_pwquality.so retry=3"

 

문구가 추가 되었음을 확인할 수 있다.


 

pam_pwquality.so -옵션

 

이름 

        pam_pwquality - 비밀번호 품질 검사를 수행하는 PAM 모듈

개요 

        pam_pwquality.so [ ... ]

 

설명 

        이 모듈은 특정 서비스의 비밀번호 스택 에 연결되어 비밀번호에 대한 플러그인 강도 검사를 제공할 수 있습니다.

        코드는 원래 pam_cracklib 모듈을 기반으로 했으며 모듈은 해당 옵션과 역호환됩니다.

        이 모듈의 작업은 사용자에게 비밀번호를 묻는 메시지를 표시하고 시스템 사전 및 잘못된 선택을 식별하기 위한 일련의

        규칙에 대해 비밀번호의 강도를 확인하는 것입니다.

        첫 번째 조치는 단일 비밀번호를 입력하라는 메시지를 표시하고 강도를 확인한 다음,

        비밀번호가 강력하다고 판단되면 두 번째로 비밀번호를 입력하라는 메시지를 표시하는 것입니다

        (처음에 올바르게 입력했는지 확인하기 위해).

        모든 것이 정상이면 비밀번호는 새 인증 토큰으로 설치될 후속 모듈에 전달됩니다.

 

 

debug

      이 옵션은 모듈이 모듈의 동작을 나타내는 정보를

      syslog(3) 에 기록하도록 합니다(이 옵션은 로그 파일에 암호 정보를 기록하지 않습니다).

authtok_type=XXX

      기본 작업은 모듈이 비밀번호를 요청할 때 "새 UNIX 비밀번호: "  "UNIX 비밀번호 다시 입력: " 프롬프트를

      사용하는 것입니다 .

      예제 단어 UNIX는 이 옵션으로 대체될 수 있으며 기본적으로 비어 있습니다.

retry=N

      오류가 발생하기 전에 사용자에게 최대 N 번 메시지를 표시합니다.

      기본값은 1 입니다 .

difok=N

      이 인수는 이전 비밀번호에서 새 비밀번호를 변경한 횟수에 대한 기본값인 1을 변경합니다.

 

      특수 값 0 은 새 비밀번호가 이전 비밀번호와 정확히 동일한 경우를 제외하고 새 비밀번호와 이전 비밀번호의

      유사성에 대한 모든 검사를 비활성화합니다.

minlen=N

      새 비밀번호에 허용되는 최소 크기(기본값인 크레딧이 비활성화되지 않은 경우 1 추가).

      새 비밀번호의 문자 수 외에도 다양한 종류의 문자( 기타 , 상위 , 하위  숫자 )에 대해 크레딧(길이 +1)이 제공됩니다.

      이 매개변수의 기본값은 8 입니다 . 

      Cracklib 에도 사전 확인에 사용되는 한 쌍의 길이 제한, 하드 코딩된 "너무 짧은" 제한 4 ,

      참조 없이 확인되는 빌드 시간 정의 제한( 6 )이 있습니다.

dcredit=N

      (N >= 0) 이는 새 비밀번호에 숫자가 포함된 최대 크레딧입니다.

      숫자가 N 개 이하인 경우 각 숫자는 현재 minlen 값 을 충족하기 위해 +1을 계산합니다 . 

      dcredit 의 기본값 은 0 입니다 . 이는 비밀번호의 숫자에 대한 보너스가 없음을 의미합니다.

 

      (N < 0) 새 비밀번호를 생성하기 위해 충족해야 하는 최소 자릿수입니다..

ucredit=N

      (N >= 0) 새 비밀번호에 대문자가 포함된 최대 크레딧입니다.

      대문자가 N 개 이하인 경우 각 대문자는 현재 minlen 값을 충족하기 위해 +1을 계산합니다. 

      ucredit 의 기본값 은 0 입니다 . 이는 비밀번호의 대문자에 대한 보너스가 없음을 의미합니다.

 

      (N < 0) 새로운 비밀번호를 위해 충족해야 하는 최소 대문자 개수입니다.

lcredit=N

      (N >= 0) 새 비밀번호에 소문자를 포함하는 최대 크레딧입니다.

      소문자가 N 개 이하인 경우 각 소문자는 현재 minlen 값을 충족하기 위해 +1로 계산됩니다. 

      lcredit 의 기본값은 0 입니다 . 이는 비밀번호에 소문자에 대한 보너스가 없음을 의미합니다.

 

      (N < 0) 새로운 비밀번호를 위해 충족해야 하는 최소 소문자의 개수입니다

ocredit=N

      (N >= 0) 이는 새 비밀번호에 다른 문자가 포함된 최대 크레딧입니다. 

      N 개 이하의 다른 문자가 있는 경우 각 문자는 현재 minlen 값을 충족하기 위해 +1을 계산합니다. 

      ocredit 의 기본값 은 0 입니다 . 이는 비밀번호의 다른 문자에 대한 보너스가 없음을 의미합니다.

 

      (N < 0) 새 비밀번호를 위해 충족해야 하는 기타 문자의 최소 개수입니다.

minclass=N

      새 비밀번호에 필요한 최소 문자 클래스 수입니다.

      네 가지 클래스는 숫자, 대문자 및 소문자, 기타 문자입니다. 

      credit 와의 차이점은 문자의 경우 특정 클래스가 필요하지 않다는 것입니다.

      대신 4개 클래스 중 N개 클래스가 필요합니다. 기본적으로 검사는 비활성화되어 있습니다.

maxrepeat=N

      N개 이상의 동일한 연속 문자가 포함된 비밀번호를 거부합니다.

      기본값은 0이며 이는 이 검사가 비활성화되었음을 의미합니다.

maxsequence=N

      N 보다 긴 단조로운 문자 시퀀스를 포함하는 비밀번호를 거부합니다 .

      기본값은 0이며 이는 이 검사가 비활성화되었음을 의미합니다.

      이러한 시퀀스의 예는 '12345' 또는 'fedcb'입니다.

      대부분의 비밀번호는 시퀀스가 ​​비밀번호의 작은 부분이 아닌 이상 단순성 검사를 통과하지 못합니다.

maxclassrepeat=N

      동일한 클래스의 N개 이상의 연속 문자가 포함된 비밀번호를 거부합니다 . 

      기본값은 0이며 이는 이 검사가 비활성화되었음을 의미합니다.

gecoscheck=N

      0이 아닌 경우 사용자의 passwd(5) GECOS 필드 에서 3자보다 긴 개별 단어가 새 비밀번호에 포함되어 있는지

      확인하십시오 . 

      기본값은 0이며 이는 이 검사가 비활성화되었음을 의미합니다.

dictcheck=N

      0이 아닌 경우 비밀번호(수정 가능)가 사전에 있는 단어와 일치하는지 확인하세요.

      현재 사전 검사는 cracklib 라이브러리를 사용하여 수행됩니다.

      기본값은 1이며 이는 이 검사가 활성화되었음을 의미합니다.

usercheck=N

      0이 아닌 경우 비밀번호(수정 가능)에 어떤 형식으로든 사용자 이름이 포함되어 있는지 확인하세요.

      기본값은 1이며 이는 이 검사가 활성화되었음을 의미합니다.

      3자 미만의 사용자 이름에 대해서는 수행되지 않습니다.

usersubstr=N

       3보다 큰 경우(usercheck의 최소 길이로 인해) 비밀번호에 어떤 형태로든 N 길이 이상의 하위 문자열이 포함되어 있는지

      확인하세요 . 

      기본값은 0이며 이는 이 검사가 비활성화되었음을 의미합니다

enforcing=N

      0이 아닌 경우 검사에 실패하면 비밀번호를 거부하고, 그렇지 않으면 경고만 인쇄합니다.

      기본값은 1이며 이는 취약한 비밀번호가 거부됨을 의미합니다(루트가 아닌 사용자의 경우).

badwords=<list of words>

      공백으로 구분된 이 목록에서 3자 이상의 단어는 개별적으로 검색되어 새 비밀번호에서 금지됩니다.

      기본적으로 목록은 비어 있습니다. 이는 이 검사가 비활성화되어 있음을 의미합니다.

dictpath=/path/to/dict

      이 옵션을 사용하면 cracklib 사전에 대한 기본 경로가 아닌 경로를 지정할 수 있습니다.

enforce_for_root

      비밀번호를 변경하는 사용자가 root인 경우에도 모듈은 확인 실패 시 오류를 반환합니다.

      이 옵션은 기본적으로 꺼져 있습니다.

      이는 실패한 확인에 대한 메시지만 인쇄되지만 루트는 어쨌든 비밀번호를 변경할 수 있음을 의미합니다.

      root에는 이전 비밀번호를 묻지 않으므로 이전 비밀번호와 새 비밀번호를 비교하는 검사가 수행되지 않습니다.

local_users_only

      모듈은 /etc/passwd 파일 에 없는 사용자에 대한 비밀번호 품질을 테스트하지 않습니다 .

      모듈은 스택의 다음 모듈이 use_authtok 옵션을 사용할 수 있도록 여전히 비밀번호를 묻습니다.

      이 옵션은 기본적으로 꺼져 있습니다.

use_authtok

      이 인수는 모듈이 사용자에게 새 비밀번호를 묻는 메시지를 표시하지 않고 이전에 스택된 

      비밀번호 모듈에서 제공한 비밀번호를 사용하도록 하는데 사용됩니다 

 

Debian manpage 참조 https://manpages.debian.org/testing/libpam-pwquality/pam_pwquality.8.en.html

 

확인했으니 필요한 옵션을 입력해준다.

 

pam_pwquality.so retry=3 difok=7 minlen=10 dcredit=1 ucredit=1 lcredit=1 maxrepeat=3


이렇게 OracleVM 에 Debian 을 올리고 LVM 설정 후 비밀번호 관련 제어설정까지 완료되었습니다.

 

다음은 sudo 설정과 관련해서 작성해 볼 생각입니다.

반응형