[리눅스마스터1급2차] 랜덤문제디펜스 (1702-1902)

gosu·2023년 11월 5일
0
post-thumbnail

1702회

1702.01

다음은 특수권한 설정에 관한 명령어 이다. ( 괄호 ) 안에 알맞은 옵션을 넣으시오.

[root@ihd ~]# chmod ( ① ) /ihd

■ 조건

  • 일반 사용자들이 /ihd 디렉터리에서 파일 및 디렉터리 생성이 가능하다. - 일반 사용자들은 자신이 생성한 파일 및 디렉터리 이외에는 수정 및 삭제가 불가능하다. - 기존에 설정된 /ihd 디렉터리의 허가권(Permission)값에 상관없이 적용되도록 설정한다.

1702.01.solve

  • 1777 (스티키 비트)

특수 권한에 대하여

  • Set-UID
    • 실행하는 동안 파일의 소유자 권한으로 인식한다.
    • 일반적으로 실행 파일에 사용된다.
# chmod u+s [파일]
# chmod 4777 [파일]
  • Set-GID
    • 실행하는 동안 해당 파일의 소유자 그룹 권한으로 인식한다
    • 일반적으로 디렉터리에 설정된다.
    • 사용자가 파일이나 디렉터리를 생성하면 사용자가 속한 그룹에 상관없이 디렉터리 소유 그룹으로 만들어진다
# chmod g+s [파일]
# chmod 2777 [파일]
  • Sticky-Bit
    • 일반 사용자들이 디렉터리에서 파일 및 디렉터리 생성이 가능하다
    • 일반 사용자들은 자신이 생성한 것 이외에는 수정 및 삭제가 불가능하다.
    • 디렉터리에만 적용된다
chmod 1777 [파일]

1702.08

다음 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

# ( ① ) ( ② ) -f /var/log/messages 'Hello, World!'

■ 조건

  • 명령어는 root 사용자 계정으로 수행한다.
  • 명령어를 이용하여 /var/log/messages 파일에 문자열을 추가한다.
  • 'Hello, World!'이 로그파일에 기록될 때 같은 라인에 프로세스 아이디도 기록되도록 한다.- 각각의 괄호에는 하나의 명령어 또는 하나의 옵션만 기입한다.

1702.08.solve

  1. logger
  2. -i

logger에 관하여 - chatGPT 답변

여기서 'LOGGER'가 지칭하는 것이 무엇인지에 따라 다를 수 있습니다만, 일반적으로 LOGGER는 로깅을 수행하는 도구나 프로그램, 또는 커맨드 라인 명령어를 의미합니다.

예를 들어, 컴퓨터 프로그래밍에서 로거(Logger)는 시스템의 실행에 대한 정보를 수집하고 기록하는 컴포넌트를 말합니다. 로그는 시스템의 이벤트, 데이터 처리, 오류, 상태 정보 등을 포함할 수 있으며, 디버깅, 모니터링, 오류 추적 등 다양한 목적으로 사용됩니다.

프로그래밍 언어나 프레임워크에 따라 로거를 구현하는 방식이 다릅니다. 예를 들어, 자바에서는 Log4j, SLF4J 같은 로깅 프레임워크가 사용되고, 파이썬에서는 logging 모듈이 내장되어 있어서 로거를 쉽게 사용할 수 있습니다.

리눅스나 유닉스 시스템에서는 'logger'라는 명령어가 시스템 로그를 관리하는데 사용됩니다. 이 명령어는 메시지를 syslog에 보내는 역할을 하며, 다음과 같이 사용할 수 있습니다.

logger [옵션] 메시지

예를 들어, 사용자가 특정 메시지를 시스템 로그에 기록하고 싶을 때 다음과 같은 명령어를 사용할 수 있습니다.

logger -p local0.notice "특정 작업이 완료되었습니다."

이 명령어는 "특정 작업이 완료되었습니다."라는 메시지를 로컬0.notice 우선 순위로 syslog에 보냅니다.

각 로깅 도구나 시스템은 로거를 사용하는 방식이나 설정 방법이 상이할 수 있으므로, 특정 프로그래밍 언어나 시스템에 대한 LOGGER 사용법에 대해서는 그에 맞는 문서를 참조하시는 것이 좋습니다.

1702.11

다음은 웹서버 2.x 접근통제에 대한 설정 이다. ( 괄호 ) 안에 알맞은 내용을 넣으시오.

[root@ihd ~]# vi /etc/httpd/conf/httpd.conf
<Directory "www/ihd/admin">
( ① ) Deny,Allow
( ② ) from ( ③ )
Allow from ( ④ )
</Directory>

■ 조건

  • 접근을 통제할 디렉터리는 /www/ihd/admin 이다.
  • 192.168.22.0 네트워크 대역의 주소를 갖는 클라이언트 접속만 허용한다.

1702.11.solve

  1. Order
  2. Deny
  3. All
  4. 192.168.22.0/24

1702.11.howtosolve

  • httpd.conf 파일에 적혀있지 않습니다.
  • 그러나 다음 명령어를 통해 대략 비슷한 문서를 검색할 수 있었습니다. (Apache 환경이 깔려있어야합니다.)
grep -ri "order" /usr/local/apache
  • 굉장히 많은 문자열들이 검색되는데, 그중 /usr/local/apache/manual/env.html.ja.utf8 파일에서 비슷한 문구를 발견할 수 있었고 이 파일을 출력해보면 다음과 같이 확인할 수 있습니다.
