Loading the catalog…
Loading the catalog…
Linux 프로세스·사용자 관리 정리 — Day 13 Day 13 — Process와 사용자 관리 1. Process 구조 Linux에서는 Parent Process가 fork() 를 통해 Child Process를 만들고, Child Process에서 execve() 를 통해 새로운 Program을 실행할 수 있다. Parent Process │ │ fork() / \ / \ / \ Parent Process Child Process │ │ │ execve() │ │ │ 새로운 프로그램 실행 │ │ wait() │ │ exit(status) │ │ │◀──── 종료 상태 전달 │ wait() 반환 │ 부모 실행 계속 Process 확인과 제어에 사용한 명령어는 다음과 같다. ps ps -ef pstree pgrep kill jobs fg %1 bg %1 ps -e : System의 모든 Process 출력 ps -f : 상세 정보 출력 pstree : Parent-Child 관계 확인 jobs : Background 작업 확인 fg / bg : Foreground와 Background 전환 2. Archive와 Compression 여러 File을 하나로 묶을 때 tar 를 사용한다. -c : 새로운 tar 파일 생성 -t : tar 파일의 내부 내용들의 리스트 확인 -x : tar 파일 해제 -k : 덮어씌움 방지 -f : 아카이브 파일이나 테이프 장치를 지정 -v : tar 명령어 수행과정 자세히 출력 -h : 아카이브하려는 파일이 심볼릭 링크인 경우 원본을 아카이브 -z : gz로 압축 진행 Compression에는 gzip , bzip2 , zip 등을 사용할 수 있다. gzip gunzip bzip2 bzcat zip unzip Archive는 여러 File을 하나로 묶는 것이고 Compression은 Data Size를 줄이는 과정이다. 3. 사용자와 Group 정보 사용자와 Group 관련 주요 File은 다음과 같다. /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/passwd : 사용자 정보 /etc/shadow : Password 정보 /etc/group : Group 정보 /etc/gshadow : Group Password 정보 Linux에서는 사용자 이름보다 UID 를 기준으로 Permission을 판단한다. 실습에서는 두 사용자에게 같은 UID를 설정했을 때 Linux가 동일한 사용자처럼 판단하는 것을 확인했다. nobreak@rocky-node1:~$ sudo useradd test11 nobreak@rocky-node1:~$ sudo usermod -u 1000 -o test11 nobreak@rocky-node1:~$ id test11 uid=1000(nobreak) gid=1002(test11) groups=1000(nobreak) 4. usermod와 userdel 사용자 설정 변경: -a : 기존 보조 그룹 유지하면서 추가 -L : 계정 잠금 -U : 계정 잠금 해제 Group을 추가할 때는 기존 보조 Group을 유지하도록 -aG 를 함께 사용하는 것이 중요하다. sudo usermod -aG admins student6 사용자 삭제: sudo userdel testuser Home Directory까지 함께 삭제: sudo userdel -r testuser -r 없이 삭제하면 사용자 계정은 사라져도 Home Directory는 남을 수 있다. 5. Group 관리 Group 생성: nobreak@rocky-node1:~$ sudo groupadd -g 989 apache Group 이름과 GID 변경: nobreak@rocky-node1:~$ sudo groupmod -n apache2 apache nobreak@rocky-node1:~$ sudo groupmod -g 3000 apache2 nobreak@rocky-node1:~$ grep apache2 /etc/group apache2:x:3000: Group 삭제: nobreak@rocky-node1:~$ sudo groupdel apache2 기본 Group으로 사용되고 있다면 바로 삭제할 수 없다. 6. /etc/skel /etc/skel 은 새로운 사용자의 Home Directory에 기본적으로 들어갈 File을 관리한다. 실습에서는 welcome.txt 와 .bashrc 설정을 추가했다. nobreak@rocky-node1:~$ sudo touch /etc/skel/welcome.txt nobreak@rocky-node1:~$ echo 'echo "Welcome $USER"' | sudo tee -a /etc/skel/.bashrc echo "Welcome $USER" 이후 새로운 사용자를 생성하였다. nobreak@rocky-node1:~$ sudo useradd student11 nobreak@rocky-node1:~$ sudo su - student11 Welcome student11 새 사용자에게만 /etc/skel 의 내용이 복사되며 기존 사용자에게는 자동 적용되지 않는다. 7. su와 sudo su 는 현재 Session에서 다른 사용자로 전환한다. su su - su - 는 Login Shell 형태로 전환하여 해당 사용자의 환경까지 새로 적용한다. sudo 는 허가된 사용자가 root 등의 권한으로 Command를 실행한다. 대표적인 sudo 설정은 /etc/sudoers 에서 확인할 수 있다. root ALL=(ALL) ALL %wheel ALL=(ALL) ALL # %wheel ALL=(ALL) NOPASSWD: ALL % 는 Group을 의미한다. 8. tee Root Permission이 필요한 File에 Redirection할 때 tee 를 활용할 수 있다. nobreak@rocky-node1:~$ echo "hello" | tee hello.txt hello nobreak@rocky-node1:~$ cat hello.txt hello sudo와 함께 사용할 수도 있다. echo "내용" | sudo tee /root/file Day 13 한 줄 정리 Linux에서는 Process를 생성·제어하고, UID·GID를 기반으로 사용자와 Group을 관리하며 sudo 를 통해 높은 권한의 Command 실행을 통제한다. Linux 고급 권한·작업 스케줄링 정리 — Day 14 Day 14 — 특수 Permission과 Scheduling 1. /etc/skel과 sudo Group 실습 새로운 사용자에게 공통 File을 제공하도록 /etc/skel 을 설정하였다. nobreak@rocky-node2:~$ echo "welcome" | sudo tee /etc/skel/welcome.txt welcome nobreak@rocky-node2:~$ sudo useradd student4 nobreak@rocky-node2:~$ sudo ls -l /home/student4/ total 4 -rw-r--r--. 1 student4 student4 8 Sep 29 00:35 welcome.txt .bashrc 에도 Login Message를 추가했다. nobreak@rocky-node2:~$ echo "echo 'hello'" | sudo tee -a /etc/skel/.bashrc echo 'hello' nobreak@rocky-node2:~$ sudo useradd -m student5 nobreak@rocky-node2:~$ sudo su - student5 hello student5@rocky-node2:~$ exit logout sudo를 사용할 admins Group도 구성하였다. nobreak@rocky-node2:~$ sudo groupadd admins nobreak@rocky-node2:~$ sudo visudo -f /etc/sudoers.d/admins nobreak@rocky-node2:~$ sudo cat /etc/sudoers.d/admins %admins ALL=(ALL) ALL nobreak@rocky-node2:~$ sudo useradd student6 nobreak@rocky-node2:~$ sudo usermod -aG admins student6 sudo 사용 기록은 다음 Log에서 확인했다. nobreak@rocky-node2:~$ sudo cat /var/log/secure 2. setuid 실습 일반 사용자는 /etc/shadow 를 읽을 수 없다. nobreak@rocky-node2:~$ mkdir perm_prac nobreak@rocky-node2:~$ cp /bin/cat ~/perm_prac/secret_cat nobreak@rocky-node2:~$ perm_prac/secret_cat /etc/shadow perm_prac/secret_cat: /etc/shadow: Permission denied File Owner를 root로 변경하였다. nobreak@rocky-node2:~$ sudo chown root perm_prac/secret_cat setuid를 설정하였다. nobreak@rocky-node2:~$ sudo chmod u+s perm_prac/secret_cat Permission은 다음과 같이 변경된다. -rwsr-xr-x. 1 root nobreak 69456 Sep 30 00:06 perm_prac/secret_cat 이후 일반 사용자로 실행해도 File Owner인 root의 Effective Permission으로 Program이 실행되어 /etc/shadow 에 접근할 수 있었다. 3. 특수 Permission Permission 기호 역할 setuid s 실행 시 File Owner 권한 사용 setgid s File에서는 Group 권한 사용, Directory에서는 Group 상속 Sticky Bit t 공유 Directory에서 다른 사용자의 File 삭제 제한 Sticky Bit 실습에서는 먼저 모든 사용자가 Write 가능한 Directory를 만들었다. nobreak@rocky-node2:~$ mkdir /tmp/testdir nobreak@rocky-node2:~$ chmod 777 /tmp/testdir/ user01 이 만든 File을 user02 가 삭제할 수 있었다. Sticky Bit 설정: nobreak@rocky-node2:~$ chmod +t /tmp/testdir/ nobreak@rocky-node2:~$ ls -ld /tmp/testdir/ drwxrwxrwt. 2 nobreak nobreak 6 Sep 29 01:26 /tmp/testdir/ 이후 다른 사용자의 File 삭제가 차단되었다. rm: cannot remove '/tmp/testdir/fileA': Operation not permitted 4. ACL 기본 Owner / Group / Others 구조에 포함되지 않는 특정 사용자에게 Permission을 줄 때 ACL을 사용할 수 있다. root@rocky-node2:~# setfacl -m u:user01:rw acl/files/file1.txt root@rocky-node2:~# ls -l acl/files/file1.txt -rw-rw-r--+ 1 root root 10 Sep 29 02:08 acl/files/file1.txt root@rocky-node2:~# getfacl acl/files/file1.txt # file: acl/files/file1.txt # owner: root # group: root user::rw- user:user01:rw- group::r-- mask::rw- other::r-- ACL의 mask 는 실제 적용할 수 있는 최대 Permission을 제한한다. user:user1:rw- #effective:r- group::r-- mask::r-- 5. crontab 반복 작업 Scheduling에는 crontab 을 사용한다. -e : crontab 파일 편집 -l : crontab 파일 내용 출력 -r : crontab 파일 삭제 Cron 구조: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) # | | | | .---- day of week (0 - 6) # | | | | | # * * * * * command 수업에서 사용한 예시는 다음과 같다. # 매일 02:00에 실행 0 2 * * * # 평일 09:00에 실행 0 9 * * 1-5 # 10분마다 실행 */10 * * * * # 2시간마다 실행 0 */2 * * * # 분기별 첫날에 실행 0 0 1 1,4,7,10 * # 5분 마다 현재 시스템의 메모리 사용량 확인 및 결과를 ~/memory_log.txt 파일에 추가 */5 * * * * free -h >> ~/memory_log.txt # 매일 오후 2시 30분에 홈 디렉토리의 .tmp 파일을 모두 삭제하는 작업 30 14 * * * find ~ -name "*.tmp" -type -f -delete 6. Anacron Cron 실행 시점에 System이 꺼져 있으면 작업이 누락될 수 있다. Anacron은 System이 다시 실행되었을 때 작업 주기를 확인해 누락된 작업을 실행할 수 있다. 1 5 cron.daily 7 25 cron.weekly @monthly 45 cron.monthly Day 14 한 줄 정리 setuid·setgid·Sticky Bit와 ACL을 이용해 기본 Permission보다 세밀한 권한을 설정하고, Cron과 Anacron을 이용해 반복 작업을 자동 실행할 수 있다. Linux Disk·LVM 정리 — Day 14 ~ Day 15 Day 14 — Disk와 File System 1. MBR과 GPT Disk의 Partition Table은 대표적으로 MBR과 GPT 방식으로 나뉜다. 구분 MBR GPT Firmware BIOS UEFI 특징 기존 Partition 방식 GUID 기반 Partition 방식 대용량 Disk 약 2TB 제한 매우 큰 Disk 지원 2. fdisk Partition은 fdisk 를 이용해 관리했다. root@rocky-node2:~# fdisk /dev/sdb 주요 Command는 다음과 같다. d delete a partition l list known partition types n add a new partition p print the partition table t change a partition type w write table to disk and exit q quit without saving changes g create a new empty GPT partition table o create a new empty MBR (DOS) partition table Partition 생성 후 XFS 등의 File System을 만들고 Mount하여 사용한다. Day 14 한 줄 정리 Disk는 Partition Table → Partition → File System → Mount 과정을 거쳐 Linux의 Directory 구조에 연결된다. Day 15 — LVM 1. LVM 구조 LVM은 다음 구조로 Storage를 관리한다. Partition ↓ PV ↓ VG ↓ LV ↓ File System ↓ Mount 2. LVM 생성 실습 Partition Type을 Linux LVM으로 변경하였다. root@rocky-node2:~# fdisk /dev/sdb Command (m for help): t Selected partition 1 Hex code or alias (type L to list all): 8e Changed type of partition 'Linux' to 'Linux LVM'. PV 생성: root@rocky-node2:~# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. VG 생성: root@rocky-node2:~# vgcreate vg_test /dev/sdb1 Volume group "vg_test" successfully created LV 생성: root@rocky-node2:~# lvcreate -n lv_test -L 5G vg_test Logical volume "lv_test" created. XFS 생성: root@rocky-node2:~# mkfs.xfs /dev/vg_test/lv_test Mount: root@rocky-node2:~# mkdir /lvmtest root@rocky-node2:~# mount /dev/vg_test/lv_test /lvmtest root@rocky-node2:~# df -h /lvmtest Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_test-lv_test 5.0G 130M 4.9G 3% /lvmtest 3. Logical Volume 확장 1GB File 생성: root@rocky-node2:~# sudo dd if=/dev/zero of=/lvmtest/testfile bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.222304 s, 4.7 GB/s Logical Volume을 5GB에서 8GB로 확장하였다. root@rocky-node2:~# lvextend -L 8G /dev/vg_test/lv_test Size of logical volume vg_test/lv_test changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents). Logical volume vg_test/lv_test successfully resized. 하지만 File System은 아직 5GB로 인식하고 있었다. /dev/mapper/vg_test-lv_test 5.0G 1.2G 3.9G 23% /lvmtest XFS File System까지 확장하였다. root@rocky-node2:~# xfs_growfs /lvmtest/ 확인: root@rocky-node2:~# df -h | grep vg /dev/mapper/vg_test-lv_test 8.0G 1.2G 6.8G 15% /lvmtest 4. Snapshot Snapshot 생성: root@rocky-node2:~# lvcreate -L 1G --snapshot --name lv_test_snap /dev/vg_test/lv_test Logical volume "lv_test_snap" created. Snapshot 생성 후 원본에 File을 추가했다. root@rocky-node2:~# touch /lvmtest/snapshot.txt XFS Snapshot은 원본과 같은 UUID를 사용하므로 그대로 Mount했을 때 Error가 발생했다. 이를 무시하고 Mount: root@rocky-node2:~# mount -o nouuid /dev/vg_test/lv_test_snap /snap 원본과 Snapshot을 비교하였다. root@rocky-node2:~# ls -al /snap total 1024000 drwxr-xr-x. 2 root root 22 Sep 30 08:29 . dr-xr-xr-x. 20 root root 262 Sep 30 08:38 .. -rw-r--r--. 1 root root 1048576000 Sep 30 08:29 testfile root@rocky-node2:~# ls -al /lvmtest total 1024000 drwxr-xr-x. 2 root root 42 Sep 30 08:37 . dr-xr-xr-x. 20 root root 262 Sep 30 08:38 .. -rw-r--r--. 1 root root 0 Sep 30 08:37 snapshot.txt -rw-r--r--. 1 root root 1048576000 Sep 30 08:29 testfile Day 15 한
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[Toss Bootcamp] Linux 및 운영체제. Linux 프로세스·사용자 관리 정리 — Day 13 Day 13 — Process와 사용자 관리 1. Process 구조 Linux에서는 Parent Process가 fork() 를 통해 Child Process를 만들고, Child Process에서 execve() 를 통해 새로운 Program을 실행할 수 있다. Parent Process │ │ fork() / \ / \ / \ Parent Process Child Process │ │ │ execve() │ │ │ 새로운 프로그램 실행 │ │ wait() │ │ exit(status) │ │ │◀──── 종료 상태 전달 │ wait() 반환 │ 부모 실행 계속 Process 확인과 제어에 사용한…
Open source