<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>새초롬한 일지</title>
    <link>https://shyguyjae10.tistory.com/</link>
    <description>24년에 시작한 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 15:00:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>새침데기 재열이</managingEditor>
    <image>
      <title>새초롬한 일지</title>
      <url>https://tistory1.daumcdn.net/tistory/6850803/attach/769ab247378a47939fa09b51ccc42e0a</url>
      <link>https://shyguyjae10.tistory.com</link>
    </image>
    <item>
      <title>Docker 놀이터</title>
      <link>https://shyguyjae10.tistory.com/14</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceqhNu/btsEa6nQJfd/XzU4k8urhbk2BCBwxugBwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceqhNu/btsEa6nQJfd/XzU4k8urhbk2BCBwxugBwk/img.png&quot; data-alt=&quot;https://labs.play-with-docker.com/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceqhNu/btsEa6nQJfd/XzU4k8urhbk2BCBwxugBwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceqhNu%2FbtsEa6nQJfd%2FXzU4k8urhbk2BCBwxugBwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;597&quot; height=&quot;657&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://labs.play-with-docker.com/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://labs.play-with-docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://labs.play-with-docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706671670465&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Play with Docker&quot; data-og-description=&quot;Play with Docker A simple, interactive and fun playground to learn Docker Login&quot; data-og-host=&quot;labs.play-with-docker.com&quot; data-og-source-url=&quot;https://labs.play-with-docker.com/&quot; data-og-url=&quot;https://labs.play-with-docker.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1KoU8/hyVf3FNof7/AEBuxlKzT2gwYDvYHFHVw1/img.png?width=508&amp;amp;height=500&amp;amp;face=0_0_508_500&quot;&gt;&lt;a href=&quot;https://labs.play-with-docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://labs.play-with-docker.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1KoU8/hyVf3FNof7/AEBuxlKzT2gwYDvYHFHVw1/img.png?width=508&amp;amp;height=500&amp;amp;face=0_0_508_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Play with Docker&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Play with Docker A simple, interactive and fun playground to learn Docker Login&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;labs.play-with-docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker는 Unix 기반이라 Linux와 명령어 체계가 몹시 비슷하다. 쉽게 말해 포트를 열 수 있는 놀이터 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 웹 페이지 하나 띄워보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CLI 안에서,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Ctrl + Insert = Copy&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Shift + Insert =&amp;nbsp; Paste&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;[node1]&amp;nbsp;(local)&amp;nbsp;root@192.168.0.13&amp;nbsp;~ &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;run&amp;nbsp;-itd&amp;nbsp;--name=myweb&amp;nbsp;-p&amp;nbsp;8000:80&amp;nbsp;nginx:1.25.1-alpine &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;docker&amp;nbsp;ps &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;CONTAINER&amp;nbsp;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;IMAGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;COMMAND&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CREATED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STATUS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PORTS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NAMES &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;0821defd3706&amp;nbsp;&amp;nbsp;&amp;nbsp;nginx:1.25.1-alpine&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;/docker-entrypoint.&amp;hellip;&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&amp;nbsp;seconds&amp;nbsp;ago&amp;nbsp;&amp;nbsp;&amp;nbsp;Up&amp;nbsp;13&amp;nbsp;seconds&amp;nbsp;&amp;nbsp;&amp;nbsp;0.0.0.0:8000-&amp;gt;80/tcp&amp;nbsp;&amp;nbsp;&amp;nbsp;myweb &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;[node1]&amp;nbsp;(local)&amp;nbsp;[root@192.168.0.13](mailto:root@192.168.0.13)&amp;nbsp;~ &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;$&amp;nbsp;vi&amp;nbsp;index.html &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;[node1]&amp;nbsp;(local)&amp;nbsp;[root@192.168.0.13](mailto:root@192.168.0.13)&amp;nbsp;~ &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;cp&amp;nbsp;index.html&amp;nbsp;myweb:/usr/share/nginx/html &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;Successfully&amp;nbsp;copied&amp;nbsp;2.05kB&amp;nbsp;to&amp;nbsp;myweb:/usr/share/nginx/html &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;187&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNbI4y/btsEb77ISub/oc8qREn9nuEkkAWh0wOkC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNbI4y/btsEb77ISub/oc8qREn9nuEkkAWh0wOkC1/img.png&quot; data-alt=&quot;&amp;amp;lt;h1&amp;amp;gt; I am CJW &amp;amp;lt;/h1&amp;amp;gt;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNbI4y/btsEb77ISub/oc8qREn9nuEkkAWh0wOkC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNbI4y%2FbtsEb77ISub%2Foc8qREn9nuEkkAWh0wOkC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;187&quot; height=&quot;69&quot; data-origin-width=&quot;187&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;lt;h1&amp;gt; I am CJW &amp;lt;/h1&amp;gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;stop&amp;nbsp;myweb &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;dmyweb &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;[node1]&amp;nbsp;(local)&amp;nbsp;root@192.168.0.13&amp;nbsp;~ &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;$&amp;nbsp;docker&amp;nbsp;rm&amp;nbsp;myweb &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;myweb&lt;/span&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Etc</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/14</guid>
      <comments>https://shyguyjae10.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 31 Jan 2024 12:31:23 +0900</pubDate>
    </item>
    <item>
      <title>Day 05.</title>
      <link>https://shyguyjae10.tistory.com/11</link>
      <description>&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*&amp;nbsp; &amp;nbsp; *&amp;nbsp; &amp;nbsp;*&amp;nbsp; &amp;nbsp;*&amp;nbsp; &amp;nbsp; &amp;nbsp;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;
&lt;h1&gt;작업 예약&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=스케줄링=업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 시간에 작업 수행 예약 = 업무 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;at = 정해진 시간에 &lt;b&gt;한 번만 수행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron = 주기적으로 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 크론탭이라고 불렀던 것이 바로 이 crontab 이다. 요 녀석은 관리하는 데 있어서 편의성을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 값은 애스터리스크 다섯 개.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 분 시 일 월 요일 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab [-u 사용자 ID] [옵션] [파일 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 작업을 수행할 수 있는 수행 내역을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정이 없으면 *로 놔두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 들어보면,&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;30 23 1 * * /usr/bin/ls -l ~user1 &amp;gt; ~user1/cron.out
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&lt;b&gt;매월 1일 23시30분에 해당 작업을 수행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4000 = setUID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2000 = setGID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최상위 디렉터리에서 찾아라. 단, 파일의 권한이 4000 또는 2000 권한이 있어야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 6시마다 SUID/SGID 권한을 갖는 파일들을 확인하고 관리자에게 mail을 보내는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 6 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s &quot;SUID/SGID LIST&quot; root&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;crontab 사용 예시&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab 명령어를 사용하여 예약 명령어를 사용하고 9시 24분에 정확히 이루어졌는지 확인 후 mail 또한 확인한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:01:23 server1 crond[1170]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.)
Jan 22 09:01:24 server1 crond[1170]: (CRON) INFO (running with inotify support)
Jan 22 09:10:01 server1 CROND[2849]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:01 server1 CROND[2942]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:20:28 server1 crontab[2954]: (root) BEGIN EDIT (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) REPLACE (root)
Jan 22 09:23:15 server1 crontab[2954]: (root) END EDIT (root)
Jan 22 09:23:21 server1 crontab[2973]: (root) BEGIN EDIT (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
**Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)**
^C
[root@server1 ~]# **vi /var/spool/mail/root**
You have mail in /var/spool/mail/root
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;From [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)  Mon Jan 22 09:24:12 2024
Return-Path: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
X-Original-To: root
Delivered-To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Received: by [server1.cloud.com](&amp;lt;http://server1.cloud.com/&amp;gt;) (Postfix, from userid 0)
id 7D0379BC2; Mon, 22 Jan 2024 09:24:12 +0900 (KST)
Date: Mon, 22 Jan 2024 09:24:12 +0900
To: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;)
Subject: SUID/SGID LIST
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: [20240122002412.7D0379BC2@server1.cloud.com](&amp;lt;mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;)
From: [root@server1.cloud.com](&amp;lt;mailto:root@server1.cloud.com&amp;gt;) (root)
&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:20240122002412.7d0379bc2@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&amp;lt;/mailto:root@server1.cloud.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 잘 왔음을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;crontab 사용 예시 2&lt;/h1&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# **crontab -l**
24 09 * * * find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root
[root@server1 ~]# **crontab -e**
crontab: installing new crontab
[root@server1 ~]# **tail -f /var/log/cron**
Jan 22 09:23:29 server1 crontab[2973]: (root) REPLACE (root)
Jan 22 09:23:29 server1 crontab[2973]: (root) END EDIT (root)
Jan 22 09:24:01 server1 CROND[2990]: (root) CMD (find / -type f \\( -perm -04000 -o -perm -02000 \\) -exec ls -l {} \\; | /bin/mail -s &quot;SUID/SGID LIST&quot; root)
Jan 22 09:29:52 server1 crontab[3379]: (root) BEGIN EDIT (root)
Jan 22 09:30:01 server1 CROND[3392]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 22 09:31:45 server1 crontab[3379]: (root) END EDIT (root)
Jan 22 09:31:49 server1 crontab[3500]: (root) LIST (root)
Jan 22 09:32:03 server1 crontab[3513]: (root) BEGIN EDIT (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) REPLACE (root)
Jan 22 09:34:04 server1 crontab[3513]: (root) END EDIT (root)
Jan 22 09:35:01 server1 crond[1170]: (root) RELOAD (/var/spool/cron/root)
Jan 22 09:35:01 server1 CROND[3689]: (root) CMD (/bin/bash /root/bin/srvmon.sh)
^C
You have new mail in /var/spool/mail/root
[root@server1 ~]# **ps -ef | grep srvmon**
root      3810  2733  0 09:36 pts/0    00:00:00 grep --color=auto srvmon
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 연습문제(쉽다!)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex2) 매주 토요일 오후 1시 1분마다 /etc/init.d/rsyslog restart 하는 작업을 스케줄링 하시오. (※ 요일은 0~7로 설정가능하며 일요일이 0, 7 사용) &lt;b&gt;&amp;rarr; 01 13 * * 6 /etc/init.d/syslog restart&lt;/b&gt; ex3) 1월~10월까지 2개월마다 1일 12시에 'It's system check time.' 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex4) 매월 월,수,금 12시 마다 /var/log/ 모든 파일 지워라. &lt;b&gt;&amp;rarr; 0 12 1 1-10/2 * /usr/bin/echo 'It&amp;rsquo;s system check time.&amp;rsquo;&lt;/b&gt; ex5) 매일 오후 2시 20분에 시간 동기화를 수행한 후 곧바로 OS reboot 해라!! &lt;b&gt;&amp;rarr; 0 12 * * 1,3,5 /usr/bin/rm -r /var/log/&lt;/b&gt;*&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20 14 * * * /usr/sbin/clock -w 20 14 * * * /usr/sbin/shutdown -r now&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex6) 3일에서 5일까지 5시,6시,7시에 매 5분마다 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행 &lt;b&gt;&amp;rarr; /05 5,6,7 3-5 * * /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex7) 매주 금요일 오전 7시 15분에 &lt;a href=&quot;http://time.sh/&quot;&gt;time.sh&lt;/a&gt; 를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; 15 7 * * 5 /bin/bash /root/LABs/time.sh&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;cron 사용 예시 3&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 12시 정각에 /root/bin/log_backup.sh 실행하여 &amp;ldquo;년-월-일-backup&amp;rdquo;으로 압축하여 /BACKUP에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#! /bin/bash 필수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shell 파일 만들고 바로 권한 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scp파일을 만드는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH를 통해 우리가 작성하고 있는데, 다른 서버에 왔다 갔다 하면 host 파일이 생긴다. 이것을 ssh-keygen을 통해 RSA, DSA(암호 복구 알고리즘)을 던지면, 물어보기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;keygen을 통해 RSA키가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[작업 순서]&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;li&gt;결과 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 따라해보자. &lt;b&gt;작업 순서를 정하는 것은 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH-Key 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yekaXWPWHv6O0R4AY4Sk8VL9nqHQI+KHSwIvBVxbqEU [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[RSA 2048]----+
| . oE.o.oo.      |
|  o oo =...     	|
|   +. o ..+.     |
|  o . .oo+o+o    |
|   + . oSo=++o   |
|  . o +o.+.+o+   |
|   . o.oo   + o  |
|      .o     = . |
|      .     ..+  |
+----[SHA256]-----+
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;[root@server1 .ssh]# /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ★엔터★
Enter passphrase (empty for no passphrase): ★엔터★
Enter same passphrase again: ★엔터★
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:dcayTVgLkm2/Wvf9c8gbkToCYdnSHz19SY2guclXntI [root@server1.kpc.com](&amp;lt;mailto:root@server1.kpc.com&amp;gt;)
The key's randomart image is:
+---[DSA 1024]------+
|        .o. o. o.  |
|        .=oB oo.o	|
|        =.O.B +.o	|
|       . = @.= +.	|
|        S = =.E  	|
|         . .oo.. 	|
|          .ooo.o.  |
|          .. .oo+	|
|              ..=	|
+----[SHA256]-------+
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
The authenticity of host 'server1 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:9rhqPNtu7ePM/+OBI9IQJrOILo6jOZDH32XZFmHbcys.
ECDSA key fingerprint is MD5:53:42:f3:a0:bb:35:eb:ea:75:b5:a4:c2:f6:e7:aa:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,192.168.56.101' (ECDSA) to the list of known hosts.
root@server1's password:
[root@server1 .ssh]#
[root@server1 .ssh]# ssh server1 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server1 .ssh]#
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;----- server 2----------------------------------------------------------------
[root@server2 ~]# /usr/bin/ssh-keygen -t rsa
[root@server2 ~]# /usr/bin/ssh-keygen -t dsa
[root@server2 ~]# ssh server2 cat /root/.ssh/id_rsa.pub &amp;gt;&amp;gt; authorized_keys
[root@server2 ~]# ssh server2 cat /root/.ssh/id_dsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;- 확인 --
[root@server1 .ssh]# scp authorized_keys server2:/root/.ssh/
root@server2's password:
authorized_keys 100% 1012 1.1MB/s 00:00
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 암호 입력 없이 원격 복사 가능 --
[root@server1 LABs]# scp sxid-4.20130802.tar.gz server2:/BACKUP
sxid-4.20130802.tar.gz 100% 115KB 16.4MB/s 00:00
[root@server1 LABs]# ssh root@server2
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;backup script 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;[root@server1 bin]# vi log_backup.sh
[root@server1 bin]# chmod 700 log_backup.sh 
[root@server1 ~]# log_backup.sh
&amp;hellip;
/var/log/wtmp 
/var/log/cron-20220905
&amp;hellip;
[root@server1 bin]# cd /BACKUP/ 
[root@server1 BACKUP]# ls -l
2023-May-05-backup.tar.gz