# Allow browsers that do not send Referer info
SetEnvIf Referer "^$" local_referal
&lt;Directory /web/images&gt;
   Order Deny,Allow
   Deny from all
   Allow from env=local_referal
&lt;/Directory&gt;</pre></div>

1702.14

다음은 Squid 프록시 서버의 접근 제한 설정하는 과정이다. 조건에 맞게 ( 괄호) 안에알맞은 내용을 적으시오.

( ① ) kait src ( ② )
http_access ( ③ ) ( ④ )
http_access ( ⑤ ) ( ⑥ )

■ 조 건

  • 10.20.17.0 네트워크 대역에 속한 호스트만 허가하고, 해당 네트워크 대역에 속하지않은모든 호스트의 사용을 거부한다.
  • 10.20.17.0 네트워크는 C클래스 대역으로 제한한다.

1702.14.solve

① acl
② 10.20.17.0/255.255.255.0
또는 10.20.17.0/24
③ allow
④ kait
⑤ deny
⑥ all

1702.14 - deny와 allow 순서에 관하여. chatGPT 답변

Squid 프록시 서버에서 http_access 지시문은 순서에 매우 민감합니다. http_access 지시문은 위에서부터 아래로 순차적으로 처리되며, 첫 번째로 일치하는 규칙에 따라 접근 허용 여부가 결정됩니다. 따라서 순서가 바뀌면 접근 제어의 결과가 완전히 달라질 수 있습니다.

allow가 먼저 올 때:

http_access allow kait
http_access deny all

위의 경우, 먼저 kait에 해당하는 네트워크 대역의 접근을 허용하고, 그 다음에 모든 다른 접근을 거부합니다. 이 설정은 kait 네트워크 대역 내에서의 접근만을 허가하고, 그 외는 모두 거부하는 것으로, 제시된 조건에 부합합니다.

deny가 먼저 올 때:

http_access deny all
http_access allow kait

이 경우에는, 첫 번째 줄에서 이미 모든 접근을 거부하도록 설정했기 때문에, 그 아래에 있는 allow 지시문은 절대 실행되지 않습니다. 즉, kait 네트워크 대역 조차도 접근이 허용되지 않는 결과를 초래합니다.

결론적으로, allowdeny의 순서를 바꾸면 설정이 의도한 대로 작동하지 않게 되며, 이는 보안 정책에 심각한 구멍을 낼 수 있습니다. 보통은 더 구체적인 규칙을 먼저 배치하고, 더 일반적인 규칙을 나중에 배치하는 것이 좋은 규칙입니다.

  • squid는 한번 규칙을 세우면 "절대 바꾸지 않는다"로 외워야 할 것 같습니다. 1부터 10까지의 영역이 있을 때, squid의 규칙으로 http_access allow 3-5 라고 먼저 적으면, 이 규칙은 다른 추가되는 어떤 설정으로도 바꿀 수 없습니다.

1801회

1801.02

다음은 사용자의 디스크 쿼터(Disk Quota)를 설정하는 과정이다. ( 괄호 ) 안에알맞은내용을 적으시오.

가. 사용자에게 설정된 유예 기간(grace period)을 변경한다. # ( ① ) ( ② )
나. ihduser에 설정된 쿼터 용량을 kaituser에 동일하게 적용시킨다. # ( ① ) ( ③ )
다. kaituser에 적용된 디스크 쿼터 정보를 확인한다. # ( ④ ) kaituser

■ 조건

  • ①과 ④번은 해당 명령어만 기입한다.
  • ②과 ③번은 명령어의 옵션 또는 옵션과 관련된 인자값을 기입하는데, 옵션과관련된인자값이 있는 경우에는 하나의 괄호로 처리한다. (예: -d /home/ihduser)

1801.02.solve

  1. edquota
  2. -t
  3. -p ihduser -u kaituser
  4. quota kaituser

1801.02.howtosolve

  1. compgen -c | grep quota 명령어를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
[root@localhost dhcp]# compgen -c | grep quota
quota
quotasync
smbcquotas
xfs_quota
convertquota
edquota
quotacheck
quotaoff
quotaon
quotastats
repquota
rpc.rquotad
setquota
quota
quotasync
smbcquotas
xfs_quota
convertquota
edquota
quotacheck
quotaoff
quotaon
quotastats
repquota
rpc.rquotad
setquota
  1. 여기서 quota를 편집할 것 같은 명령어는 edquota밖에 없는데, man 페이지에서 이를 확인하면서 문제를 풀 수 있습니다.

  2. 그러나, 3번 보기에서 막히는데, man 페이지의 -p 옵션은 protoname를 인자로 받는다는 설명때문입니다. 그러나 지금 문제에서 이걸 어떻게 써야하는지 설명이 없으므로 그냥 유저 이름 적으면 되겠습니다. -u 옵션으로 사용자를 지정하는 것도 필요합니다.

-p, --prototype=protoname
              Duplicate the quotas of the prototypical user specified for each user spec‐
              ified.  This is the normal mechanism used to initialize quotas  for  groups
              of users.

1801.09

다음은 시스템 보안 강화를 위해 커널 매개 변수(parameter)를 제어하는 과정이다. 작업사항에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. ping 명령어에 응답하지 않도록 커널 매개 변수를 변경한다. # ( ① ) ( ② )
나. ‘가’ 항의 작업이 재부팅 시에도 적용되도록 관련 파일에 등록한다. # vi ( ③ )

