^ Linux From Scratch - Version 12.1-systemd ^^^
^ Chapter 8. Installing Basic System Software ^^^
|[[.096-libxcrypt-4.4.36:|이전]] | [[.:08-installing_basic_system_software|위로]] / [[.:12.1|처음으로]] | [[.:098-gcc-13.2.0|다음]]|
|Libxcrypt-4.4.36 | GCC-13.2.0|
----
===== 8.27. Shadow-4.14.5 =====
Shadow 패키지에는 비밀번호를 안전하게 처리하기 위한 프로그램이 포함되어 있습니다.
* **빌드 시간:** 0.1 SBU
* **디스크 공간:** 49 MB
----
==== 8.27.1. Shadow 설치 ====
**참고** \\ 강력한 암호 사용을 강제하려면 Shadow를 빌드하기 전에
[[https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/cracklib.html|CrackLib-2.9.11 BLFS]]를 참조해서 CrackLib를 설치해야 합니다. 그리고 아래 설명 명령에 //--with-libcrack//을 추가합니다.
Coreutils가 더 나은 버전을 제공하므로 **group** 프로그램과 해당 man 페이지의 설치를 비활성화합니다. 또한 [[.:073-man-pages-6.06|8.3, "Man-pages-6.06"]]에서 이미 설치된 man 페이지를 덮어쓰는 것을 방지합니다.
sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;
기본 암호 방식을 사용하는 대신 8자 이상의 암호도 허용하는 훨씬 더 안전한 //YESCRYPT// 방식의 암호 암호화를 사용하세요. 또한 Shadow가 기본적으로 사용하는 사용자 사서함의 ''/var/spool/mail'' 위치를 현재 사용되는 ''/var/mail'' 위치로 변경해야 합니다. 그리고 ''/bin'' 및 ''/sbin''은 ''/usr''에 있는 해당 위치에 대한 심볼릭 링크일 뿐이므로 ''PATH''에서 제거하세요.
**참고** \\ ''/bin'' 및/또는 ''/sbin''을 ''PATH''에 포함하려면 LFS를 빌드한 후 ''.bashrc''에서 ''PATH''를 수정하세요.
sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD YESCRYPT:' \
-e 's:/var/spool/mail:/var/mail:' \
-e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \
-i etc/login.defs
**참고** \\ Shadow에 Cracklib 지원을 추가해서 빌드하기로 한 경우, 다음과 같이 실행하세요.
sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs
Shadow 컴파일을 준비합니다.
touch /usr/bin/passwd
./configure --sysconfdir=/etc \
--disable-static \
--with-{b,yes}crypt \
--without-libbsd \
--with-group-name-max-length=32
=== configure 옵션 설명 ===
* **touch /usr/bin/passwd** \\ 일부 프로그램에서는 해당 위치가 하드코딩 되어있기 때문에 ''/usr/bin/passwd'' 파일이 존재해야 하며, 파일이 존재하지 않으면 설치 스크립트가 잘못된 위치에 파일을 생성합니다.
* //--with-{b,yes}crypt// \\ 셸은 이 스위치를 두 개의 스위치, //--with-bcrypt//와 //--with-yescrypt//로 확장합니다. 이를 통해 섀도우는 Libxcrypt에서 암호 해싱을 위해 구현한 Bcrypt 및 Yescrypt 알고리즘을 사용할 수 있습니다. 이러한 알고리즘은 기존 SHA 알고리즘보다 더 안전합니다(특히 GPU 기반 공격에 훨씬 더 강합니다).
* //--with-group-name-max-length=32// \\ 허용되는 사용자 이름의 최대 길이는 32자입니다. 그룹 이름의 최대 길이를 동일하게 설정합니다.
* //--without-libbsd// \\ LFS에 없는 libbsd의 readpassphrase 함수를 사용하지 않도록 합니다. 대신 소스에 포함된 복사본을 사용합니다.
* //--with-libcrack// \\ Cracklib에 대한 지원을 추가합니다.
패키지를 컴파일합니다.
make
이 패키지는 테스트 스위트를 제공되지 않습니다.
패키지를 설치합니다.
make exec_prefix=/usr install
make -C man install-man
----
==== 8.27.2. Shadow 설정 ====
이 패키지에는 사용자 및 그룹을 추가, 수정, 삭제하고, 비밀번호를 설정 및 변경하고, 기타 관리 작업을 수행하는 유틸리티가 포함되어 있습니다. 비밀번호 섀도잉의 의미에 대한 자세한 설명은 압축을 푼 소스 트리에 있는 doc/HOWTO 파일을 참조하세요. Shadow 지원을 사용하는 경우 비밀번호를 확인해야 하는 프로그램(디스플레이 관리자, FTP 프로그램, pop3 데몬 등)은 반드시 Shadwo와 호환되어야 한다는 점에 유의하세요. 즉, Shadow로 처리된 비밀번호로 작업할 수 있어야 합니다.
Shadow 비밀번호를 사용하려면 다음 명령을 실행하세요.
pwconv
섀도화된 그룹 비밀번호를 사용하려면 다음 명령을 실행합니다.
grpconv
**useradd** 유틸리티에 대한 섀도우의 기본 구성에 대한 설명이 필요합니다. 먼저, **useradd** 유틸리티의 기본 동작은 사용자와 동일한 이름의 사용자와 그룹을 만드는 것입니다. 기본적으로 사용자 ID(UID) 및 그룹 ID(GID) 번호는 1000부터 시작됩니다. 즉, **useradd**에 추가 매개변수를 전달하지 않으면 각 사용자는 시스템에서 고유한 그룹의 멤버가 됩니다. 이라한 동작을 원하지 않는 경우 **useradd**에 //-g// 또는 //-N// 매개변수를 전달하거나 ''/etc/login.defs''에서 //USERGROUPS_ENAB//의 설정을 변경해야 합니다. 자세한 내용은 [[https://man.archlinux.org/man/useradd.8|useradd(8)]]을 참조하세요.
둘째, 기본 매개변수를 변경하려면 ''/etc/default/useradd'' 파일을 생성하고 필요에 맞게 조정해야 합니다. 다음과 같이 생성합니다.
mkdir -p /etc/default
useradd -D --gid 999
=== /etc/default/useradd 매개변수 설명 ===
* //**GROUP=999**// \\ ''/etc/group'' 파일에서 사용되는 사용자 그룹 번호의 시작을 설정합니다. 특정 값 999는 위의 //--gid// 매개변수에서 가져온 것입니다. 원하는 값으로 설정할 수 있습니다. **useradd**는 UID 또는 GID를 재사용하지 않는다는 점에 유의하세요. 이 매개변수에서 식별된 번호가 사용되면 사용 가능한 다음 번호를 사용합니다. 또한 시스템에 이 번호와 동일한 ID를 가진 그룹이 없는 경우 //-g// 매개변수 없이 **useradd**를 처음 사용하면 계정이 올바르게 생성되었더라도 오류 메시지(useradd: 알 수 없는 GID 999)가 생성됩니다. 그렇기 때문에 [[.:063-creating_essential_files_and_symlinks|7.6. "필수 파일 및 심볼 링크 만들기"]] 에서 이 그룹 ID로 사용자 그룹을 만들었습니다.
* **//CREATE_MAIL_SPOOL=yes//** \\ **useradd**가 새로운 사용자에 대한 사서함 파일을 만듭니다. **useradd**는 이 파일의 그룹 소유권을 0660 권한이 있는 //mail// 그룹에 할당합니다. 이러한 파일의 생성을 원하지 않는다면 다음과 같이 실행하세요. \\
sed -i '/MAIL/s/yes/no/' /etc/default/useradd
----
==== 8.27.3. 루트 비밀번호 설정 ====
사용자 //root//의 비밀번호를 설정합니다.
passwd root
----
==== 8.27.4. 섀도우 패키지 구성 ====
* **설치된 프로그램:** \\ chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, getsubids, gpasswd, groupadd, groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, login, logoutd, newgidmap, newgrp, newuidmap, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg (newgrp에 링크), su, useradd, userdel, usermod, vigr (vipw에 링크) 및 vipw
* **설치된 디렉터리** \\ /etc/default 및 /usr/include/shadow
* **설치된 라이브러리** \\ libsubid.so
=== 간략한 설명===
* **chage** \\ 의무적인 비밀번호 변경 사이의 최대 일수를 변경하는 데 사용됩니다.
* **chfn** \\ 사용자의 전체 이름 및 기타 정보를 변경하는 데 사용됩니다.
* **chgpasswd** \\ 배치 모드에서 그룹 비밀번호를 업데이트하는 데 사용됩니다.
* **chpasswd** \\ 배치 모드에서 사용자 비밀번호를 업데이트하는 데 사용됩니다.
* **chsh** \\ 사용자의 기본 로그인 셸을 변경하는 데 사용됩니다.
* **expiry** \\ 현재 비밀번호 만료 정책을 확인하고 적용합니다.
* **faillog** \\ 로그인 실패 로그를 검사하고, 계정이 차단되기 전 최대 실패 횟수를 설정하고, 실패 횟수를 재설정하는 데 사용됩니다.
* **getsubids** \\ 사용자의 하위 아이디 범위를 나열하는 데 사용됩니다.
* **gpasswd** \\ 그룹에 멤버와 관리자를 추가 및 삭제하는 데 사용됩니다.
* **groupadd** \\ 주어진 이름으로 그룹을 생성합니다.
* **groupdel** \\ 주어진 이름의 그룹을 삭제합니다.
* **groupmems** \\ 사용자가 수퍼유저 권한 없이도 자신의 그룹 멤버십 목록을 관리할 수 있도록 합니다.
* **groupmod** \\ 지정된 그룹의 이름 또는 GID를 수정하는 데 사용됩니다.
* **grpck** \\ 그룹 파일 /etc/group 및 /etc/gshadow의 무결성을 확인합니다.
* **grpconv** \\ 일반 그룹 파일에서 섀도 그룹 파일을 만들거나 업데이트합니다.
* **grpunconv** \\ /etc/gshadow에서 /etc/group을 업데이트한 다음 /etc/gshadow를 삭제합니다.
* **login** \\ 사용자가 로그온할 수 있도록 시스템에서 사용한다.
* **logoutd** \\ 로그온 시간 및 포트에 대한 제한을 적용하는 데 사용되는 데몬입니다.
* **newgidmap** \\ 사용자 네임스페이스의 gid 매핑을 설정하는 데 사용됩니다.
* **newgrp** \\ 로그인 세션 중에 현재 GID를 변경하는 데 사용됩니다.
* **newuidmap** \\ 사용자 네임스페이스의 UID 매핑을 설정하는 데 사용됩니다.
* **newusers** \\ 일련의 연속적인 사용자 계정을 만들거나 업데이트하는 데 사용됩니다.
* **nologin** \\ 계정을 사용할 수 없다는 메시지를 표시하며, 비활성화된 계정의 기본 셸로 사용하도록 설계되었습니다.
* **passwd** \\ 사용자 또는 그룹 계정의 비밀번호를 변경하는 데 사용됩니다.
* **pwck** \\ 암호 파일 /etc/passwd 및 /etc/shadow의 무결성을 확인합니다.
* **pwconv** \\ 일반 비밀번호 파일에서 섀도 비밀번호 파일을 생성하거나 업데이트합니다.
* **pwunconv** \\ /etc/shadow에서 /etc/passwd를 업데이트한 다음 /etc/shadow를 삭제합니다.
* **sg** \\ 사용자의 GID가 지정된 그룹의 GID로 설정된 상태에서 지정된 명령을 실행합니다.
* **su** \\ 대체 사용자 및 그룹 ID로 셸을 실행합니다.
* **useradd** \\ 주어진 이름으로 새 사용자를 만들거나 기본 새 사용자 정보를 업데이트합니다.
* **userdel** \\ 지정된 사용자 계정을 삭제합니다.
* **usermod** \\ 지정된 사용자의 로그인 이름, 사용자 식별(UID), 셸, 초기 그룹, 홈 디렉토리 등을 수정하는 데 사용됩니다.
* **vigr** \\ /etc/group 또는 /etc/gshadow 파일을 편집합니다.
* **vipw** \\ etc/passwd 또는 /etc/shadow 파일을 편집합니다.
* libsubid \\ 사용자 및 그룹의 하위 ID 범위를 처리합니다.