[root@server1 bin]# crontab -e

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] [root@server1 ~]# date Mon Sep 05 09:33:46 KST 2022 $1 $2 $3 $4 $5 $6 (한국표준시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;crontab 작성&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# ssh server2
Last login: Mon Sep 05 09:52:31 2022 from server1
[root@server2 ~]#
[root@server1 ~]# crontab &amp;ndash;e
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/var/log/cron 을 통해 log_backup.sh 수행 확인&lt;/li&gt;
&lt;li&gt;1분 후 2번 서버에 백업 압축 파일 생성 확인&lt;/li&gt;
&lt;li&gt;1번 서버에 백업 압축 파일 삭제 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;시스템 Booting &amp;amp; Shutdown&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 올리고 내릴 때 뭐가 먼저 올라가고 뭐가 먼저 내려갈까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 거 아닐 수 있지만, 내부의 흐름을 이해하는 취지로 다가가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 랩탑, 데스크탑 둘 다 메인보드가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인보드에 전기가 공급되면 메인보드 배터리에 전기가 들어가면서 BIOS가 켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스크 같은 것들이 정상 작동하는지 하드웨어를 검사한다. 이후 부팅 장치를 선택하고 MBR이 로드된다. 그 다음이 부트 로더가 로딩된다. 부트 로더가 로딩되기 전에를 시스템 부팅이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정에서 시스템 자체가 부팅되면서 가장 먼저 하는 것이 부트 로더.(부팅을 이끌어낸다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더는 &lt;b&gt;커널을 불러낸다.&lt;/b&gt; 우리가 쓰고 있는 부트 로더는 GRUB.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRUB가 안 되면 커널이 로딩되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트 로더에서 사용하는 레코드 값을 MBR 이라고 한다. 1번 블록에 저장되어 있으며, 이것이 깨지면 얄짤 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든, 부트 로더가 돌아가면 커널이 들어오고, 커널이 초기화된다. 시작하기 좋게 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 기억해야 할 것은, PID = 1은 systemd 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;systemd에 시스템들이 붙게 되고, 로그인 프롬프트가 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 출력되는 메시지가 있는데, 이것은 &lt;b&gt;dmesg&lt;/b&gt;로 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dmesg | more&lt;/p&gt;
&lt;h1&gt;PaaS, IaaS 를 Docker와 OS, H/W로 엮어서 설명&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOCKER&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H/W&lt;/p&gt;
&lt;h1&gt;부팅 절차 Detail Ver.&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:///C:/Users/user/Downloads/Booting%20%EC%A0%88%EC%B0%A8.htm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;커널 버전 확인&lt;/h1&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[root@server1 ~]# **uname -r**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **getconf LONG_BIT**
64
[root@server1 ~]# **sysctl -n kernel.osrelease**
3.10.0-1160.el7.x86_64
[root@server1 ~]# **cat /proc/version**
Linux version 3.10.0-1160.el7.x86_64 ([mockbuild@kbuilder.bsys.centos.org](&amp;lt;mailto:mockbuild@kbuilder.bsys.centos.org&amp;gt;)) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;proc&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proc 명령어는 프로세스를 확인할 때 사용한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;[root@server1 ~]# **cd /proc/**
[root@server1 proc]# ls
1      18    2298  2431  2591  308   48   607   685        crypto       mounts
10     1828  23    2434  2609  309   49   609   689        devices      mtrr
10086  1887  2309  2435  2666  31    535  611   7          diskstats    net
10346  1897  2313  2438  2669  310   536  613   702        dma          pagetypeinfo
10529  1899  2319  2439  2676  311   537  614   719        driver       partitions
10574  19    2323  2442  268   312   538  616   723        execdomains  sched_debug
10595  1964  2328  2446  269   313   539  62    7345       fb           schedstat
11     2     2333  2453  27    314   540  638   7726       filesystems  scsi
1148   20    2337  2455  270   315   541  639   7764       fs           self
1149   2044  2341  2483  271   316   542  64    78         interrupts   slabinfo
1153   2054  2351  2485  2725  32    543  641   789        iomem        softirqs
1154   2080  2362  25    2729  33    544  642   8          ioports      stat
1158   2092  2364  2510  **2733**  3396  545  6422  8862       irq          swaps
116    2093  2374  2515  274   34    546  644   9          kallsyms     sys
1167   2124  2379  2518  275   35    547  645   919        kcore        sysrq-trigger
1168   2128  2387  254   2756  36    548  650   9202       keys         sysvipc
1170   2133  2388  2540  278   37    550  655   9227       key-users    timer_list
12     22    2390  2542  279   38    552  656   9610       kmsg         timer_stats
13     2213  2394  2544  29    39    568  665   9830       kpagecount   tty
14     2227  2398  2552  296   4     569  666   acpi       kpageflags   uptime
1445   2232  24    2560  30    40    57   676   buddyinfo  loadavg      version
1453   2235  2403  2563  304   402   570  677   bus        locks        vmallocinfo
1599   2265  2406  2572  305   433   571  678   cgroups    mdstat       vmstat
16     2288  2410  2576  306   438   59   679   cmdline    meminfo      zoneinfo
1600   2292  2415  2580  3065  46    6    681   consoles   misc
1751   2294  2417  2588  307   47    60   684   cpuinfo    modules
[root@server1 proc]# ps -ef | grep httpd
root     ****10641 **** **2733**  0 11:28 pts/0    00:00:00 grep --color=auto httpd
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 수많은 숫자들이 다 PID 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, /proc/ 안에 저 프로세스들이 PID의 이름으로 폴더를 생성하여 &lt;b&gt;프로세스의 기능을 수행하고 있는 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cd 2733 입력 후 exec(x)를 확인해보면, PID 2733의 프로세스는 /usr/bin/bash 프로세스라는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h1&gt;init 프로세스와 런레벨&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 init 런레벨. 1= root 모드(안전모드). root 비밀번호 까먹으면 재설치 얄짤없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 흔히 사용하는 GUI는 런레벨 5 = &lt;a href=&quot;http://graphical.target&quot;&gt;graphical.target&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이것은 리소스를 어느 정도 잡아 먹기 때문에 오래 사용하지 않는다면 GUI를 터미널 모드(런레벨 3)로 바꿀 수 있다.&lt;/p&gt;
&lt;h1&gt;리눅스 시스템 종료 247365&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;247365란 24시간 일주일 365일 동안을 의미한다. = &lt;b&gt;HA(고가용성) 유지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 끈다 &amp;rarr; 최후의 수단(&lt;b&gt;무조건 계획된 정비 시&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-shutdown -h now&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-halt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-init 6 #reboot&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 5년마다 교체를 해준다. 하드웨어, 교체에 관한 부담을 줄이려고 클라우드를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무에서 우리가 쓸 일은 거의 없어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 정상적으로 종료하는 방법 (프로세스가 꺼지고, 커널이 문 닫는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;greceful shutdown&lt;/p&gt;
&lt;h1&gt;사용자 계정 및 그룹 관리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system, DB, App, cloud, &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들은 전부 인증 절차를 요구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=AuthN(인증) + AuthZ(인가, 권한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 사용자가 들어온다는 건 시스템에 접근이 허가됐다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증이 됐다는 것이다. 정확한 ID와 PW를 가지고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저가 일 하러 들어왔으면, 모든 사용자가 스쿱이 다르기 때문에, 거기에 적합한 권한 부여가 동반되어야 한다. 이전에 했던 접근 제어와 비슷하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서는 당연히 인증이 필요하다. 우리가 실제로 회원 가입을 하기 위해 구글 인증, 카카오 인증, 네이버 인증 등등을 한다. 이것이 다 &lt;b&gt;API&lt;/b&gt; 인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 그런 것들을 관리해주는 Cognito 라는 것이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 상에서 외부에서 들어오는 유저의 관리를 해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 사용자 계정과 관련된 디렉터리&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/passwd한 줄 단위로 패턴이 정해져 있는 구조&lt;img id=&quot;img_1706108331032_4&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/d86f3619-8489-4d20-b5d0-303942cc2b51/Untitled.png&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로그인 ID: 사용자 계정 이름&lt;/li&gt;
&lt;li&gt;x: 초기 유닉스 시스템에서 사용자 암호 저장 항목&lt;/li&gt;
&lt;li&gt;UID: User ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호&lt;/li&gt;
&lt;li&gt;로그인 ID가 다르더라도 UID가 같으면 Linux 시스템은 같은 사용자로 판단, 따라서 UID가 중복되지 않았는지 주의해야 한다.&lt;/li&gt;
&lt;li&gt;GID: 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장한다.&lt;/li&gt;
&lt;li&gt;설명: 사용자의 실명이나 부서 명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;chfn 명령어로 설명을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[root@server1 ~]# chfn awsuser1
Changing finger information for awsuser1.
Name []: cjw
Office []: cloudteam
Office Phone []: 01012345678
Home Phone []: 01012345677
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;Finger information changed.
[root@server1 ~]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001:**cjw,cloudteam,01012345678,01012345677**:/home/awsuser1:/bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로&lt;/li&gt;
&lt;li&gt;로그인 셸: 사용자의 로그인 셸을 보여준다.&lt;/li&gt;
&lt;li&gt;페도라에서는 보통 배시 셸(/bin/bash)가 default.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001::/home/awsuser1:/bin/bash&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계정의 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사용자 계정 정보가 저장된 기본 파일&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;사용자 암호에 관한 정보를 &lt;b&gt;별도로&lt;/b&gt; 관리하는 파일휴가, 정직, 휴직 등등의 상황에서 유저 계정을 Lock 걸 수 있다.여기서 /awsuser1로 찾아서 해당 줄을 주석 처리# 해버리면 된다. 그럼 access denied.(근데 이건 꼼수다.)denied, ACCESS DENIED!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# usermod -L awsuser1
[root@server1 ~]# grep awsuser1 /etc/shadow
awsuser1:!$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
유저 계정 잠금을 해제하는 명령어!가 없음을 확인하자.
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server1 ~]# grep awsuser /etc/shadow
awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::
awsuser2:!!:19740:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;
$6 &amp;rarr; 암호화 알고리즘 &amp;rarr; sha512 &amp;rarr; hash 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1 : $1=MD5 , $5=SHA256 , $6=SHA512 , $2=blowfish , $2a=eksblowfish&lt;/li&gt;
&lt;li&gt;$LtpUrLcm : Salt 값&lt;/li&gt;
&lt;li&gt;$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN. : $6$SwczSk0y가 해쉬된 결과 값&lt;/li&gt;
&lt;/ul&gt;
암호화 방식 변경 SHA512 &amp;rarr; MD5현재 SHA512로 구성 중. 이것을 바꿔봄.원복하는 과정은 sha512와 md5만 바꾸면 된다. 확인도 해줄 것&amp;lt;aside&amp;gt;   MD5는 현재의 보안 표준에 적합하지 않으므로, 가능하다면 더 안전한 알고리즘(예: SHA-256 또는 SHA-512)을 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# authconfig --passalgo=sha512 --update&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# tail /etc/login.defs the permission mask will be initialized to 022. UMASK 077 This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes **Use SHA512 to encrypt password.** ENCRYPT_METHOD SHA512 [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is sha512 [root@server1 ~]# [root@server1 ~]# authconfig --passalgo=md5 --update [root@server1 ~]# authconfig --test | grep hashing password hashing algorithm is md5 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;사용자가 로그인 할 때 살펴보는 기본 값&lt;/li&gt;
&lt;li&gt;암호화 알고리즘의 실체&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# usermod -U awsuser1 [root@server1 ~]# grep awsuser1 /etc/shadow awsuser1:$6$SwczSk0y$2adWe5sLLW6qGyKpzwlSQqp2LJmApN.qSIUbBQZGhKgf8qEIe0q7.4K8rirvsPGmaTClbE3DzcmQstipTyJom1:19740:0:99999:7:::&lt;/li&gt;
&lt;li&gt;유저 계정을 잠가버리는 명령어&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331032_5&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3c7de680-a61c-4592-ba52-ad050099fc08/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# grep awsuser1 /etc/passwd awsuser1:x:1001:1001:cjw,cloudteam,01012345678,01012345677:/home/awsuser1:/bin/bash [root@server1 ~]# vi /etc/passwd&lt;/li&gt;
&lt;li&gt;의심스러운 접근 또는 동작이 잦은 계정,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 인증 역할&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/group&lt;/b&gt;&amp;rarr; DevOps, DevSecOps, FinOps, MLOps그룹에 대한 파일 정보가 저장 되어있다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그룹 이름: 그룹 이름&lt;/li&gt;
&lt;li&gt;x: 그룹의 암호 저장&lt;/li&gt;
&lt;li&gt;GID: 그룹 식별 번호&lt;/li&gt;
&lt;li&gt;그룹 멤버: 그룹에 속한 멤버들의 사용자 계정 이름. 쉼표(,)로 사용자 구별(사용자의 2차 그룹)&lt;/li&gt;
&lt;/ol&gt;
/etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹이며, 사용자가 속한 2차 그룹은 /etc/group 파일에 지정된다.&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_6&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/7aef3665-21c2-4441-bd80-7b14ed37d447/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;모든 유저는 그룹의 소속이다. (회사에서 그룹 = 부서 또는 팀)&lt;/li&gt;
&lt;li&gt;dev1, dev2, ops1, ops2, sec1, fin, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt; 사용자 계정의 설정과 관련된 기본 값을 정의한다.&lt;/li&gt;
&lt;li&gt;[root@server1 ~]# cat /etc/login.defs (생략) # 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_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 ▪ 다시 xterm 설치 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 (생략) # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 (생략) UMASK 077 (생략) ENCRYPT_METHOD SHA512 [root@server1 ~]#&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/default/useradd&lt;/b&gt;사용자 계정 생성을 담당하는 곳.계정을 만들면, 반드시 암호를 주자!&lt;/li&gt;
&lt;li&gt;UID의 중복이 허용될 수 있다. -o 옵션. 좋지는 않은 방법이다.&lt;/li&gt;
&lt;li&gt;useradd [옵션] 로그인ID&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/etc/skel&lt;/b&gt;사용자 계정의 홈 디렉터리에 공통으로 들어가야 할 파일이 들어 있다.다양한 옵션에 의해 유저를 커스터마이징 하는 것도 가능하다.기본 로그인 셸을 본 셸로 지정하고GID=1000
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# useradd -s /bin/sh -d /home/user3 -u 2000 -g 1000 -G 3 user3
[root@server1 ~]# grep user3 /etc/passwd 
user3:x:2000:1000::/home/user3:/bin/sh 
[root@server1 ~]# grep user3 /etc/group
sys:x:3:user3
[root@server1 ~]# grep user3 /etc/shadow 
[root@server1 ~]# passwd user3
[root@server1 ~]# grep user3 /etc/shadow
&lt;/code&gt;&lt;/pre&gt;
리눅스를 처음 하는 입장에선 root를 사용하지만, 일반적으로는 일반 계정으로 작업할 것이다.
&lt;h1&gt;SSH 원격 접근 제어 구성 - 정보보안 감사&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SSH(원격 접근)에 root 접근을 허용하지 말 것 + root 계정 사용 금지&lt;/li&gt;
&lt;li&gt;root의 접속을 막아보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;[root@server101 ~]# vi /etc/ssh/sshd_config
38 #PermitRootLogin yes
39 PermitRootLogin no
[root@server101 ~]# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;
ssh나 http 같은 포트를 건드리면 항상 시스템(데몬)을 다시 시작해주는 것을 고려하자.막았다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 사용자의 su - root의 접근을 허용하지 말 것&lt;/li&gt;
&lt;li&gt;[root@server101 ~]# vi /etc/pam.d/su 6 #auth required pam_wheel.so use_uid &amp;gt;&amp;gt; # 제거 # 추가한 관리자 계정의 su &amp;ndash; 접근 개별 허용 설정 [root@server101 ~]# usermod -G wheel adminuser &amp;gt;&amp;gt;&amp;gt; usergroup (wheel) 포함&lt;/li&gt;
&lt;li&gt;관리자 계정을 별도로 생성하여 &amp;ldquo;root 화&amp;rdquo; 고려&lt;/li&gt;
&lt;/ol&gt;
&amp;lt;aside&amp;gt;   &lt;b&gt;위 기능은 그냥 하지 말 것! 몹시 좋지 않음&lt;/b&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[root@server101 ~]# usermod -u 0 -o adminuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;img id=&quot;img_1706108331033_7&quot; src=&quot;https://prod-files-secure.s3.us-west-2.amazonaws.com/5d984869-bc9b-453a-8ed5-3ff2fa4cf384/3a995454-7545-4aa3-8305-008ccd4fe9ab/Untitled.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;서버에 원격 접속 도구를 통해 root로 접근하는 것은 감사에 다 걸리게 된다.&lt;/li&gt;
&lt;li&gt;2차 그룹은 3으로 지정&lt;/li&gt;
&lt;li&gt;UID=2000&lt;/li&gt;
&lt;li&gt;옵션을 지정해서 유저 커스터마이징&lt;/li&gt;
&lt;li&gt;계정을 새로 만들면 이 항목에서 파일들이 복사되어, 신규 계정으로 붙여넣기 된다.&lt;/li&gt;
&lt;li&gt;skel만 다섯 항목 중 유일하게 디렉터리이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;사용자 계정 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 접속된 상황에서는 해당 유저 삭제가 불가능하다.&lt;/p&gt;
&lt;h1&gt;그룹 관리 명령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성하기&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;[root@server1 ~]# groupadd -g 30000 devteam
[root@server1 ~]# groupadd -g 20000 opsteam
[root@server1 ~]# useradd -g 30000 -u 30001 dev1
[root@server1 ~]# useradd -g 30000 -u 30002 dev2
[root@server1 ~]# useradd -g 20000 -u 20001 ops1
[root@server1 ~]# useradd -g 20000 -u 20002 ops2
[root@server1 ~]# useradd -g 30000 -G 20000 -u 30003 dev3
[root@server1 ~]# useradd -g 20000 -G 30000 -u 20003 ops3
[root@server1 ~]# grep devteam /etc/group
devteam:x:30000:ops3
[root@server1 ~]# grep opsteam /etc/group
opsteam:x:20000:dev3
[root@server1 ~]# grep 30000 /etc/passwd
dev1:x:30001:30000::/home/dev1:/bin/bash
dev2:x:30002:30000::/home/dev2:/bin/bash
dev3:x:30003:30000::/home/dev3:/bin/bash
[root@server1 ~]# grep 20000 /etc/passwd
ops1:x:20001:20000::/home/ops1:/bin/bash
ops2:x:20002:20000::/home/ops2:/bin/bash
ops3:x:20003:20000::/home/ops3:/bin/bash
[root@server1 ~]#
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;네트워크의 흐름(동영상)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XwphKCS_Kgw&quot;&gt;https://www.youtube.com/watch?v=XwphKCS_Kgw&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;John the Ripper&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;John the Ripper는 가장 인기있는 패스워드 크래킹 도구 중 하나이다. 이 도구는 원래 유닉스 운영체제에서 암호를 해독하는 데 사용되었지만, 이제는 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 사용할 수 있다. John the Ripper는 다양한 비밀번호 형식과 암호화 해시를 지원하며, 빠르고 효율적인 해시 알고리즘을 사용하여 암호를 해독한다. 이 도구는 개인 사용자와 전문가 모두에게 유용하며, 시스템 보안 강화와 취약점 평가에 사용된다.&lt;/p&gt;</description>
      <category>AWS</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/11</guid>
      <comments>https://shyguyjae10.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 24 Jan 2024 23:59:23 +0900</pubDate>
    </item>
    <item>
      <title>Day 04.</title>
      <link>https://shyguyjae10.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스를 배우는 목적 자체가 클라우드 환경 서버를 잘 다루기 위해서 리눅스를 배우는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSA의 핵심 서비스가 컨테이너 이므로, 이 컨테이너의 OS인 리눅스(CentOS, Ubuntu, debian, fedora, &amp;hellip; alpine)를 잘 다뤄야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기업은 말이 좋아 DevOps지, 멀티 유저를 원하는 게 현실이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 용어가 계속해서 발전하고 있어서 FinOps&amp;rarr; MLOps가 되고 있다. 이 단어가 트렌드가 되면서 직업 역군이 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;과정이 어렵지, 장착만 하면 게임은 몹시 쉬워질 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시행착오를 두려워하지 말 것. 리눅스를 10번 재설치하는 한이 있더라도, 그 결과는 가져갈 것.&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;리눅스를 사용할 때 필요한 명령어&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;리눅스는 컨테이너를 위해 배우고, 컨테이너는 클라우드를 위해 배운다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스는 모든 파일을 효과적으로 관리하기 위해 디렉터리를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file 원하는 파일 : 원하는 파일의 정체를 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;디렉터리(Directory).&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터에 있는 모든 것들은 전부 파일. 디렉터리 또한 파일임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일에 따라 데이터를 저장하는 데 주로 사용된다. 파일의 목적은 데이터 저장이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일은 디스크에 저장된다. 디스크는 최초 사용 시 포맷 후 사용한다. 디스크는 블록(block) 단위로 I/O 하기 때문에, 파일은 물리적으로는 블록(4KB) 안에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 블록은 주소를 가진다. 그것은 inode 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일은 데이터를 가지고 있고, &lt;b&gt;디렉터리는 저장된 파일을 저장한 파일. 주소를 저장한 파일&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/u01/app/oracle/product/12.2.0/db_1/test.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 파일은 디렉터리 구조로 저장된다. 모든 파일들은 블록 단위로 저장되니까, 주소(inode)가 필요할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구조는 7개의 주소를 거치고 8번째에 test.txt.가 있는 구조이다. (&amp;rsquo;/&amp;rsquo;를 봐야 한다. 최상위 /에도 주소는 존재한다.)&lt;/p&gt;
&lt;h1&gt;리눅스 파일의 종류와 특징&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;home&lt;/b&gt;: 사용자 홈 디렉터리. 디폴트 값이고 변경 가능.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;root&lt;/b&gt;: root 계정의 홈 디렉터리. (&amp;rsquo;/&amp;rsquo;디렉터리와 다른 것임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;sys&lt;/b&gt;: Linux 커널 관련 파일이 있는 디렉터리.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;usr&lt;/b&gt;: 기본 실행 파일, 라이브러리, 헤더 등 많은 파일이 있다. (not user, Unix System Resource)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;boot&lt;/b&gt;: 부팅에 필요한 커널(뇌) 파일을 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;etc&lt;/b&gt;: Linux 설정에 필요한 각종 파일들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;proc&lt;/b&gt;: process. 프로세스 정보, 커널 관련 정보를 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;tmp&lt;/b&gt;: 시스템 사용 중 발생하는 임시 데이터 저장 디렉터리. 버퍼와 캐시랑 비슷하다고 보면 됨. 재부팅 시 모두 삭제.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;var&lt;/b&gt;: 시스템 운영 중 발생하는 데이터, 로그 등이 저장되는 디렉터리.&lt;/p&gt;
&lt;h1&gt;경로명&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상대 경로: 현재 내 위치 아래로 갈 때만 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;절대 경로: 항상 루트(/)부터 시작한다. 특정 위치를 가리키는 절대 경로명은 항상 동일하다.&lt;/p&gt;
&lt;h1&gt;도움말&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 &amp;mdash;help&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;man 명령어 사용&lt;/p&gt;
&lt;h1&gt;ls (lists)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉터리 내용 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패턴: ls [옵션] [파일 또는 디렉터리명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-a 숨김 파일 포함 모두 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-d 지정한 디렉터리 자체 정보 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-i 첫 번째 행에 inode(주소) 정보 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-l 파일의 상세 정보 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-A .(마침표)와 ..(두 개) 제외 모든 파일 목록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-F 파일 종류 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-L symbolic link의 경우 원본 파일 정보까지 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-R 하위 디렉터리 목록까지 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-h (human). K, M, G 단위를 사용하여 파일 크기를 사람이 보기 좋게 표시&lt;/p&gt;
&lt;h1&gt;디렉터리 만들기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir [옵션] 디렉터리명&lt;/p&gt;
&lt;h1&gt;디렉터리 삭제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rmdir [옵션] 디렉터리명&lt;/p&gt;
&lt;h1&gt;파일 내용 연속 출력&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat [옵션] 파일명&lt;/p&gt;
&lt;h1&gt;Curl&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL로 데이터를 전송해 서버에 데이터를 보내거나 가져올 때 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCbs9q/btsDGlzhJDm/P5jxMxSGZBFs04DKrTteK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCbs9q/btsDGlzhJDm/P5jxMxSGZBFs04DKrTteK1/img.png&quot; data-alt=&quot;내부(local)은 돌라가는 것 확인. 외부는 어떨까?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCbs9q/btsDGlzhJDm/P5jxMxSGZBFs04DKrTteK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCbs9q%2FbtsDGlzhJDm%2FP5jxMxSGZBFs04DKrTteK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;368&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내부(local)은 돌라가는 것 확인. 외부는 어떨까?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 IP가 나에게 접속했는지에 대한 로그와 이것을 정렬하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소셜커머스의 마케팅 방식을 떠올려보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 IP가 얼마나 접속하는지에 따라서 최다 접속 IP에게 쿠폰을 뿌리는 등의 마케팅 전략을 짜야 할 것이다. IT 없는 마케팅 솔루션은 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면, 가장 많이 접속한 IP를 찾기 위해선 어떻게 해야 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 특정 시간대를 잡아서 하는 방법은 없을까?&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;명령어로 로그를 봄으로써 나에게 접속한 모든 IP의 시간을 확인한다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;여기서 우리는 &lt;b&gt;awk&lt;/b&gt; 명령어를 사용할 것이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;필터링을 통해 이것을 확인한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.[root@server1 ~]# &lt;b&gt;vi /var/log/httpd/access_log&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;awk 명령어는 &lt;b&gt;공백(space) 기준 $1, $2, $3, $4 &amp;hellip;으로 나뉜다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;127.0.0.1 - - [17/Jan/2024:16:05:04 +0900] &quot;GET / HTTP/1.1&quot; 304 - &quot;-&quot; &quot;Mozilla/5.0 (X11; &amp;hellip;생략)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;127.0.0.1 = $1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 &amp;lsquo;-&amp;rsquo; = $2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 &amp;lsquo;-&amp;rsquo; = $3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[17/Jan/2024:16:05:04 +0900] = $4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$4의 데이터를 이용해야 시간을 필터링할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;access_log를 통해 본 시간 로그의 처음부터 끝까지 갈무리해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;127.0.0.1 - - [17/Jan/2024:16:04:58 +0900] &quot;GET / HTTP/1.1&quot; 200 400&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;192.168.56.1 - - [19/Jan/2024:10:57:27 +0900] &quot;GET / HTTP/1.1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2sY9S/btsDJlSzZ9I/3K5S0TbMCKsqNPTLYku3p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2sY9S/btsDJlSzZ9I/3K5S0TbMCKsqNPTLYku3p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2sY9S/btsDJlSzZ9I/3K5S0TbMCKsqNPTLYku3p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2sY9S%2FbtsDJlSzZ9I%2F3K5S0TbMCKsqNPTLYku3p0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;633&quot; height=&quot;62&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 명령어를 통해 특정 시간대 기록 상 모든 IP의 접속 횟수를 볼 수 있다. (해당 명령어 콤보는 추가 공부 필요)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJb4fb/btsDHqHaa7M/Vo3JZSEfBPekA8TlOFgL8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJb4fb/btsDHqHaa7M/Vo3JZSEfBPekA8TlOFgL8K/img.png&quot; data-alt=&quot;192.168.0.56이 537회 접속했다. 단골 IP가 얘구나&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJb4fb/btsDHqHaa7M/Vo3JZSEfBPekA8TlOFgL8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJb4fb%2FbtsDHqHaa7M%2FVo3JZSEfBPekA8TlOFgL8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;255&quot; height=&quot;238&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1195&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;192.168.0.56이 537회 접속했다. 단골 IP가 얘구나&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이 방법은 고전적인 마케팅 IT 방법이다.&lt;/p&gt;
&lt;h1&gt;파일 뒷부분 출력&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tail [옵션] 파일명 &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default는 10줄이다. = tail -10 파일명&lt;/p&gt;
&lt;h1&gt;파일 앞부분 출력&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;head [옵션] 파일명 &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tail과 같다.&lt;/p&gt;
&lt;h1&gt;파일 또는 디렉터리 복사&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cp [옵션] 파일명1/디렉터리명1 파일명2/디렉터리명2&lt;/p&gt;
&lt;h1&gt;파일 이동 또는 이름 변경&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mv [옵션] 파일명1/디렉터리명1 파일명2/디렉터리명2&lt;/p&gt;
&lt;h1&gt;파일 삭제(취급 유의)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rm [옵션] 파일명/디렉터리명 &amp;hellip;&lt;/p&gt;
&lt;h1&gt;파일 링크&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 링크는 기존 파일에 새 파일명 붙이는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드(hard)링크: 기존 파일에 새로운 파일명 추가 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심벌릭(symbolic) 링크: 원본 파일을 가리키는 새로운 파일 생성(말 그대로 &lt;b&gt;바로가기 파일)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LwMKD/btsDItwS9mh/69hVRBTDz56K7Z2vaaNFDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LwMKD/btsDItwS9mh/69hVRBTDz56K7Z2vaaNFDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LwMKD/btsDItwS9mh/69hVRBTDz56K7Z2vaaNFDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLwMKD%2FbtsDItwS9mh%2F69hVRBTDz56K7Z2vaaNFDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;546&quot; height=&quot;746&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sfile을 다시 만들면 sfile_l이라는 심벌릭 링크가 재활성화될까? inode(주소)가 다른데?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yFgYZ/btsDKbBU28H/WV3jDW5zWDOpt4fVzYpoMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yFgYZ/btsDKbBU28H/WV3jDW5zWDOpt4fVzYpoMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yFgYZ/btsDKbBU28H/WV3jDW5zWDOpt4fVzYpoMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyFgYZ%2FbtsDKbBU28H%2FWV3jDW5zWDOpt4fVzYpoMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;461&quot; height=&quot;177&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재활성화 됐다. 주소가 아니라 이름으로 따라가는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;링크 파일을 수정하면 원본도 수정된다.&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;파일 내용 검색&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grep [옵션] 패턴 [파일명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grep은 패턴조회. 앞이던 중간에 쓰던 대상의 특정 패턴을 조회할 때 사용한다.&lt;/p&gt;
&lt;h1&gt;파일 찾기(즐겨 씀)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find 경로 검색 조건 [동작]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#응용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7aLB7/btsDGvoDZq4/0CLNUOPCpWXNUNKrVl3zz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7aLB7/btsDGvoDZq4/0CLNUOPCpWXNUNKrVl3zz1/img.png&quot; data-alt=&quot;뭐가 많이 나올텐데, / or ?를 사용하여 SUI까지만 입력해 찾아보자.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7aLB7/btsDGvoDZq4/0CLNUOPCpWXNUNKrVl3zz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7aLB7%2FbtsDGvoDZq4%2F0CLNUOPCpWXNUNKrVl3zz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;710&quot; height=&quot;197&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;뭐가 많이 나올텐데, / or ?를 사용하여 SUI까지만 입력해 찾아보자.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c24J6l/btsDJfLBvbT/xAakdeiaZjxbD614dG6CX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c24J6l/btsDJfLBvbT/xAakdeiaZjxbD614dG6CX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c24J6l/btsDJfLBvbT/xAakdeiaZjxbD614dG6CX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc24J6l%2FbtsDJfLBvbT%2FxAakdeiaZjxbD614dG6CX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;528&quot; height=&quot;382&quot; data-origin-width=&quot;528&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;어느 경로에 있어도 특정 경로의 파일 실행(파일 절대경로 지정)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;bin/ or 디렉터리 등록&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;절대경로를 bin/이 아닌 원하는 경로로 지정(LABs/)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0mtHK/btsDKOfoOAA/VaOX6HWEqevTD9eDKC3qdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0mtHK/btsDKOfoOAA/VaOX6HWEqevTD9eDKC3qdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0mtHK/btsDKOfoOAA/VaOX6HWEqevTD9eDKC3qdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0mtHK%2FbtsDKOfoOAA%2FVaOX6HWEqevTD9eDKC3qdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;510&quot; height=&quot;518&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;절대경로 지정 #2&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;$PATH에 등록된 경로의 실행파일은 어느 위치에서 든 실행이 가능하게 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCpulE/btsDHtjxGN8/fkk6CkRAX1e4yKr6aLY6Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCpulE/btsDHtjxGN8/fkk6CkRAX1e4yKr6aLY6Z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCpulE/btsDHtjxGN8/fkk6CkRAX1e4yKr6aLY6Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCpulE%2FbtsDHtjxGN8%2Ffkk6CkRAX1e4yKr6aLY6Z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;839&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;839&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0fHic/btsDJ0AomW2/bg2SKr3sf5WPoKAOtYJG20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0fHic/btsDJ0AomW2/bg2SKr3sf5WPoKAOtYJG20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0fHic/btsDJ0AomW2/bg2SKr3sf5WPoKAOtYJG20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0fHic%2FbtsDJ0AomW2%2Fbg2SKr3sf5WPoKAOtYJG20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;715&quot; height=&quot;252&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;파일의 접근 권한(permission)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 접근 제어를 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근 권한에는 &lt;b&gt;rwx&lt;/b&gt;(읽기4 쓰기2 실행1) 권한이 있다. 도합 7.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UGO&lt;/b&gt;를 생각할 수 있다.(User, Group, Others)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉터리와 파일을 구분해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일은 말 그대로 이고, 디렉터리는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기: ls명령으로 디렉터리 목록 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓰기: 파일 생성 및 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행: cd 명령 사용 가능, 파일 이동 및 복사 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 default 접근 권한은 644이다.(rw- r &amp;mdash; r &amp;mdash;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근 권한을 변경하고 싶다면 &lt;b&gt;chmod&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UGO 전부 모든 권한을 부여하려면 777이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) chmod 777 user = user에게 UGO rwx 권한 전부 부여&lt;/p&gt;
&lt;h1&gt;진수(2, 8, 10, 16)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알던 대로 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연습)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CA(16)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10101100(2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;137(10)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;273(8) &amp;rarr; 010111011(2) &amp;rarr; 187(10)&lt;/p&gt;
&lt;h1&gt;권한의 사용&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에서 사용자가 명령 실행 시 명령어를 찾는 경로와 절차&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHXEqU/btsDGq1Gk1Y/7iJUH45B15jtaCm8xWYwDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHXEqU/btsDGq1Gk1Y/7iJUH45B15jtaCm8xWYwDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHXEqU/btsDGq1Gk1Y/7iJUH45B15jtaCm8xWYwDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHXEqU%2FbtsDGq1Gk1Y%2F7iJUH45B15jtaCm8xWYwDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;657&quot; height=&quot;353&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;$PATH에서 명령어 찾음&lt;/li&gt;
&lt;li&gt;명령어 파일에 SETUID 설정 확인&lt;/li&gt;
&lt;li&gt;명령어를 소유자 권한으로 명령 실행
&lt;h1&gt;접근 제어(사용자 단위 접근 제어)&lt;/h1&gt;
ACL을 통해 접근 가능한 사용자를 구별할 수 있다. = &lt;b&gt;구체적인 권한 제어&lt;/b&gt;ACL을 사용하게 되면 UGO를 건드리지 않고 특정 사용자에게만 권한을 부여한다.&lt;br /&gt;chmod는 UGO라는 한정 영역 안에서 권한을 부여하지만 ACL을 사용하게 되면 UGO를 건드리지 않고 특정 사용자에게만 권한을 부여한다. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHR3WB/btsDHo3EcAr/xQ6LfrbaeSf7few883mTUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHR3WB/btsDHo3EcAr/xQ6LfrbaeSf7few883mTUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHR3WB/btsDHo3EcAr/xQ6LfrbaeSf7few883mTUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHR3WB%2FbtsDHo3EcAr%2FxQ6LfrbaeSf7few883mTUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;668&quot; height=&quot;328&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) setfacl -m u:jeff:rx /BACKUP 사용자 **jeff**에게 &lt;b&gt;/BACKUP&lt;/b&gt; 디렉토리에 대한 읽기와 실행 권한을 부여한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#실습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ACLdir이라는 디렉터리를 만들어 빈 파일 aclfile을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권한을 확인해준 후&lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;mkdir&amp;nbsp;/ACLdir &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;touch&amp;nbsp;/ACLdir/aclfile &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;ls&amp;nbsp;-ld&amp;nbsp;/ACLdir/aclfile &lt;br /&gt;-rw-r--r--.&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;0&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:21&amp;nbsp;/ACLdir/aclfile &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;cd&amp;nbsp;/ACLdir/ &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;chmod&amp;nbsp;700&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;ls&amp;nbsp;-l &lt;br /&gt;total&amp;nbsp;0 &lt;br /&gt;-rwx------.&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;0&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:21&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;su&amp;nbsp;-&amp;nbsp;jae10 &lt;br /&gt;Last&amp;nbsp;login:&amp;nbsp;Wed&amp;nbsp;Jan&amp;nbsp;17&amp;nbsp;15:08:59&amp;nbsp;KST&amp;nbsp;2024&amp;nbsp;on&amp;nbsp;:0 &lt;br /&gt;[jae10@server1&amp;nbsp;~]$&amp;nbsp;cd&amp;nbsp;/ACLdir/ &lt;br /&gt;[jae10@server1&amp;nbsp;ACLdir]$&amp;nbsp;ls &lt;br /&gt;aclfile &lt;br /&gt;[jae10@server1&amp;nbsp;ACLdir]$&amp;nbsp;cat&amp;nbsp;aclfile &lt;br /&gt;cat:&amp;nbsp;aclfile:&amp;nbsp;Permission&amp;nbsp;denied &lt;br /&gt;[jae10@server1&amp;nbsp;ACLdir]$&amp;nbsp;exit &lt;br /&gt;logout &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;su&amp;nbsp;-&amp;nbsp;awsuser1 &lt;br /&gt;Last&amp;nbsp;login:&amp;nbsp;Thu&amp;nbsp;Jan&amp;nbsp;18&amp;nbsp;17:51:05&amp;nbsp;KST&amp;nbsp;2024&amp;nbsp;from&amp;nbsp;192.168.56.1&amp;nbsp;on&amp;nbsp;pts/2 &lt;br /&gt;[awsuser1@server1&amp;nbsp;~]$&amp;nbsp;cd&amp;nbsp;/ACLdir/ &lt;br /&gt;[awsuser1@server1&amp;nbsp;ACLdir]$&amp;nbsp;ls &lt;br /&gt;aclfile &lt;br /&gt;[awsuser1@server1&amp;nbsp;ACLdir]$&amp;nbsp;cat&amp;nbsp;aclfile &lt;br /&gt;cat:&amp;nbsp;aclfile:&amp;nbsp;Permission&amp;nbsp;denied &lt;br /&gt;[awsuser1@server1&amp;nbsp;ACLdir]$&amp;nbsp;setfacl&amp;nbsp;-m&amp;nbsp;u:awsuser1:rw&amp;nbsp;aclfile &lt;br /&gt;setfacl:&amp;nbsp;aclfile:&amp;nbsp;Operation&amp;nbsp;not&amp;nbsp;permitted &lt;br /&gt;[awsuser1@server1&amp;nbsp;ACLdir]$&amp;nbsp;exit &lt;br /&gt;logout &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;setfacl&amp;nbsp;-m&amp;nbsp;u:awsuser1:rw&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;ls&amp;nbsp;-l &lt;br /&gt;total&amp;nbsp;0 &lt;br /&gt;-rwxrw----+&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;0&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:21&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;getfacl&amp;nbsp;aclfile&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;file:&amp;nbsp;aclfile &lt;br /&gt;&lt;br /&gt;owner:&amp;nbsp;root &lt;br /&gt;&lt;br /&gt;group:&amp;nbsp;root &lt;br /&gt;&lt;br /&gt;user::rwx &lt;br /&gt;user:awsuser1:rw- &lt;br /&gt;group::--- &lt;br /&gt;mask::rw- &lt;br /&gt;other::--- &lt;br /&gt;&lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;su&amp;nbsp;-&amp;nbsp;jae10 &lt;br /&gt;Last&amp;nbsp;login:&amp;nbsp;Fri&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:22:20&amp;nbsp;KST&amp;nbsp;2024&amp;nbsp;on&amp;nbsp;pts/1 &lt;br /&gt;[jae10@server1&amp;nbsp;~]$&amp;nbsp;cd&amp;nbsp;/ACLdir/ &lt;br /&gt;[jae10@server1&amp;nbsp;ACLdir]$&amp;nbsp;ls &lt;br /&gt;aclfile &lt;br /&gt;[jae10@server1&amp;nbsp;ACLdir]$&amp;nbsp;cat&amp;nbsp;aclfile &lt;br /&gt;cat:&amp;nbsp;aclfile:&amp;nbsp;Permission&amp;nbsp;denied &lt;br /&gt;[jae10@server1&amp;nbsp;ACLdir]$&amp;nbsp;exit &lt;br /&gt;logout &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;su&amp;nbsp;-&amp;nbsp;awsuser1 &lt;br /&gt;Last&amp;nbsp;login:&amp;nbsp;Fri&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:23:39&amp;nbsp;KST&amp;nbsp;2024&amp;nbsp;on&amp;nbsp;pts/1 &lt;br /&gt;[awsuser1@server1&amp;nbsp;~]$&amp;nbsp;cd&amp;nbsp;/ACLdir/ &lt;br /&gt;[awsuser1@server1&amp;nbsp;ACLdir]$&amp;nbsp;cat&amp;nbsp;aclfile &lt;br /&gt;[awsuser1@server1&amp;nbsp;ACLdir]$&amp;nbsp;exit &lt;br /&gt;logout &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;setfacl&amp;nbsp;-m&amp;nbsp;u:awsuser1:rw&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;ls&amp;nbsp;-l &lt;br /&gt;total&amp;nbsp;0 &lt;br /&gt;-rwxrw----+&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;0&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:21&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;getfacl&amp;nbsp;aclfile &lt;br /&gt;&lt;br /&gt;file:&amp;nbsp;aclfile &lt;br /&gt;&lt;br /&gt;owner:&amp;nbsp;root &lt;br /&gt;&lt;br /&gt;group:&amp;nbsp;root &lt;br /&gt;&lt;br /&gt;user::rwx &lt;br /&gt;user:awsuser1:rw- &lt;br /&gt;group::--- &lt;br /&gt;mask::rw- &lt;br /&gt;other::--- &lt;br /&gt;#ACL&amp;nbsp;삭제 &lt;br /&gt;&lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;setfacl&amp;nbsp;-x&amp;nbsp;u:awsuser1&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&amp;nbsp;ls&amp;nbsp;-l &lt;br /&gt;total&amp;nbsp;0 &lt;br /&gt;-rwx------+&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;0&amp;nbsp;Jan&amp;nbsp;19&amp;nbsp;15:21&amp;nbsp;aclfile &lt;br /&gt;[root@server1&amp;nbsp;ACLdir]#&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;프로세스(Process)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스는 항상 부모-자식 간의 관계를 갖는다. 각 프로세스는 고유 번호를 가지고 있다 = &lt;span style=&quot;color: #d44c47;&quot; data-token-index=&quot;1&quot;&gt;PID&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;프로세스의 종류&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-데몬 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 서비스 제공을 위해 존재(httpd)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-고아(orphan) 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자식 프로세스는 살아있지만 부모가 먼저 죽은 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 프로세스가 대신 부모가 되어 고아 프로세스의 종료를 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-좀비 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자식 프로세스가 실행을 종료했는데도 남아있는 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 많으면 Process Table을 낭비하게 되어 일반 프로세스가 실행되지 않을 수 있다.&lt;/p&gt;
&lt;h1&gt;프로세스의 상세 정보 출력&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z72Qx/btsDJFcq5CI/S1EkSox5Q0wXKVmMP2Iikk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z72Qx/btsDJFcq5CI/S1EkSox5Q0wXKVmMP2Iikk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z72Qx/btsDJFcq5CI/S1EkSox5Q0wXKVmMP2Iikk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ72Qx%2FbtsDJFcq5CI%2FS1EkSox5Q0wXKVmMP2Iikk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;694&quot; height=&quot;420&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cs3Y2/btsDLrdrqQB/jDkMdutgg8bYc8xZTsgbeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cs3Y2/btsDLrdrqQB/jDkMdutgg8bYc8xZTsgbeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cs3Y2/btsDLrdrqQB/jDkMdutgg8bYc8xZTsgbeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCs3Y2%2FbtsDLrdrqQB%2FjDkMdutgg8bYc8xZTsgbeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;705&quot; height=&quot;415&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZdvpZ/btsDHsd9Dpd/ra9yQ6MKVWiVWhZfTJ3Hnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZdvpZ/btsDHsd9Dpd/ra9yQ6MKVWiVWhZfTJ3Hnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZdvpZ/btsDHsd9Dpd/ra9yQ6MKVWiVWhZfTJ3Hnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZdvpZ%2FbtsDHsd9Dpd%2Fra9yQ6MKVWiVWhZfTJ3Hnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;390&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;grep&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그 파일이나, 텍스트 파일에서 특정 문자열을 찾을 때 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이프( | )로 연결하여 특정 정보를 검색할 때 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자주 보게 될 명령어이다. 꼭 익숙해지도록 하자.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**ps&amp;nbsp;-ef&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;serviced** &lt;br /&gt;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;29981&amp;nbsp;&amp;nbsp;3020&amp;nbsp;&amp;nbsp;0&amp;nbsp;18:28&amp;nbsp;pts/1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00:00:00&amp;nbsp;grep&amp;nbsp;--color=auto&amp;nbsp;serviced &lt;br /&gt;[root@server1&amp;nbsp;~]# &lt;br /&gt;&lt;br /&gt;pstree&amp;nbsp;-p&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;httpd&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TP1pL/btsDKcHP0j7/xN7viM4XtEmmL7EtX3Bi70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TP1pL/btsDKcHP0j7/xN7viM4XtEmmL7EtX3Bi70/img.png&quot; data-alt=&quot;PID 3869가 부모 프로세스 이다. 그 밑으로 7개가 눈에 보인다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TP1pL/btsDKcHP0j7/xN7viM4XtEmmL7EtX3Bi70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTP1pL%2FbtsDKcHP0j7%2FxN7viM4XtEmmL7EtX3Bi70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;429&quot; height=&quot;180&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PID 3869가 부모 프로세스 이다. 그 밑으로 7개가 눈에 보인다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;Kill&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kill 이라고 해서 무조건 죽이는 건 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시그널을 보내는 것이다&lt;/b&gt;. 그것들 중 프로세스를 죽여버리는 시그널이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kill [signal] PID &amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[signal]:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-2: 인터럽트 시그널(Ctrl+C)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-9: 프로세스 강제 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-15: 관련 파일 정리 후 강제 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#man을 실행시킨 프로세스를 찾아서 종료시키기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**ps&amp;nbsp;-f&amp;nbsp;$(pgrep&amp;nbsp;-x&amp;nbsp;man)** &lt;br /&gt;UID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PID&amp;nbsp;&amp;nbsp;PPID&amp;nbsp;&amp;nbsp;C&amp;nbsp;STIME&amp;nbsp;TTY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TIME&amp;nbsp;CMD &lt;br /&gt;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3020&amp;nbsp;&amp;nbsp;3012&amp;nbsp;&amp;nbsp;0&amp;nbsp;09:13&amp;nbsp;pts/1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00:00:02&amp;nbsp;-bash &lt;br /&gt;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;31043&amp;nbsp;&amp;nbsp;3020&amp;nbsp;&amp;nbsp;0&amp;nbsp;18:46&amp;nbsp;pts/1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;00:00:00&amp;nbsp;ps&amp;nbsp;-f &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;kill&amp;nbsp;-9&amp;nbsp;3020 &lt;br /&gt;&lt;br /&gt;───────────────────────────────────────────────────────────────────────────&lt;br /&gt;&lt;br /&gt;Session&amp;nbsp;stopped &lt;br /&gt;-&amp;nbsp;Press&amp;nbsp;&amp;lt;Return&amp;gt;&amp;nbsp;to&amp;nbsp;exit&amp;nbsp;tab &lt;br /&gt;-&amp;nbsp;Press&amp;nbsp;R&amp;nbsp;to&amp;nbsp;restart&amp;nbsp;session &lt;br /&gt;-&amp;nbsp;Press&amp;nbsp;S&amp;nbsp;to&amp;nbsp;save&amp;nbsp;terminal&amp;nbsp;output&amp;nbsp;to&amp;nbsp;file&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PID 3020짜리 프로세스를 종료시켰더니, 세션이 끊겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 kill 명령으로 종료되지 않는다면 9번을 보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;killall service&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;service를 한 번에 없앤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실을 방지하기 위해선 &lt;b&gt;systemctl start service&lt;/b&gt;를 해 주는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(kill은 비정상 종료이기 때문에)&lt;/p&gt;
&lt;h1&gt;프로세스 모니터링&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에는 징후 감지 였는데, 이젠 예방으로 목적이 바뀌었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수집데이터 &amp;rarr; 징후 감지 &amp;rarr; 시각화 &amp;rarr; 문제 확보 &amp;rarr; 해결책 제시 &amp;rarr; 예방&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;|&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;|&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;mdash;&amp;gt; &lt;b&gt;저장 &amp;rarr; 분석 &amp;rarr; 예측 가능성 확보 &amp;rarr; observability(관찰 가능성)&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;프로세스 관리 도구&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;top&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 실행 중인 모든 프로세스에 대한 정보를 주기적으로 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;iotop&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;top I/O(입출력) 버전.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Total DISK READ&lt;/b&gt; (총 디스크 읽기): 모든 디스크에서 읽은 바이트 수를 표시한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Total DISK WRITE&lt;/b&gt; (총 디스크 쓰기): 모든 디스크에 기록된 바이트 수를 표시한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Actual DISK READ&lt;/b&gt; (실제 디스크 읽기): 현재 측정된 디스크 읽기 속도를 표시한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Actual DISK WRITE&lt;/b&gt; (실제 디스크 쓰기): 현재 측정된 디스크 쓰기 속도를 표시한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SWAPIN&lt;/b&gt; (스왑 인): 스왑 공간으로의 데이터 전송 양을 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Total DISK IO&lt;/b&gt; (총 디스크 I/O): 디스크에서 수행된 총 I/O 작업 수를 표시한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DISK COMMANDS&lt;/b&gt; (디스크 명령어): 현재 I/O를 수행 중인 프로세스 및 해당 I/O 작업을 표시한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;시스템 리소스 모니터링을 위한 shell scripts&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm1rnW/btsDJBgMy9k/WwJD9iXgyPbVaHH2rcQ4k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm1rnW/btsDJBgMy9k/WwJD9iXgyPbVaHH2rcQ4k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm1rnW/btsDJBgMy9k/WwJD9iXgyPbVaHH2rcQ4k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm1rnW%2FbtsDJBgMy9k%2FWwJD9iXgyPbVaHH2rcQ4k0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;627&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPqhxi/btsDKQR3UOG/fkwLbmpPGVwHZLiiENRiW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPqhxi/btsDKQR3UOG/fkwLbmpPGVwHZLiiENRiW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPqhxi/btsDKQR3UOG/fkwLbmpPGVwHZLiiENRiW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPqhxi%2FbtsDKQR3UOG%2FfkwLbmpPGVwHZLiiENRiW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;711&quot; height=&quot;433&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;시스템 리소스 모니터링을 위한 shell scripts #2&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@server1 ~]# vi srvmon.sh&lt;br /&gt;[root@server1 ~]# chmod 744 srvmon.sh&lt;br /&gt;[root@server1 ~]# ./srvmon.sh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;or&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;./srvmon.sh &amp;gt; output.txt&lt;br /&gt;Memory&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Disk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CPU &lt;br /&gt;95.61%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;74%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.04% &lt;br /&gt;95.66%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;74%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.03% &lt;br /&gt;95.66%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;74%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.03% &lt;br /&gt;&amp;hellip; &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;terminal&amp;nbsp;1&amp;nbsp;열기 &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**./srvmon.sh&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;srvlog.txt** &lt;br /&gt;--&amp;nbsp;terminal&amp;nbsp;하나&amp;nbsp;더&amp;nbsp;열기 &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**htop** &lt;br /&gt;--&amp;nbsp;terminal&amp;nbsp;하나&amp;nbsp;하나&amp;nbsp;더&amp;nbsp;열기 &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;epel-release** &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;stress** &lt;br /&gt;또는, &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**rpm&amp;nbsp;-Uvh&amp;nbsp;stress-1.0.2-1.el5.rf.i386.rpm** &lt;br /&gt;[root@server1&amp;nbsp;~]#&amp;nbsp;**stress&amp;nbsp;--cpu&amp;nbsp;4&amp;nbsp;--vm&amp;nbsp;3&amp;nbsp;--vm-bytes&amp;nbsp;512m&amp;nbsp;--hdd&amp;nbsp;2&amp;nbsp;--hdd-bytes&amp;nbsp;1024m&amp;nbsp;--timeout&amp;nbsp;3600s**&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PMFsF/btsDJEYToZH/SSVlXCcu6t8jebyZjupye1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PMFsF/btsDJEYToZH/SSVlXCcu6t8jebyZjupye1/img.png&quot; data-alt=&quot;이렇게 할 수 있다고 한다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PMFsF/btsDJEYToZH/SSVlXCcu6t8jebyZjupye1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPMFsF%2FbtsDJEYToZH%2FSSVlXCcu6t8jebyZjupye1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;217&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 할 수 있다고 한다...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/10</guid>
      <comments>https://shyguyjae10.tistory.com/10#entry10comment</comments>
      <pubDate>Sat, 20 Jan 2024 22:54:13 +0900</pubDate>
    </item>
    <item>
      <title>Day 03.</title>
      <link>https://shyguyjae10.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 리눅스 서버 내에서 효율적인 운영 및 사용을 위해 할 수 있는 기본적인 항목을 다루었다.&lt;/p&gt;
&lt;pre id=&quot;code_1733882282249&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 /]#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나씩 분해해보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;root: 현재 접속자 (\u)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;@server2 : 접속 서버명 (\h)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;~ : 현재 경로(홈) (\W)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;]# : 사용자 타입(#, $)&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Open Source&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누구든지 자유롭게 사용 가능!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;메모리, 버퍼, 캐시의 차이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리: 주기억장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버퍼: 느린 장치의 속도를 보호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐시: 빠른 장치의 속도를 보조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버퍼와 캐시는 둘 다 프로그램을 다른 곳으로 보내기 위해 일시적으로 데이터를 보관하는 데 있어서 그 역할이 같다. 또한 느린 장치와 빠른 장치 간 속도 차이를 지원하는 데에도 같다고 볼 수 있다.&lt;/li&gt;
&lt;li&gt;캐시는 작업 속도의 증진만을 위해 사용된다.&lt;/li&gt;
&lt;li&gt;버퍼는 속도 차이의 보조 뿐 아니라 개별 작업 간의 콜라보레이션을 도모하기 위해 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;커널&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람으로 따지면 &lt;b&gt;뇌&lt;/b&gt;와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스 관리, 파일 시스템 관리, 메모리 관리 ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커널은 실질적으로 하드웨어를 이용하여 사용자의 요구를 처리한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로세스와 쓰레드&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;독립적인 메모리 공간을 가진다.&amp;nbsp;서로 다른 프로세스는 메모리(자원)를 공유하지 않는다.&lt;/li&gt;
&lt;li&gt;자원을 공유하지 않는다는 점에서 독립적으로 실행된다는 것은 &lt;b&gt;안정성이 높다&lt;/b&gt;는 것과 같다.&lt;/li&gt;
&lt;li&gt;웹 브라우저, 미디어 플레이어 등 독립적으로 실행되는 애플리케이션&amp;nbsp;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPBZIk/btsLcZWYSGJ/SXtkt3LvrnYju5lTgoVBPk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPBZIk/btsLcZWYSGJ/SXtkt3LvrnYju5lTgoVBPk/img.webp&quot; data-alt=&quot;크롬 웹 브라우저&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPBZIk/btsLcZWYSGJ/SXtkt3LvrnYju5lTgoVBPk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPBZIk%2FbtsLcZWYSGJ%2FSXtkt3LvrnYju5lTgoVBPk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;134&quot; height=&quot;134&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크롬 웹 브라우저&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;쓰레드&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 프로세스 내의 쓰레드들은 코드, 데이터, 힙 영역을 공유한다. 허나 자신만의&amp;nbsp;스택과&amp;nbsp;레지스터를 가지고 있다.&lt;/li&gt;
&lt;li&gt;생성과 종료가 프로세스보다 가볍다.&lt;/li&gt;
&lt;li&gt;하나의 쓰레드가 문제가 생기면 같은 프로세스 내의 다른 쓰레드도 영향을 미친다: 프로세스 전체가 종료될 위험이 있다.&lt;/li&gt;
&lt;li&gt;웹 브라우저의 탭, 게임에서의 캐릭터 이동, 사운드 처리 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;102&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l0h9b/btsLeAuvEKX/Qmple9v6lxzBNekVkpNQgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l0h9b/btsLeAuvEKX/Qmple9v6lxzBNekVkpNQgk/img.png&quot; data-alt=&quot;웹 브라우저의 탭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l0h9b/btsLeAuvEKX/Qmple9v6lxzBNekVkpNQgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl0h9b%2FbtsLeAuvEKX%2FQmple9v6lxzBNekVkpNQgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;102&quot; height=&quot;73&quot; data-origin-width=&quot;102&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹 브라우저의 탭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Vi 편집기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vi의 동작 모드는 vi /경로/파일명&lt;/li&gt;
&lt;li&gt;set nu: vi 편집기 line number&lt;/li&gt;
&lt;li&gt;[[ or ]] = vi 편집기에서 페이지 home 또는 end&lt;/li&gt;
&lt;li&gt;:100 = 100줄로 바로 이동&lt;/li&gt;
&lt;li&gt;port range = 0~ 65536번&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCKage/btsLeL3H9xT/GF8ZnFefrLDkbspBpbTTv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCKage/btsLeL3H9xT/GF8ZnFefrLDkbspBpbTTv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCKage/btsLeL3H9xT/GF8ZnFefrLDkbspBpbTTv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCKage%2FbtsLeL3H9xT%2FGF8ZnFefrLDkbspBpbTTv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;769&quot; height=&quot;241&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;:w file = file로 전체 다른이름 저장&lt;/li&gt;
&lt;li&gt;:1, 10 w file = 1~10줄까지만 file로 다른이름 저장&lt;/li&gt;
&lt;li&gt;:10000, $ w file = file 이름으로 10000줄부터 끝까지 다른 이름 저장&lt;/li&gt;
&lt;li&gt;:% w file = 전체 부분 다 file 이름으로 다른 이름 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDGz5M/btsLeQX9MWY/jPEH8Vu8cl6msbpUc47av0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDGz5M/btsLeQX9MWY/jPEH8Vu8cl6msbpUc47av0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDGz5M/btsLeQX9MWY/jPEH8Vu8cl6msbpUc47av0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDGz5M%2FbtsLeQX9MWY%2FjPEH8Vu8cl6msbpUc47av0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;726&quot; height=&quot;202&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lVezm/btsLeRbJMnW/3rndZ6ax5ZJnKYtcETUPHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lVezm/btsLeRbJMnW/3rndZ6ax5ZJnKYtcETUPHK/img.png&quot; data-alt=&quot;u = undo&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lVezm/btsLeRbJMnW/3rndZ6ax5ZJnKYtcETUPHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVezm%2FbtsLeRbJMnW%2F3rndZ6ax5ZJnKYtcETUPHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;543&quot; height=&quot;218&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;u = undo&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;*Alt+드래그 = 부분 복사. (상당히 편리하다!)&lt;/li&gt;
&lt;li&gt;/,? = 검색&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;207&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TKsR4/btsLd7T0GFa/kEzgokZRBCDlOLTuW9zuK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TKsR4/btsLd7T0GFa/kEzgokZRBCDlOLTuW9zuK1/img.png&quot; data-alt=&quot;g = global. 전부 다 바꾼다. g 없이는 해당 라인의 첫 번째 글자만 바꾼다. g를 넣는 습관을 들이자.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TKsR4/btsLd7T0GFa/kEzgokZRBCDlOLTuW9zuK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTKsR4%2FbtsLd7T0GFa%2FkEzgokZRBCDlOLTuW9zuK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;340&quot; height=&quot;207&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;207&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;g = global. 전부 다 바꾼다. g 없이는 해당 라인의 첫 번째 글자만 바꾼다. g를 넣는 습관을 들이자.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Vi 편집기에서 잠깐만 밖으로 나오고 싶다면&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:sh +&amp;nbsp; exit&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:! + enter&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;어제 했던 부분 이어서&amp;hellip;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;192.168.00.00처럼 주소를 적어서 다른 환경에 접속하는 방법이 흔하지만, 이 주소에 해당하는 hostname으로 접속하고 싶을 때는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(물론, 서로 trusted server이다. 서로 간 왕래가 잦은 것을 의미하며, 이것의 예시는 &lt;b&gt;Cluster Type(분산 시스템)&lt;/b&gt; 이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi 편집기를 이용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi /etc/hosts&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까도 말했지만, /etc에는 설정 파일들이 대거 들어 있다. &lt;b&gt;취급 유의.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 파일들 중 host에 들어가서 IP, 호스트네임, 도메인 3개 전부로 들어갈 수 있게끔 해줄 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhB8RP/btsLeptabtv/kJKiS0rRgepOg24IUl8n71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhB8RP/btsLeptabtv/kJKiS0rRgepOg24IUl8n71/img.png&quot; data-alt=&quot;ip주소/호스트이름/도메인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhB8RP/btsLeptabtv/kJKiS0rRgepOg24IUl8n71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhB8RP%2FbtsLeptabtv%2FkJKiS0rRgepOg24IUl8n71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;88&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ip주소/호스트이름/도메인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 패턴으로 작성한다. 클러스터링(분산 시스템)에 쓰일 서버를 입력하고 저장한다.(꼭 :wq)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8fjG4/btsLdHuEy5o/DuYr3Xo06ClR3Nt9nddEvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8fjG4/btsLdHuEy5o/DuYr3Xo06ClR3Nt9nddEvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8fjG4/btsLdHuEy5o/DuYr3Xo06ClR3Nt9nddEvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8fjG4%2FbtsLdHuEy5o%2FDuYr3Xo06ClR3Nt9nddEvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;77&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 잘 되었는지 IP에 해당하는 호스트이름으로 접속해보고, 도메인으로도 접속해보자.(잘 됨!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속 기록을 확인하는 것 까지 마무리 잘 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat ~/.ssh/known_hosts&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSUQbP/btsLeptabSR/Bh628Zmq9OyYyIMO3QFjuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSUQbP/btsLeptabSR/Bh628Zmq9OyYyIMO3QFjuk/img.png&quot; data-alt=&quot;server2.cloud.com으로 접속한 기록이 남아 있다. 위 두 개는 전부 IP로 접속한 기록이다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSUQbP/btsLeptabSR/Bh628Zmq9OyYyIMO3QFjuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSUQbP%2FbtsLeptabSR%2FBh628Zmq9OyYyIMO3QFjuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;345&quot; height=&quot;103&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;server2.cloud.com으로 접속한 기록이 남아 있다. 위 두 개는 전부 IP로 접속한 기록이다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;셸(Shell)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 해석, 프로그래밍, 사용자 환경 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;system은 전역 변수(모든 유저)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;User는 내 환경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Session은 임시 설정(껐다 키면 사라지는)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 유저가 사용하는 셸의 종류를 바꾸고 싶다면&lt;/p&gt;
&lt;pre id=&quot;code_1733880795219&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;[root@server1 LABs]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001::/home/awsuser1:/bin/sh
[root@server1 LABs]# chsh awsuser1
Changing shell for awsuser1.
New shell [/bin/sh]: /bin/bash
Shell changed.
[root@server1 LABs]# grep awsuser1 /etc/passwd
awsuser1:x:1001:1001::/home/awsuser1:/bin/bash
[root@server1 LABs]#&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;출력 리다이렉션(중요!)&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t3swn/btsLdiaRGpB/7NaJOcpkzttOtDGgdEr3jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t3swn/btsLdiaRGpB/7NaJOcpkzttOtDGgdEr3jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t3swn/btsLdiaRGpB/7NaJOcpkzttOtDGgdEr3jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft3swn%2FbtsLdiaRGpB%2F7NaJOcpkzttOtDGgdEr3jK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;373&quot; height=&quot;88&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;은 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt;은 새로 넣어서 뒤에 이어서 쓰기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;리다이렉션(&amp;gt;&amp;gt;)을 사용하면 명령의 표준 출력(standard output)이 파일에 추가됩니다. 여기서 &quot;추가&quot;는 파일이 이미 존재할 경우에 해당 파일의 끝에 내용을 덧붙이는 동작을 의미합니다. 만약 파일이 존재하지 않으면 새로운 파일을 생성합니다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;sar(System Activity Reporting, 시스템 상태 출력)&lt;/h2&gt;
&lt;pre id=&quot;code_1733880918283&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;[root@server1 LABs]# sar 2 5 (시스템 상태를 2초 간격으로 다섯 번 출력)
Linux 3.10.0-1160.el7.x86_64 (server1.cloud.com)        01/17/2024 x86_64 (4 CPU)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1733880919533&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;08:15:48 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:15:50 PM     all      0.00      0.00      0.25      0.00      0.00     99.75
08:15:52 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:15:54 PM     all      0.00      0.00      0.13      0.13      0.00     99.75
08:15:56 PM     all      0.13      0.00      0.38      0.00      0.00     99.49
08:15:58 PM     all      0.00      0.00      0.13      0.00      0.00     99.87
Average:        all      0.03      0.00      0.18      0.03      0.00     99.77&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1733880944579&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;08:15:48 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:15:50 PM     all      0.00      0.00      0.25      0.00      0.00     99.75
08:15:52 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:15:54 PM     all      0.00      0.00      0.13      0.13      0.00     99.75
08:15:56 PM     all      0.13      0.00      0.38      0.00      0.00     99.49
08:15:58 PM     all      0.00      0.00      0.13      0.00      0.00     99.87
Average:        all      0.03      0.00      0.18      0.03      0.00     99.77&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;날짜를 텍스트파일에 바로 입력시키기&lt;/h2&gt;
&lt;pre id=&quot;code_1733880978156&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;[root@server1 LABs]# date &amp;gt;&amp;gt; cloud1
[root@server1 LABs]# cat cloud1
Wed Jan 17 20:13:41 KST 2024
[root@server1 LABs]# while true; do date &amp;gt;&amp;gt; cloud; sleep 3; done
^C
[root@server1 LABs]# cat cloud
Wed Jan 17 20:14:30 KST 2024
Wed Jan 17 20:14:33 KST 2024
Wed Jan 17 20:14:36 KST 2024
Wed Jan 17 20:14:39 KST 2024
Wed Jan 17 20:14:42 KST 2024&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;각각 리소스 모니터링한 파일을 reporting&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 리소스를 모니터링한 파일을 로그로 저장하여 볼 수 있게끔 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881064863&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 LABs]# sar 2 10 &amp;gt; server1_$(date '+%Y-%m-%d').log
[root@server1 LABs]# ls
aws    cloud1     server1_2024-01-17.log  svc-file02  svc-file04
cloud  myservice  services                svc-file03  svc-file1
[root@server1 LABs]# cat server1_2024-01-17.log
Linux 3.10.0-1160.el7.x86_64 (server1.cloud.com)        01/17/2024      x86_64&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1733881090189&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;08:20:40 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:20:42 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:20:44 PM     all      0.00      0.00      0.25      0.00      0.00     99.75
08:20:46 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:20:48 PM     all      0.00      0.00      0.13      0.00      0.00     99.87
08:20:50 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:20:52 PM     all      0.00      0.00      0.00      0.12      0.00     99.88
08:20:54 PM     all      0.00      0.00      0.25      0.00      0.00     99.75
08:20:56 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:20:58 PM     all      0.13      0.00      0.38      0.13      0.00     99.37
08:21:00 PM     all      0.00      0.00      0.13      0.00      0.00     99.87
Average:        all      0.01      0.00      0.11      0.03      0.00     99.85
[root@server1 LABs]#&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1733881137687&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 LABs]# iostat 2 10 &amp;gt; server1_iostat_$(date '+%Y-%m-%d').log
[root@server1 LABs]# sar 2 10 &amp;gt; server1_sar_$(date '+%Y-%m-%d').log
[root@server1 LABs]# vmstat 2 10 &amp;gt; server1_vmstat_$(date '+%Y-%m-%d').log&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시간 동기화 서버에서 시간 맞추기&lt;/h2&gt;
&lt;pre id=&quot;code_1733881162966&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server2 ~]# date
Wed Jan 17 20:27:21 KST 2024 (안 맞는다)
[root@server2 ~]# yum -y install ntp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;base: &lt;a href=&quot;http://mirror.kakao.com/&quot;&gt;mirror.kakao.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;extras: &lt;a href=&quot;http://mirror.kakao.com/&quot;&gt;mirror.kakao.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;updates: &lt;a href=&quot;http://mirror.kakao.com/&quot;&gt;mirror.kakao.com&lt;/a&gt; Package ntp-4.2.6p5-29.el7.centos.2.x86_64 already installed and latest version Nothing to do (이미 설치했다는 뜻)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1733881188244&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server2 ~]# systemctl start ntpd (데몬 실행)
[root@server2 ~]# systemctl enable ntpd (부팅 시 자동으로 실행)
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@server2 ~]# ntpq -p (상태 확인!)
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp-seoul.gomba .STEP. 16 u 1653 64 0 0.000 0.000 0.000
132.226.17.96 .STEP. 16 u - 64 0 0.000 0.000 0.000
*193.123.243.2 125.185.190.74 2 u 1 64 1 5.571 -0.237 104.359
121.174.142.81 220.73.142.66 3 u 3 64 1 14.529 -1.121 138.745
[root@server2 ~]# date
Thu Jan 18 11:39:07 KST 2024 (correct!)
[root@server2 ~]#&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Scenario #1&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3대 리소스(메모리, 디스크, CPU)의 모니터링 로그를 수집하여 로그 서버(/BACKUP/LOG_SERVER)에 저장하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. server1에서 해당 로그를 만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881261658&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 LABs]# cd /BACKUP/
[root@server1 BACKUP]# mkdir LOG_SERVER
[root@server1 BACKUP]# cd LOG_SERVER/
[root@server1 LOG_SERVER]# pwd
/BACKUP/LOG_SERVER
[root@server1 LOG_SERVER]# vi resource-mon.sh
[root@server1 LOG_SERVER]# ls
resource-mon.sh
[root@server1 LOG_SERVER]# chmod 700 resource-mon.sh
[root@server1 LOG_SERVER]# ls
resource-mon.sh
[root@server1 LOG_SERVER]# ./resource-mon.sh
[root@server1 LOG_SERVER]# scp server1_resource_2024-01-17.log root@server2:/BACKUP/LOG_SERVER
root@server2's password:
server1_resource_2024-01-17.log                     100% 4671    73.4KB/s   00:00
[root@server1 LOG_SERVER]#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. scp를 이용하여 server2의 LOG_SERVER로 보낸 후 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881341194&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server2 ~]# cd /BACKUP
[root@server2 BACKUP]# mkdir LOG_SERVER
[root@server2 BACKUP]# cd LOG_SERVER/
[root@server2 LOG_SERVER]# pwd
/BACKUP/LOG_SERVER
[root@server2 LOG_SERVER]# ls
server1_resource_2024-01-17.log (잘 들어와 있다)
[root@server2 LOG_SERVER]# cat server1_resource_2024-01-17.log
Linux 3.10.0-1160.el7.x86_64 ([server1.cloud.com](http://server1.cloud.com/))        01/17/2024      *x86_64*        (4 CPU)

08:40:04 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:40:06 PM     all      0.00      0.00      0.13      0.00      0.00     99.87
08:40:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:40:10 PM     all      0.00      0.00      0.25      0.25      0.00     99.50
08:40:12 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:40:14 PM     all      0.00      0.00      0.13      0.13      0.00     99.75
08:40:16 PM     all      0.00      0.00      0.13      0.25      0.00     99.62
08:40:18 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
08:40:20 PM     all      0.00      0.00      0.12      0.00      0.00     99.88
08:40:22 PM     all      0.00      0.00      0.00      0.25      0.00     99.75
08:40:24 PM     all      0.00      0.00      0.13      0.00      0.00     99.87
Average:        all      0.00      0.00      0.09      0.09      0.00     99.82
Linux 3.10.0-1160.el7.x86_64 ([server1.cloud.com](http://server1.cloud.com/))        01/17/2024      *x86_64*        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.05    0.00    0.18    0.04    0.00   99.73

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               2.33       105.71         5.75     740375      40254

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.00    0.13    0.00   99.87

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.25    0.13    0.00   99.62

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.00         0.00         5.97          0         12

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.00    0.13    0.00   99.87

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.00    0.00    0.00  100.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.13    0.25    0.00   99.62

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               4.00         0.00        28.25          0         56

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.13    0.00    0.00   99.87

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               7.00         0.00        52.00          0        104

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.00    0.00    0.00  100.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.00    0.25    0.00   99.75

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.50         0.00        12.00          0         24

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.00    0.00    0.13    0.00    0.00   99.87

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 2364932   1280 735380    0    0    27     1   13   17  0  0 100  0  0
0  0      0 2364848   1280 735380    0    0     0     0   27   34  0  0 100  0  0
1  0      0 2364848   1288 735372    0    0     0     6   19   30  0  0 100  0  0
0  0      0 2364848   1288 735372    0    0     0     0   24   30  0  0 100  0  0
0  0      0 2364848   1288 735384    0    0     0     0   16   26  0  0 100  0  0
0  0      0 2364848   1296 735376    0    0     0     6   20   27  0  0 100  0  0
0  0      0 2364848   1296 735384    0    0     0     0   28   33  0  0 100  0  0
0  0      0 2364848   1296 735384    0    0     0     0   14   20  0  0 100  0  0
0  0      0 2364972   1304 735376    0    0     0     6   29   46  0  0 100  0  0
0  0      0 2365096   1304 735384    0    0     0     0  124  105  0  1 99  0  0
[root@server2 LOG_SERVER]#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우리가 알아야 할 점은&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Vi 편집기를 사용하여 파일을 만들어서 내부 내용의 명령어를 실행시켜&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그것을 log로 만들 수 있다는 점이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;명령어 단축키 만들기(alias)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 긴 명령어를 자주 사용해야 할 것 같은 경우, 명령어 단축키를 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;alias&lt;/b&gt;를 통해서. 고정적인 환경을 변수 처리하여 가볍게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시나리오: dir5로 바로 이동하고 싶어서 dir5라는 명령어를 만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881479227&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 LABs]# mkdir -p dir1/dir2/dir3/dir4/dir5

[root@server1 LABs]# tree&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1733881493217&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
├── aws
├── cloud
├── cloud1
├── dir1
│&amp;nbsp;&amp;nbsp; └── dir2
│&amp;nbsp;&amp;nbsp;     └── dir3
│&amp;nbsp;&amp;nbsp;         └── dir4
│&amp;nbsp;&amp;nbsp;             └── dir5 (여기로 바로 가고 싶은데&amp;hellip;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1733881501253&quot; class=&quot;shell&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;[root@server1 LABs]# alias dir5='cd dir1/dir2/dir3/dir4/dir5'
[root@server1 LABs]# dir5
[root@server1 dir5]# (!!)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시나리오: sshchk라는 명령어를 만들어보자. 내용은 ssh 상태 체크이다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881531941&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 dir5]# alias sshchk='ps -ef | grep ssh'
[root@server1 dir5]# sshchk
root      1147     1  0 18:43 ?        00:00:00 /usr/sbin/sshd -D
root      2239  2108  0 18:45 ?        00:00:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c &quot;env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic&quot;
root      2725  1147  0 18:45 ?        00:00:07 sshd: root@pts/0
root      2741  1147  0 18:45 ?        00:00:00 sshd: root@notty
root      2791  2741  0 18:45 ?        00:00:00 /usr/libexec/openssh/sftp-server
root      4677  2743  0 21:24 pts/0    00:00:00 grep --color=auto ssh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가변함수를 통해서 ssh로 정했던 항목을 잠시 $proc으로 바꿀 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881556208&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 dir5]# alias sshchk='ps -ef | grep $proc'
[root@server1 dir5]# sshchk ssh
root      1147     1  0 18:43 ?        00:00:00 /usr/sbin/sshd -D
root      2239  2108  0 18:45 ?        00:00:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c &quot;env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic&quot;
root      2725  1147  0 18:45 ?        00:00:07 sshd: root@pts/0
root      2741  1147  0 18:45 ?        00:00:00 sshd: root@notty
root      2791  2741  0 18:45 ?        00:00:00 /usr/libexec/openssh/sftp-server
root      4687  2743  0 21:25 pts/0    00:00:00 grep --color=auto ssh
[root@server1 dir5]# sshchk syslog
root       719     1  0 18:43 ?        00:00:00 /usr/sbin/mcelog --ignorenodev --daemon --syslog
root      1152     1  0 18:43 ?        00:00:04 /usr/sbin/rsyslogd -n
root      4689  2743  0 21:25 pts/0    00:00:00 grep --color=auto syslog
[root@server1 dir5]# alias (alias 자체를 통해서 내가 무엇을 만들었는지 알 수 있다.)
alias cp='cp -i'
alias dir5='cd dir1/dir2/dir3/dir4/dir5'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias sshchk='ps -ef | grep $proc'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@server1 dir5]#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alias는 반영을 시켜줘야 한다. 이것을 보고 환경 설정 파일이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alias를 입력한 디렉터리에 보면 환경설정 파일이 하나 생겼을 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881690593&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-rw-r--r--.  1 root root  176 Dec 29  2013 .bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.bashrc 이 녀석에다가 저장해야 하는데,&lt;/p&gt;
&lt;pre id=&quot;code_1733881763326&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 ~]# vi .bashrc #확인

[root@server1 ~]# source .bashrc

[root@server1 ~]# . .bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 과정을 따른다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;방화벽 열고 닫기 - 특정 포트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방화벽이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어제 index.html을 통해 루프백 주소를 입력하면 윈도우 브라우저에서 접속 가능하게 해 놓은 것이 있는데, 이것은 방화벽을 내려서 가능한 것이었다. (어제자 코드는 방화벽을 아예 내리는 것이었다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이번에는 특정 포트만 내려보자. 해당 포트에 해당하는 서비스를 사용할 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;방화벽이 우리에게 대하는 태도는 all deny, 항상 거절이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 필요한 부분이 있으면 open(allow)하여 열어야 한다. http의 서비스 중 &lt;b&gt;port 80&lt;/b&gt;을 열 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이 서비스는 AWS SG에 해당함)&lt;/p&gt;
&lt;pre id=&quot;code_1733881900745&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 ~]# firewall-cmd --list-all (방화벽이 켜져 있으면 아래처럼 뜰 것임)
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
ports:  
protocols: 
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공란인 부분을 보면 ports, protocol 등등&amp;hellip; 다 아무 것도 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 방화벽을 일부 내려 port 80만 열어 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1733881924915&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 ~]# firewall-cmd --add-service=http --permanent
success


[root@server1 ~]# firewall-cmd --add-port=80/tcp --permanent --zone=public
success
[root@server1 ~]# firewall-cmd --reload
success
[root@server1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client http ssh
ports: 80/tcp (이제 떴다)
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SJ8uC/btsLesQPrU3/LJfp408v4iCK9zusu8BMSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SJ8uC/btsLesQPrU3/LJfp408v4iCK9zusu8BMSK/img.png&quot; data-alt=&quot;loopback 주소를 입력하니까, 어제 했던 실습html 페이지가 나왔다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SJ8uC/btsLesQPrU3/LJfp408v4iCK9zusu8BMSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSJ8uC%2FbtsLesQPrU3%2FLJfp408v4iCK9zusu8BMSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;371&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;loopback 주소를 입력하니까, 어제 했던 실습html 페이지가 나왔다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 닫는 것도 해보자. add를 remove로 바꾸면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1733881957951&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 ~]# firewall-cmd --remove-port=80/tcp --permanent --zone=public
success
[root@server1 ~]# firewall-cmd --reload
success
[root@server1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client http ssh
ports: (다시 사라졌다)
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;방화벽 열고 닫는 Shell 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. fw(firewall)_enable.sh를 만들어 거기에 방화벽을 여는 코드를 저장 및 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 1을 복사하여 disable.sh라는 이름으로 vi를 이용, 방화벽을 닫는 코드를 저장 및 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. server2로 1과 2를 전송(scp)&lt;/p&gt;
&lt;pre id=&quot;code_1733882042263&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 ~]# vi fw_enable.sh
[root@server1 ~]# chmod 700 fw_enable.sh

[root@server1 ~]# cp fw_enable.sh fw_disable.sh
[root@server1 ~]# vi fw_disable.sh
[root@server1 ~]# ls -l
total 28
-rw-------. 1 root root 1787 Jan 17 11:40 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Desktop
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Documents
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Downloads
-rwx------. 1 root root  283 Jan 18 15:19 fw_disable.sh
-rwx------. 1 root root  280 Jan 18 15:14 fw_enable.sh
drwxr-xr-x. 2 root root    6 Jan 17 15:21 hello
-rw-r--r--. 1 root root 1818 Jan 17 11:48 initial-setup-ks.cfg
drwxr-xr-x. 3 root root 4096 Jan 17 21:19 LABs
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Music
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Pictures
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Public
drwxr-xr-x. 2 root root    6 Jan 17 15:21 root@192.168.56.102
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Templates
drwxr-xr-x. 2 root root   24 Jan 17 15:54 test
-rw-r--r--. 1 root root 7092 Jan 17 15:28 test.jpg
drwxr-xr-x. 2 root root    6 Jan 17 15:30 Videos
[root@server1 ~]# scp fw_* root@server2:/root
root@server2's password:
fw_disable.sh                                       100%  283    24.6KB/s   00:00
fw_enable.sh                                        100%  280    12.9KB/s   00:00
[root@server1 ~]#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;server2를 확인해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1733882057835&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server2 ~]# ls
anaconda-ks.cfg  Downloads      hello                 Pictures   Videos
Desktop          fw_disable.sh  initial-setup-ks.cfg  Public
Documents        fw_enable.sh   Music                 Templates
[root@server2 ~]#&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 도착했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4HPO7/btsLc1Hivdv/Zo5UPX5UgLPD4vNIoxXRS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4HPO7/btsLc1Hivdv/Zo5UPX5UgLPD4vNIoxXRS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4HPO7/btsLc1Hivdv/Zo5UPX5UgLPD4vNIoxXRS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4HPO7%2FbtsLc1Hivdv%2FZo5UPX5UgLPD4vNIoxXRS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;357&quot; height=&quot;776&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;히스토리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1000개 한정 어제서부터 썼던 명령어들을 출력해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!를 콤보 키로 사용하여 !숫자를 치면 숫자에 해당하는 명령어가 실행된다.&lt;/p&gt;
&lt;pre id=&quot;code_1733882115462&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 ~]# history
1 ssh 192.168.0.219

2 exit

3 mkdir hello

4 scp -r hello root@192.168.56.102

5 ssh 192.168.56.102

6 scp -r hello root@192.168.56.102:/root/

7 ssh 192.168.56.102

8 ls

9 test.jpg

10 cat test.jpg

11 ls

12 systemctl stop firewalld.service

13 systemctl start httpd

14 cd /var/

...&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프롬프트 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프롬프트 설정 변수 = PS1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 개의 서버를 식별하는 수단이다.&lt;/p&gt;
&lt;pre id=&quot;code_1733882312061&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@server1 /]# su - awsuser1
Last login: Thu Jan 18 16:17:47 KST 2024 on pts/0
[awsuser1@server1 ~]$ PS1='(\h:\t)\$'
(server1:16:19:48)$
(server1:16:19:53)$
(server1:16:19:55)$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/9</guid>
      <comments>https://shyguyjae10.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 18 Jan 2024 19:30:57 +0900</pubDate>
    </item>
    <item>
      <title>CPU time scheduling</title>
      <link>https://shyguyjae10.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://zzsza.github.io/development/2018/07/29/cpu-scheduling-and-process/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://zzsza.github.io/development/2018/07/29/cpu-scheduling-and-process/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Hardware</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/8</guid>
      <comments>https://shyguyjae10.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 18 Jan 2024 09:05:41 +0900</pubDate>
    </item>
    <item>
      <title>Day 02.</title>
      <link>https://shyguyjae10.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 서버 설치 및 운영에 대해 실습하는 시간이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-Network Time Protocol을 위한 사용 시간대 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-Server with GUI setting&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-Disk partition&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-Network setting&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 작업 후에 리모트 컨트롤을 위해 PuTTY, MOBAterm을 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세팅 잘 해주고. moba도 마찬가지.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UKz2z/btsDAD7vZw1/wUh7SK60ezBAiLsOhRpMd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UKz2z/btsDAD7vZw1/wUh7SK60ezBAiLsOhRpMd1/img.png&quot; data-alt=&quot;PuTTY 진짜 오랜만이다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UKz2z/btsDAD7vZw1/wUh7SK60ezBAiLsOhRpMd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUKz2z%2FbtsDAD7vZw1%2FwUh7SK60ezBAiLsOhRpMd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;260&quot; height=&quot;254&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1956&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PuTTY 진짜 오랜만이다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ovav7/btsDxUhQ1Nl/kOWkiS2TVj2RgBJKKukXQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ovav7/btsDxUhQ1Nl/kOWkiS2TVj2RgBJKKukXQ1/img.png&quot; data-alt=&quot;MOBA는 처음 사용해보는건데, 얘가 좀 더 우수하긴 하다. 우클릭 만으로 Paste 기능이 되는 것은 PuTTY와의 확연한 차이점이다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ovav7/btsDxUhQ1Nl/kOWkiS2TVj2RgBJKKukXQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOvav7%2FbtsDxUhQ1Nl%2FkOWkiS2TVj2RgBJKKukXQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;322&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1338&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MOBA는 처음 사용해보는건데, 얘가 좀 더 우수하긴 하다. 우클릭 만으로 Paste 기능이 되는 것은 PuTTY와의 확연한 차이점이다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WinSCP를 사용하여 사용자 컴퓨터에서 가상머신으로 SCP(Secure CoPy) 파일 전송을 해 보았다. 이것 또한 예전에 해본 것들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 웹서버를 구축하였다. 이게 생각보다 오래 지체되었는데, 이것도 역시 해본 것이지만... 오랜만에 하니 잔실수가 있었다. 이것저것 세팅 하고...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRknr/btsDyNbGNFP/XsaV4kRvEMHymcZV1im441/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRknr/btsDyNbGNFP/XsaV4kRvEMHymcZV1im441/img.png&quot; data-alt=&quot;Keep Calm and Carry On - thisisjaewonchoi&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRknr/btsDyNbGNFP/XsaV4kRvEMHymcZV1im441/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRknr%2FbtsDyNbGNFP%2FXsaV4kRvEMHymcZV1im441%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;308&quot; height=&quot;108&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Keep Calm and Carry On - thisisjaewonchoi&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 가상머신 IP를 윈도우 브라우저에 입력하여 들어가면, 위와 같은 문구를 가진 웹 페이지를 드러내게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것까지가 끝. 실습이 전부였다. 기초 중 기초라고 하는데, 잘 이해하고 있어야겠다.&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS</category>
      <category>Linux</category>
      <category>클라우드</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/7</guid>
      <comments>https://shyguyjae10.tistory.com/7#entry7comment</comments>
      <pubDate>Thu, 18 Jan 2024 00:24:21 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 공부 리소스(!!)</title>
      <link>https://shyguyjae10.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863&lt;/a&gt;&lt;/p&gt;</description>
      <category>AWS</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/6</guid>
      <comments>https://shyguyjae10.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 17 Jan 2024 12:26:47 +0900</pubDate>
    </item>
    <item>
      <title>Day 01.</title>
      <link>https://shyguyjae10.tistory.com/5</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;OT 및 자기소개, 커리큘럼 소개 등 교육을 진행하기 앞서 기본적인 것들을 했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;노션의 사용법을 좀 더 공부할 필요가 있어 보인다. 나중에 필기할 때 많이 유용해보인다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;(&lt;a href=&quot;https://mirror.elice.io/centos/7.9.2009/isos/x86_64/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mirror.elice.io/centos/7.9.2009/isos/x86_64/&lt;/a&gt;)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgHD01/btsDuSEgIY9/ld8WWAAhYg3tapHlujfECk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgHD01/btsDuSEgIY9/ld8WWAAhYg3tapHlujfECk/img.png&quot; data-alt=&quot;4.7GB좀 되는 애랑 우분투 설치. 예~전에 했던 것들이라 추억이 새록새록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgHD01/btsDuSEgIY9/ld8WWAAhYg3tapHlujfECk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgHD01%2FbtsDuSEgIY9%2Fld8WWAAhYg3tapHlujfECk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;632&quot; height=&quot;27&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4.7GB좀 되는 애랑 우분투 설치. 예~전에 했던 것들이라 추억이 새록새록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;자격증 필요 리스트들을 노션으로 작성했는데, 고민이 생겼다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;수업 때는 노션에 작성 후 여기에 추가적으로 옮길지, 아니면 그냥 한 번에 여기에 정리해버릴지.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;노션과 티스토리를 연결하는 쉬운 방법은 없나?...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 따야 할 자격증 리스트들을 나열해주셨는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-AWS Certified Solutions Architect - Associate(SAA)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-리마 2급&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-CKA&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등등이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SAA가 가장 중요하다. 이것만 보고 나아가고, 이것을 무조건 취득해야 잡 페어의 기회가 주어진다. &lt;b&gt;무조건 따야 한다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 리눅스를 잘 다뤄야 한다고 하셨다. 일단 이 3개에 주목해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지는 동기 분들을 알아가는 시간이었다. 경쟁 의식도 필요하지만, 동기 의식이 더욱 중요하다. 같이 해 나가보자. :)&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS</category>
      <category>CI/CD</category>
      <category>docker</category>
      <category>Kubernetes</category>
      <category>Linux</category>
      <category>network</category>
      <category>화이팅</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/5</guid>
      <comments>https://shyguyjae10.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 16 Jan 2024 23:48:24 +0900</pubDate>
    </item>
    <item>
      <title>AWS 학습 자료집</title>
      <link>https://shyguyjae10.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gist.github.com/serithemage/9993400aa483c95ade954a1e36b1004b&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gist.github.com/serithemage/9993400aa483c95ade954a1e36b1004b&lt;/a&gt;&lt;/p&gt;</description>
      <category>AWS</category>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/3</guid>
      <comments>https://shyguyjae10.tistory.com/3#entry3comment</comments>
      <pubDate>Mon, 15 Jan 2024 21:19:11 +0900</pubDate>
    </item>
    <item>
      <title>환영합니다!</title>
      <link>https://shyguyjae10.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;라고는 하는데, 뭘 써야 할지 모르겠다. 그래서 이 곳에 나의 일기와 관련된 컨텐츠들을 적어볼까 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;공부, 묵상, 음악, 독서 등등...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;&quot;&gt;근사하진 못하겠지만 그럴싸하게 해볼 수는 있겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <author>새침데기 재열이</author>
      <guid isPermaLink="true">https://shyguyjae10.tistory.com/2</guid>
      <comments>https://shyguyjae10.tistory.com/2#entry2comment</comments>
      <pubDate>Mon, 15 Jan 2024 21:11:03 +0900</pubDate>
    </item>
  </channel>
</rss>