■ 조건

  • ①번은 관련 명령어만 기재한다. (echo 명령 제외)
  • ②번은 명령어의 옵션이나 명령어의 옵션과 관련된 인자값 등 해당 작업을 수행할수있는 내용을 기입한다.
  • ③번은 관련 파일명을 절대경로로 기입한다.

1801.09.solve

  1. sysctl
  2. -w net.ipv4.icmp_echo_ignore_all=1
  3. /etc/sysctl.conf

1801.09.howtosolve

  • 일단, 다음 문제는 상당히 난이도가 있다. sysctl이란 명령어 자체가 빈출 명령어가 아닐 뿐더러, net.ipv4.icmp_echo_ignore_all=1 과 같은 설정을 찾기도 어렵기 때문이다. 만약 똑같은 문제로 출제된다면 풀기 어려울 수도 있다.
  • sysctl의 man 페이지를 보면 다음과 같다.
DESCRIPTION
       sysctl  is  used to modify kernel parameters at runtime.  The parameters available
       are those listed under /proc/sys/.  Procfs  is  required  for  sysctl  support  in
       Linux.  You can use sysctl to both read and write sysctl data.
  • 매개변수에 대한 설명이 나오는데, /proc/sys/ 경로 안에 있는 것들은 매개변수로 사용할 수 있다는 설명이다. 따라서 다음 명령어로 sysctl에 들어갈 매개변수들을 확인할 수 있다.
[root@localhost sys]# cd /proc/sys
[root@localhost sys]# ls -R | grep icmp
icmp_echo_ignore_all
icmp_echo_ignore_broadcasts
icmp_errors_use_inbound_ifaddr
icmp_ignore_bogus_error_responses
icmp_msgs_burst
icmp_msgs_per_sec
icmp_ratelimit
icmp_ratemask
icmp
./net/ipv6/icmp:
nf_conntrack_icmp_timeout
nf_conntrack_icmpv6_timeout
  • 이렇게 icmp에 관한 설정들을 확인할 수 있고, 값이 어떻게 사용되는지 확인하기위해 찾은 파일의 경로로 들어간 후 cat 명령어를 사용해 확인하면 0이라고 써져있는 것을 확인할 수 있다.
[root@localhost ipv4]# cat icmp_echo_ignore_all
0
  • 따라서 2번의 정답은 net.ipv4.icmp_echo_ignore_all=1 인 것이다. icmp_echo_ignore_all은 /sys/proc/net/ipv4 에 위치하고, /sys/proc 이하의 디렉터리를 입장했다는 의미로 '/'를 사용하는 것이 아닌 '.'을 사용해 표현한다.

1801.15

다음은 iptables를 이용해서 방화벽을 설정하는 과정이다. 작업 사항에 맞게 ( 괄호) 안에알맞은 내용을 적으시오.

가. 기본 테이블인 filter의 INPUT 사슬에 설정한 두 번째 정책이 IP 주소 오류로 인해수정하려고 한다.
# iptables ( ① ) -s 192.168.12.22 -j DROP
 
나. 기본 테이블인 filter의 INPUT 사슬에 설정한 다섯 번째 정책을 삭제한다. 
# iptables ( ② )

다. 기본 테이블인 filter의 INPUT 사슬에 설정한 두 번째 정책 이후와 연관된 로그를 기록하도록 설정한다. 
# iptables ( ③ ) -j LOG

■ 조건

  • ①~③번은 작업 사항에 알맞은 내용을 기입한다.

1801.15.solve

  • ① (-t filter) -R INPUT 2 (-R 대신에 --replace 가능)
  • ② (-t filter) -D INPUT 5 (-D 대신에 --delete 가능)
  • ③ (-t filter) -I INPUT 2 (-I 대신에 --insert 가능) ( -t filter는 생략 가능 )

1801.15.주의할점

  • 침착하게 풀면 쉬운 문제입니다. man iptables 로 사용법을 검색하고 그대로 붙여넣으면 되지만, 2가지의 주의사항이 있습니다.
  1. 문법 순서에 주의
  • -R|-A|-I chain rule-specification
  • 다음 순서를 기억하고 풀어야합니다.
  • -R 2 INPUT 이런식으로 쓰면 바로 오답인 것이죠.
  1. -A 와 -I의 차이
  • 언뜻 보면 -A로 정답을 적어내기 쉽습니다. 그러나 차이가 있죠.
    • -A : 마지막에 덧붙이는 것입니다. 그래서 숫자를 적지 않습니다.
    • -I : 중간 위치에 끼워넣는 것입니다. 그래서 끼워넣을 자리를 지정해줘야하죠.

1802회

1802.09

다음은 운영 중인 sshd 서버로 접근하는 root 계정에 대한 거부 설정을 하는 과정이다.
조건 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

# vi ( ① )
( ② )

■ 조건

  • ①번은 관련 파일명을 절대경로로 기입한다.
  • ②번은 관련 항목과 값만 한 줄로 기입한다.

1802.09.solve

① /etc/ssh/sshd_config
② PermitRootLogin no

1802.09.참고문헌

  • sshd_config라는 파일명만 잘 기억해두면 예제들이 자세히 나와있기 때문에 쉽게 풀 수 있습니다.
  • 다음 문서에 sshd_config 에대한 정리를 해두었습니다. sshd_config

1802.11

