# 필수 파일과 심볼릭 링크 생성

역시적으로, 리눅스는 마운트된 파일 시스템의 목록을 /etc/mtab에 유지합니다. 현대적인 커널은 이 리스트를 내부적으로 유지하고 이를 /proc 파일 시스템을 통해 사용자에게 표시합니다. /etc/mtab의 존재를 예상하는 유틸리티를 만족시키려면 아래 심볼릭 링크를 생성하십시오:

ln -sv /proc/self/mounts /etc/mtab

일부 테스트 수트와 Perl의 구성 파일 중 하나에 필요한 /etc/hosts 파일을 생성하십시오:

echo "127.0.0.1 localhost $(hostname)" > /etc/hosts

root이 로그인할 수 있고 root 이름이 인식되도록 하려면, /etc/passwd/etc/group에 관련된 엔트리가 필요합니다.

아래 명령어로 /etc/passwd를 생성하십시오:

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/bin/false
systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false
systemd-network:x:76:76:systemd Network Management:/:/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false
systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF

root의 실제 비밀번호는 나중에 설정됩니다.

아래 명령어로 /etc/group을 생성하십시오:

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
kvm:x:61:
systemd-bus-proxy:x:72:
systemd-journal-gateway:x:73:
systemd-journal-remote:x:74:
systemd-journal-upload:x:75:
systemd-network:x:76:
systemd-resolve:x:77:
systemd-timesync:x:78:
systemd-coredump:x:79:
uuidd:x:80:
wheel:x:97:
nogroup:x:99:
users:x:999:
EOF

생성된 그룹은 표준의 일부가 아닙니다. 이 그룹은 부분적으로 9장의 Udev 구성 요구 사항과 다수의 기존 리눅스 배포판 환경에 의해 결정된 그룹입니다. 또한 일부 테스트 수트는 특정 사용자 또는 그룹에 의존합니다. LSB(Linux Standard Base) (opens new window)는 그룹 ID(GID)가 0인 그룹 root 외에 GID가 1인 그룹 bin을 사용할 것을 권장합니다. 잘 작성된 프로그램은 GID 번호에 의존하지 않고 그룹 이름을 사용하기 때문에 다른 모든 그룹 이름과 GID는 시스템 관리자가 자유롭게 선택할 수 있습니다.

8장의 일부 테스트는 일반 유저가 필요합니다. 여기서 이 유저를 추가하고 8장의 마지막에서 이 유저를 제거합니다.

echo "tester:x:$(ls -n $(tty) | cut -d" " -f3):101::/home/tester:/bin/bash" >> /etc/passwd
echo "tester:x:101:" >> /etc/group
install -o tester -d /home/tester

I have no name! 프롬프트를 제거하려면, 새 셸을 시작하십시오. /etc/passwd/etc/group이 생성되었기 때문에, 사용자 이름과 그룹 이름 해결이 작동합니다.

exec /bin/bash --login +h

+h 옵션을 사용합니다. 이는 bash가 내부적인 경로 처리를 사용하지 않도록 합니다. 이 옵션 없이는, bash는 실행한 바이너리의 경로를 기억합니다. 새로 컴파일된 바이너리가 설치되자마자 사용되도록 하려면, +h 옵션이 이 장과 다음 장에서 사용됩니다.

login, agetty, init 등의 프로그램은 누가 언제 시스템에 로그인했는지 등의 정보를 기록하기 위해 몇 가지 로그 파일을 사용합니다. 하지만, 이러한 프로그램은 로그 파일이 존재하지 않으면 로그를 기록하지 않습니다. 로그 파일을 초기화하고 적절한 권한을 설정하십시오:

touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664  /var/log/lastlog
chmod -v 600  /var/log/btmp

/var/log/wtmp는 모든 로그인과 로그아웃을 기록합니다. /var/log/lastlog는 각각의 사용자가 언제 마지막으로 로그인했는지 기록합니다. /var/log/faillog는 실패한 로그인 시도를 기록합니다. /var/log/btmp는 안 좋은 로그인 시도를 기록합니다.

참고

/run/utmp는 현재 로그인된 유저를 기록합니다. 이 파일은 부팅 스크립트에서 자동으로 생성됩니다.

Last Updated: 5/4/2021, 3:10:29 AM