다음은 아파치 웹 사용자 인증 및 점검하는 과정이다. 조건에 맞게 ( 괄호 ) 안에알맞은내용을 적으시오.

가. ihduser라는 웹 사용자를 생성하는데, 관련 파일은 /usr/local/apache/conf/password로
생성한다. 
# ( ① ) ( ② )
나. 아파치 환경 설정 파일의 문법적 오류가 있는지 여부를 점검한다.
# ( ③ )
다. 아파치 웹 서버를 재시작하지 않고, 변경된 환경 설정 파일 정보만을 다시 읽어들인다. 
# ( ④ )

■ 조건

  • ①번은 관련 명령어만 기재한다. (①번의 명령어가 틀리면 ②번은 배점하지 않는다.)
  • ②은 명령어의 옵션 또는 옵션과 관련된 인자값을 기입하는데, 옵션과 관련된 인자값이있는 경우에는 하나의 괄호로 처리한다. (예: -d /home/ihduser)
  • ③과 ④번은 ‘명령어’, ‘명령어 옵션’, ‘명령어 옵션 인자값’ 등 해당 정보를 출력할 수있는내용의 형식으로 기입한다.

1802.11.solve

① htpasswd
② -c /usr/local/apache/conf/password ihduser
③ httpd -t 또는 service httpd configtest (httpd 대신에 apachectl 가능)
④ httpd -k graceful 또는 service httpd graceful (httpd 대신에 apachectl 가능)

1802.11.암기해야할 것

[root@localhost bin]# find / | grep apache
[root@localhost bin]# cd /usr/local/apache/
  • 다음 명령어를 통해 apache 가 설치된 경로를 찾고, apache의 bin 폴더와 conf 폴더에 접근 할 수 있습니다. bin 폴더에 입장하고 ls 명령어를 통해 어떤 명령어들이 있는지 확인할 수 있어 하나하나 man 페이지로 명령어를 확인해가면서 풀어야 하는 문제들입니다.
  • 1~3번은 상대적으로 검색해서 풀기 쉬우나 httpd -k graceful의 경우 풀기 어렵습니다.
-k start|restart|graceful|stop|graceful-stop
Signals httpd to start, restart, or stop. See  Stopping  Apache  httpd  for more information.
  • 기본적으로 start, restart, stop 이 있으며, graceful, graceful-stop 도 있습니다.
  • graceful = "서버 무중단 재시작" 옵션으로 외워두면 되겠습니다.

1802.12

다음은 NIS 도메인명을 설정하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은내용을적으시오.

가. 관련 명령어를 사용해서 NIS 도메인명을 ihd.or.kr로 지정한다. 
# ( ① ) ihd.or.kr

나. 재부팅 시에도 관련 NIS 도메인명이 적용시키기 위해 관련 파일에 등록한다. 
# vi ( ② )
( ③ )

■ 조건

  • ①번은 관련 명령어만 기재한다.
  • ②은 관련 파일명을 절대 경로로 기입한다.
  • ③번은 관련 설정 내용을 기입한다.

1802.12.solve

① nisdomainname
② /etc/sysconfig/network
③ NISDOMAIN=ihd.or.kr

  • 2번 파일의 경우 그냥 외워야합니다.
  • nis이므로 nis를 거꾸로한 sin : etc/sysconfig/network 로 암기해야 할 것 같습니다.

1802.13

다음은 vsftpd 서버를 설정하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. ihduser 와 kaituser의 FTP 서버 접근을 거부하도록 설정한다. 
# vi ( ① ) 
ihduser kaituser

나. 접속한 사용자의 홈 디렉터리를 최상위 디렉터리로 지정한다.
# vi ( ② ) 
( ③ )

■ 조건

  • ①과 ②번은 관련 파일명을 절대 경로로 기입한다.
  • ③번은 관련 항목과 값만 한 줄로 기입한다.

1802.13.solve

① /etc/vsftpd/ftpusers 또는 /etc/vsftpd/user_list
② /etc/vsftpd/vsftpd.conf
③ chroot_local_user=YES

1802.13.howtosolve

  • 다음 문제는 침착하게 검색하면 풀 수 있는 문제입니다.
[root@localhost /]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost vsftpd]# cat user_list 
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@localhost vsftpd]# 
  • 다음 명령어를 통해 금지할 유저의 목록을 지정할 수 있습니다.

1802.16

다음은 DHCP 서버 운영을 위해 환경 설정 파일에 주요 설정을 진행하는 과정이다.
작업 사항에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 할당할 IP 주소 대역을 192.168.5.1부터 192.168.5.253로 지정하고, DHCP 클라이언트 뿐만아니라 BOOTP 클라이언트도 함께 할당한다. 
( ① )
나. 할당할 도메인명은 ihd.or.kr로 지정한다. 
( ② )
다. 할당할 게이트웨이 주소를 192.168.5.254로 지정한다. 
( ③ )
라. 할당할 브로드캐스트 주소는 192.168.5.255로 지정한다.
( ④ )

■ 조건

  • ①~ ④번은 조건과 관련된 항목과 설정값을 한 줄씩 기입한다.

1802.16.solve

① range dynamic-bootp 192.168.5.1 192.168.5.253;
② option domain-name “ihd.or.kr”;
③ option routers 192.168.5.254;
④ option broadcast-address 192.168.5.255;

1901회

1901.01

다음 조건에 맞게 사용자 정보를 변경하려고 할 때 ( 괄호 ) 안에 알맞은 내용을 적으시오.

# ( ① ) ( ② ) ( ③ ) ( ④ ) ihduser

■ 조건

  • ihduser의 사용자명을 kaituser로 변경한다.
  • 홈 디렉터리를 /home/ihduser에서 /home/kaituser로 변경하고, 기존에 소유했던 파일이나디렉터리도 그대로 이용 가능하도록 한다.
  • ① 번은 해당 명령어를 기재한다.
  • ②∼④번은 명령어의 옵션 또는 옵션과 관련된 인자 값을

1901.01.solve

① usermod
② -l kaituser
③ -d /home/kaituser
④ -m (②∼④는순서무관, ①번명령어를틀렸을경우옵션채점제외)

1901.01.주의사항

  • -m 옵션을 사용할 때는 디렉터리를 따로 붙이지 않습니다.

1901.07

다음은 rpm으로 설치된 특정 패키지 제거 및 이후에 발생된 문제점을 찾는 과정이다.
조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. rpm 패키지로 설치된 mysql를 제거하는데, 의존성은 무시한다.
 # rpm ( ① ) mysql
나. mysql 패키지를 제거했더니, postfix가 정상적으로 동작하지 않는다. 
   postfix의 실행 명령어의 위치 정보를 출력하는 명령을 적는다.
 # ( ② ) postfix
다. postfix가 참고하는 동적 라이브러리 정보를 확인하는 명령을 기재한다.
 # ( ③ ) ( ④ )

■ 조건

  • ①번은 필요한 옵션을 한 번에 기재한다.
  • ②번은 실행되는 명령어만 기재한다. 옵션이나 인자 값은 기재하지 않는다.
  • ③번은 명령어만 기재한다.
  • ④번은 관련 파일의 경로를 절대 경로로 기재한다. (제공된 리눅스 버전 기준)

1901.07.solve

① -e --nodeps
② which 또는 whereis
③ ldd
④ /usr/sbin/postfix

ldd.chatGPT 답변

  • rpm은 자주 출제되는 명령어인지라 별로 어렵지 않게 풀 수 있었습니다. 그러나, ldd는 생소하네요.

ldd 명령어는 리눅스 시스템에서 실행 가능한 파일들, 특히 실행 파일이나 공유 라이브러리 파일들이 동적으로 연결된(shared object dependencies) 라이브러리들을 확인하는 데 사용됩니다. 이 명령어를 통해 특정 프로그램이 실행될 때 필요한 공유 라이브러리의 목록과 그 위치, 그리고 버전 등의 정보를 알 수 있습니다.

ldd 명령어의 기본적인 사용 방법은 다음과 같습니다:

ldd [옵션] 실행파일명

여기서 [옵션]에는 다양한 옵션이 들어갈 수 있으며, 실행파일명에는 대상이 되는 실행 파일의 경로를 넣어줍니다.

예를 들어, /usr/bin/ls 명령어가 어떤 공유 라이브러리에 의존하는지 확인하려면 다음과 같이 입력합니다:

ldd /usr/bin/ls

출력 예시는 다음과 같을 수 있습니다:

linux-vdso.so.1 =>  (0x00007ffeecbfe000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f0927dd7000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0927a09000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f09277a7000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f09275a3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f092800b000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0927387000)

이 출력은 ls 명령어가 실행될 때, 위에 표시된 공유 라이브러리들이 필요하다는 것을 의미하며, 각 라이브러리의 경로와 메모리 상에서의 위치 정보를 보여줍니다.

ldd는 디버깅이나 시스템 유지보수, 패키지 관리 등에 유용하게 쓰이는 명령어입니다. 다만, 안전하지 않은 경로에서 가져온 실행 파일에 대해서는 사용을 피해야 합니다. 악의적으로 조작된 파일을 ldd로 확인할 경우, 시스템에 보안상의 위험이 발생할 수 있습니다.

1901.12

다음은 NIS 클라이언트에서 명령어를 사용해서 다양한 정보를 조회하고 변경하는 과정이다.
조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 지정된 NIS 서버이름을 출력한다.
 # ( ① )
나. NIS 서버의 맵 파일을 출력한다.
 # ( ① ) ( ② )
다. NIS 서버의 사용자 관련 정보를 출력한다.
 # ( ③ ) passwd.byname
라. NIS 서버에 등록된 lin 사용자의 패스워드를 변경한다.
 # ( ④ ) lin

■ 조건

  • ①, ③, ④번은 관련 명령어만 기재한다.
  • ②번은 명령어의 옵션을 기재한다. ①번의 명령어가 틀리면 ②번은 배점하지 않는다.

1901.12.solve

① ypwhich
② -m
③ ypcat
④ yppasswd

1901.12.howtosolve

  • 다음 명령어는 생소한 명령어입니다. 본래 nis 서버는 yp의 명칭을 사용했다는 것을 기억하고, /yp를 검색하여 그에 대한 정보를 얻을 수 있습니다. 명령어는 /usr/bin에 모여있는 것을 확인할 수 있는데 그것을 출력해 하나하나 대입하는 식으로 풀면 되겠습니다.
[root@localhost bin]# ls -l | grep yp
-rwxr-xr-x.   1 root root       65080  6월 10  2014 dvd+rw-booktype
-rwxr-xr-x.   1 root root       16000  6월 10  2014 gst-typefind
-rwxr-xr-x.   1 root root       15728  6월 10  2014 gst-typefind-0.10
-rwxr-xr-x.   1 root root       15752  8월  3  2017 gst-typefind-1.0
lrwxrwxrwx.   1 root root           6 10월 15 16:25 mtype -> mtools
-rwxr-xr-x.   1 root root       15864  8월  4  2017 ypcat
-rwxr-xr-x.   3 root root       24296  8월  4  2017 ypchfn
-rwxr-xr-x.   3 root root       24296  8월  4  2017 ypchsh
lrwxrwxrwx.   1 root root           8 10월 15 16:25 ypdomainname -> hostname
-rwxr-xr-x.   1 root root       24496  8월  4  2017 ypmatch
-rwxr-xr-x.   3 root root       24296  8월  4  2017 yppasswd
-rwxr-xr-x.   1 root root       16008  8월  4  2017 ypwhich

1901.13

다음은 삼바 서버를 설정하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 윈도우 운영체제에서 이름으로 접근할 때의 명칭은 ihd_com으로 지정한다.
 ( ① )
나. 공유 그룹명은 IHD로 지정한다.
 ( ② )
다. 서버에 대한 설명은 IHD server로 지정한다.
 ( ③ )
라. 접근할 수 있는 호스트는 192.168.5.0 네트워크에 대역에 속한 모든 호스트들과
로컬시스템으로 제한한다.
 ( ④ )

■ 조건

  • ① ∼ ④번은 관련 항목과 값을 한 번에 기재한다.

1901.13.solve

① netbios name = ihd_com
② workgroup = IHD
③ server string = IHD server
④ hosts allow= 127. 192.168.5. (분리자콤마가능등)

1901.13.주의사항

  • 4번 항목을 주의해야합니다. 2가지의 주의사항이 있습니다.
    1. 192.168.5.0/24 와 같은 표현식으로 쓰면 오답입니다. 반드시 양식에 맞춰 192.168.5. 등으로 사용해야합니다.
    2. localhost의 접근도 포함하고 있습니다. 이를 주의깊게 보고 정답으로 제출해야합니다. localhost를 따로 별칭으로 두지 않았으므로 127. (127. 대역의 호스트들은 전부 허용한다) 으로 표기해야 옳습니다.

1901.16

다음은 TCP Wrapper를 이용해 외부의 호스트들의 접근을 제어하는 과정이다. 현재관련파일 설정을 통해 모든 호스트에 대한 접근이 거부된 상태일 경우 작업 사항에맞게( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 특정 호스트들에 대한 허가 관련 설정을 위해 관련 파일을 편집기로 작업한다.
 # vi ( ① )
나. 모든 서비스에 대해 로컬호스트와 ihd.or.kr 도메인을 사용하는 호스트들은 모두
허가한다.
 ( ② )
다. 텔넷 서비스는 192.168.5.13번 호스트만 허가한다.
 ( ③ )
라. ssh는 192.168.5.0 네트워크 대역에 속한 모든 호스트를 허가한다.
 ( ④ )

■ 조건

  • ①번은 해당 파일명을 절대 경로로 기재한다.
  • ②∼④번은 관련 항목의 설정 값을 하나씩

1901.16.solve

① /etc/hosts.allow
② ALL: localhost, .ihd.or.kr (분리자 공백 가능 등)
③ in.telnetd: 192.168.5.13
④ sshd: 192.168.5. 또는 sshd: 192.168.5.0/255.255.255.0

1901.16.TCP Wrapper 주의사항

  • 고난이도 문제입니다. 몇 가지 주의사항이 있습니다.
  1. ALL : ALL은 오답.

    • 문제에서 명시적으로 로컬호스트와 ihd.or.kr에서의 접근을 요구하고 있기 때문에 ALL으로 간주하는 것은 무리가 있습니다. 자주 보는 블로그에 정답이 ALL:ALL로 잘못 표기되어 있습니다.
  2. localhost를 지원합니다.

    • 모든 로컬 영역에서 지원한다고 했을 때 다음 호스트를 127.0.0.0/255.0.0.0 과 같이 쓰지 않고, localhost로 편리하게 사용하면 됩니다.
  3. '모든 도메인'을 표현하고 싶을 때에는,

    • .ihd.or.kr과 같이 표현하면됩니다. 앞에 .을 쓰고 비워두는 것이죠
  4. sshd: 192.168.5.0/24는 오답

    • TCP Wrapper는 다음과 같은 형식을 지원하지 않습니다. 대부분 설정 파일에서 /24와 같은 CIDR 표기법을 지원하지만, TCP Wrapper에서는 지원하지 않으므로 전부 다 표기해줘야합니다.

1902회

1902.03

다음은 리눅스 시스템에 백업한 정보가 담겨 있는 USB 메모리를 장착하여 인식 여부및장치 파일명을 확인하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 명령어를 이용해서 관련 정보를 확인한다.
 # ( ① )
나. 관련 정보가 담겨 있는 파일로 확인한다.
 # cat ( ② )

■ 조건

  • ①번은 명령어, 명령어와 옵션 등 관련 정보를 출력할 수 있는 명령을 한 번에 기입한다.
  • ②번은 관련 파일명을 절대 경로로 기입한다.

1902.03.solve

① fdisk -l 또는 dmesg 또는 blkid
② /proc/partitions 또는 /etc/blkid/blkid.tab

1902.03.chatGPT 풀이

가. USB 메모리를 리눅스 시스템에 장착한 후 인식 여부를 확인하고 장치 파일명을 확인하려면 dmesg 명령어를 사용하면 됩니다. dmesg는 시스템 부팅이나 장치를 장착했을 때의 메시지를 출력합니다. 여기서 가장 최근의 메시지를 보기 위해 tail 명령어와 함께 사용할 수 있습니다.

# ( dmesg | tail )

나. 관련 정보가 담겨 있는 파일로는 /var/log/syslog 파일을 확인할 수 있지만, USB 장치와 관련된 파일을 직접적으로 확인하려면 /proc/partitions 파일을 확인하면 됩니다. 이 파일에는 현재 시스템에 인식된 모든 파티션이 목록화되어 있습니다.

# cat ( /proc/partitions )

위의 명령어들을 통해 리눅스 시스템에 USB 메모리가 제대로 인식되었는지 그리고 장치 파일명이 무엇인지를 알 수 있습니다.

[root@localhost proc]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009fdc6

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

Disk /dev/mapper/centos-root: 18.2 GB, 18249416704 bytes, 35643392 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@localhost proc]# cd /proc
[root@localhost proc]# ls
1     1426  2     2504  272   290   31    3242  3384  3488  3532  3664  3810  3988  407   51   624  710  748  984        diskstats    kcore       mounts        swaps
10    1428  20    2505  2720  2947  3178  3247  3389  3497  3538  3665  3830  399   408   519  626  711  749  987        dma          key-users   mtrr          sys
103   1430  21    2513  273   3     3179  3250  3400  3500  3539  3670  384   4     409   52   627  713  750  acpi       driver       keys        net           sysrq-trigger
11    1433  22    2599  274   30    3193  3281  3402  3503  3551  3694  3840  400   410   522  631  730  768  asound     execdomains  kmsg        pagetypeinfo  sysvipc
1138  1437  23    26    2769  3020  3194  3293  3413  3510  36    37    385   401   4290  53   66   732  773  buddyinfo  fb           kpagecount  partitions    timer_list
1140  1438  24    2600  28    3029  3201  3347  3421  3512  3615  3723  3885  402   4311  543  680  733  782  bus        filesystems  kpageflags  sched_debug   timer_stats
12    15    2490  268   282   3051  3203  3351  3426  3513  3621  374   39    403   47    565  682  736  786  cgroups    fs           loadavg     schedstat     tty
13    16    2492  269   2863  3060  3206  3355  3436  3524  3640  3744  3915  404   48    6    684  737  796  cmdline    interrupts   locks       scsi          uptime
14    163   2493  27    2865  3061  3207  3358  3442  3527  3643  375   3943  405   49    613  686  738  8    consoles   iomem        mdstat      self          version
1420  17    25    270   288   3090  322   3367  3478  3529  3648  3754  3961  4051  5     616  687  739  805  cpuinfo    ioports      meminfo     slabinfo      vmallocinfo
1422  1768  2502  2705  2880  3094  3223  3372  3480  3530  3651  3784  3969  406   50    618  7    741  9    crypto     irq          misc        softirqs      vmstat
1425  19    2503  271   29    3099  323   3378  3482  3531  3658  38    3970  4060  501   620  709  743  969  devices    kallsyms     modules     stat          zoneinfo
[root@localhost proc]# cat partitions
major minor  #blocks  name

   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
  11        0      52244 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1
[root@localhost proc]# 

1902.06

다음은 명령어를 이용해서 로그를 확인하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. ihduser가 시스템에 로그인한 정보를 확인한다.
 # grep ihduser ( ① )
나. sendmail 데몬 시작 시간을 확인한다.
 # grep sendmail ( ② )

■ 조건

  • ① ∼ ②번은 해당 파일명을 절대 경로로 기입한다.

1902.06.solve

① /var/log/secure
② /var/log/maillog

1902.06.주의사항

  • 다음 문제는 로그인한 파일의 절대경로를 적는 것이므로 /var/log/wtmp를 정답으로 제출하기 쉽다. 그러나 이 파일을 절대경로로 입력했을 때 단순 grep으로 확인하는 것은 문자가 깨지기 때문에 /var/log/secure로 확인하는 것이 올바르다.

  • /var/log/secure와 /var/log/messages 중에 어떤 것을 적어내야할 지 고민이 된다. 왜냐하면 둘 다 로그인 정보가 기록되기 때문이다. 또한 /var/log/dmesg, /var/log/maillog 도 헷갈린다. 각각의 차이점을 명확하게 인지하고 정답을 작성해야한다.

로그파일 차이점

  1. /var/log/secure:

    • 이 로그 파일은 보안 관련 이벤트를 기록합니다. 여기에는 시스템 인증 메시지, sudo 로그인 시도, ssh 로그인 시도와 같은 인증 시도의 성공과 실패가 포함됩니다.
    • 예를 들어, 사용자가 시스템에 로그인하거나 로그인을 시도할 때의 정보, 패스워드 변경 시의 정보 등이 이 파일에 기록됩니다.
  2. /var/log/messages:

    • 이 파일은 일반 시스템 메시지를 포함하고 있으며, 시스템의 일반적인 활동과 시스템에서 발생하는 다양한 오류 메시지를 담고 있습니다.
    • 시스템 부팅 메시지, 애플리케이션 관련 메시지, 중요하지 않은 시스템 경고 메시지 등이 기록됩니다.
  3. /var/log/maillog:

    • 이 파일은 메일 서버의 로그 정보를 기록합니다. 여기에는 메일 전송과 관련된 모든 정보, 메일 서버에 발생하는 문제, 사용자의 메일 전송과 수신 로그 등이 포함됩니다.
    • 메일 서비스에 관련된 문제 해결이나, 메일 트래픽 모니터링 시 이 로그 파일을 참조합니다.
  4. /var/log/dmesg:

    • dmesg는 시스템 부팅 시 커널에 의해 생성된 메시지들을 담고 있습니다. 이 파일에는 하드웨어와 드라이버들에 관련된 정보, 커널 감지 문제 등이 기록됩니다.
    • 하드웨어 문제 해결이나 드라이버 이슈 진단 시 유용하게 사용됩니다.

1902.07

다음은 명령어를 이용해서 로그를 확인하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 부팅 시 동작하는 데몬 들의 동작 성공 여부를 확인한다.
 # cat ( ① )
나. dovecot 데몬 시작 시간을 확인한다.
 # grep dovecot ( ② )

■ 조건

  • ① ∼ ②번은 해당 파일명을 절대 경로로 기입한다.

1902.07.solve

① /var/log/boot.log
② /var/log/maillog

1902.14

다음은 로컬 시스템에 열려진 포트를 확인하고, 실행 명령어를 찾는 과정이다. 조건에맞게( 괄호 ) 안에 알맞은 내용을 적으시오.

가. 로컬 시스템의 포트번호 0번부터 65535번까지 스캔하여 열려진 포트를 확인한다.
 # ( ① ) ( ② ) localhost
나. ‘가’항의 명령 실행 시 ‘55176/tcp open unknown'이라는 결과를 확인하였다. 
포트번호 55176을 사용 중인 프로세스의 PID를 확인하는 명령을 작성한다.
 # ( ③ )
다. ‘나’항의 명령으로 확인된 PID가 1531번인 경우 해당 프로세스를 실행시킨 명령어의 절대경로를 확인하는 방법을 작성한다.
 # ( ④ )

■ 조건

  • ①번은 관련 명령어만 기입한다.
  • ②번은 명령어의 옵션, 옵션과 관련된 인자 값 등을 기입하는데, 옵션과 관련된인자값이 있는 경우에는 하나의 괄호로 처리한다. (예: -d /home/ihduser)
  • ③번은 해당 내용을 확인할 수 있는 실행 명령을 한 번에 기입한다. 참고로 파이프(|)는사용가능하지만 순차처리(;)는 허용하지 않는다.
  • ④번은 명령어, 옵션, 옵션과 관련된 인자 값 등 결과를 확인할 수 있는 방법을하나의명령으로 기입한다.

1902.14.solve

① nmap
② -p 0-65535
③ netstat -ap | grep 55176 또는 lsof |grep 55176 등
④ ls -l /proc/1531/exe

1902.15

다음은 iptables를 이용해서 방화벽을 설정하는 과정이다. 작업 사항에 맞게 ( 괄호) 안에알맞은 내용을 적으시오.

가. 현재 INPUT 사슬에 설정되어 있는 모든 정책을 삭제하여 초기화한다.
 # iptables ( ① ) INPUT
나. 외부로 들어오는 패킷을 모두 거부하고, IP 주소가 192.168.12.22번인 호스트
로부터 들어오는 패킷에 대해서만 허가하는 정책을 설정한다.
 # iptables ( ② ) INPUT ( ③ )
 # iptables ( ④ ) INPUT -s 192.168.12.22 ( ⑤ )

■ 조건

  • ① ∼ ⑤번은 명령어의 설정 값, 옵션, 옵션과 관련된 인자 값 등을 기입하는데, 옵션과관련된 인자 값이 있는 경우에는 하나의 괄호로 처리한다. (예: -d /home/ihduser)

1902.15.solve

① (-t filter) -F 또는 --flush
② (-t filter) -P
③ DROP
④ (-t filter) -A
(①, ②, ④ 번의 -t filter는 생략 가능)
⑤ -j ACCEPT

1902.15.주의사항

  • 4번의 정답을 -A가 아닌, -P로 쓰는 것이 오답 포인트입니다. 새로운 정책을 이미 -P 옵션으로 추가했으므로, -A 옵션으로 새로운 옵션을 추가하는것이 올바릅니다.

1902.16

다음 조건에 따라 아파치 웹 서버 환경 설정을 진행하려고 한다. 관련 환경 설정파일의항목과 값을 적으시오.

가. /usr/local/apache/error 디렉터리를 /error 디렉터리로 경로를 단축하는 설정을 한다.
 ( ① ) ( ② ) ( ③ )
나. 하나의 IP 주소를 가지고 있는 시스템에서 2개의 도메인 설정이 가능하도록
지정한다. IP 주소는 192.168.5.13이고, 포트 번호는 기본 웹 서버 포트인 80번을
사용한다.
 ( ④ ) ( ⑤ )

■ 조건

  • 항목과 값 기입 시에 대소문자를 구분하여 정확히 기재한다. (예: LogLevel warn)
  • 항목과 값 기입은 관련 설정 파일에서 사용하는 형식과 동일하게 기재한다.
    (예: 큰따옴표, 작은따옴표, 콜론 등 기호 사용 주의)

1902.16.solve

① Alias
② /error/
③ "/usr/local/apache/error/"
④ NameVirtualHost
⑤ 192.168.5.13:80

profile
개발자 블로그 ^0^

0개의 댓글