Question - 14

User ravi must configure cron job that runs at daily 14:30 and executes /bin/echo "welcome". User user1 should not schedule cron jobs.

ravi 유저는 cron 설정을 합니다. 

매일 14:30분에 "welcome" 메세지를 echo 명령어로 출력.

user1 유저는 cron 을 사용할 수 없습니다.



# su - ravi 후 crontab -e

# 또는 root 상태에서 crontab -eu ravi                 // ravi 유저의 cron 설정

30 14 * * * /bin/echo "welcome"                      

:wq


# vi /etc/cron.deny                    // deny 유저계정 설정

user1 

:wq



user1은 crontab -e 실행시 실행 불가 메세지를 보게 됩니다.

 crontab -e

You (user1) are not allowed to use this program (crontab)

See crontab(1) for more information








블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,
Openldap Server : 192.168.0.5    /etc/hosts : testldap.co.kr 
Openldap Client : 192.168.0.3     /etc/hosts : test1   
Openldap User : Client 는 Server 에서 생성된 ldapuser1 란 계정에 접속할 수 있어야 함. 
                             접속시 autofs 로 /home/guest/계정명  으로 홈디렉토리 생성

CentOS 7.6 Lastest 

※ 서버 구축은 RHCSA 안 나옵니다. 실제로 되는지 확인차 해본겁니다. 
LDAP 서버가 에러도 많이 나고 복잡합니다. 


# OpenLdap Server 구축 ( 192.168.0.5 ) 

#  yum install -y openldap-servers openldap-clients   nss-pam-ldapd                // 기본 패키지 인스톨
# systemctl start slapd               // 데몬 시작 ( 389 포트 )
# systemctl enable slapd          // 자동시작 등록
# netstat -atunp | grep LISTEN 

# /etc/hosts 에서 hosts설정  ( 사설이니 Serverf & Client 둘다 해두면 좋음 )
192.168.0.5 testldap testldap.co.kr

#ping testldap.co.kr
PING testldap (192.168.0.5) 56(84) bytes of data.
64 bytes from testldap (192.168.0.5): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from testldap (192.168.0.5): icmp_seq=2 ttl=64 time=0.030 ms
.
.


openldap의 환경 설정은 /etc/openldap/slapd.d/cn\=config/olcDatabase=~.ldif 를 읽어오는데,
해당 파일을 수동 편집하는게 아니라 Config 양식을 생성 후,  ldapmodify 명령어로 업데이트를 하는 방식입니다.
위에 /usr/share/openldap-server/slapd.ldif 복사해온 템플렛을 적당히 잘라서 수정 후 사용하면 좋습니다. 

# cp /usr/share/openldap-servers/slapd.ldif /etc/openldap/slapd.conf                    // 환경설정 템플릿을 복사

# slappasswd                                   // ldap 관리자 패스워드 설정
New password:
Re-enter new password:
{SSHA}gsZV8FomyBMr7k82Cp7M1RntnCq0/I1B                    // 잘 기록해두기.


# vi /etc/openldap/domain.ldif                     // 서버 도메인 구성 관련 환경설정 파일 생성

================================================
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=testldap,dc=co,dc=kr               // dc 설정 ( testldap.co.kr ) 

dn: olcDatabase={2}hdb,cn=config               
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=gitcluster,dc=co,dc=kr          // dc 설정 ( Manager 계정 = root ) 

dn: olcDatabase={2}hdb,cn=config
changetype: modify               // 원본 설정 수정 선언
replace: olcRootPW               // RootPW 설정 선언
olcRootPW: {SSHA}gsZV8FomyBMr7k82Cp7M1RntnCq0/I1B             // slappassword 에서 만든 패스워드 값 그대로 기입. 
================================================


# ldapmodify -H ldapi:/// -f domain.ldif                         // 환경설정파일에 해당 내용 업데이트
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"



# vi /etc/openldap/monitor.ldif               // ldap 모니터링을 관리자 계정만 볼 수 있도록 환경 설정 
================================================
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=Manager,dc=testldap,dc=co,dc=kr" read by * none
================================================


#ldapmodify -H ldapi:/// -f monitor.ldif               // 환경설정파일에 해당 내용 업데이트
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"


# Ldapserver 에 TLS 인증서 적용하기

# 프라이빗키 생성
# cd /etc/pki/tls/certs
# make server.key                        // 우선 Private Key 자동으로 만들어줍니다. 
openssl rsa -in server.key -out server.key                 
Enter pass phrase for server.key:                    // 프라이빗키 패스워드 입력하세요.
writing RSA key


#root@ldap-server:/etc/pki/tls/certs# make server.csr                         // Pravate Key 을 사용하여 CSR ( TLS ) 인증서 파일 분리하는 MAKE 입니다. 
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:kr
State or Province Name (full name) []:seoul
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:kt
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:               // 이 부분들은 브라우저에서 인증서 정보 표기되는건데.. 알아서..
Email Address []:moo

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                    // 인증서 패스워드 지정안해도 됩니다. ( 지정하면 아파치 등등 기동할때 패스워드 물어봄 ) 
An optional company name []:

#openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650               //  만들어진 두 파일을 BASE 로 하는 CRT 파일 분리하기. 
Signature ok
subject=/C=kr/ST=seoul/L=Default City/O=kt/emailAddress=moo
Getting Private key

/etc/openldap/certs                    // ldap 인증서 저장 경로로 위 파일들을 복사
# cp server.* /etc/openldap/certs 
# cd /etc/openldap/certs
# chown -R ldap:ldap server*                    //  해당 파일들 소유 및 그룹 설정.
=========================================
root@ldap-server:/etc/openldap/certs# ll
합계 92

-rw-r--r--. 1 root root 65536 5월 14 13:18 cert8.db
-rw-r--r--. 1 root root 16384 5월 14 13:18 key3.db
-r--r-----. 1 root ldap 45 5월 14 10:26 password
-rw-r--r--. 1 root root 16384 5월 14 10:26 secmod.db
-rw-r--r--. 1 ldap ldap 1151 5월 14 23:05 server.crt
-rw-------. 1 ldap ldap 980 5월 14 23:01 server.csr
-rw-------. 1 ldap ldap 1679 5월 14 23:01 server.key
=========================================

## 인증서 관련 환경 설정파일을 만들어서 ldapmodify 로 업데이트 
csr 인증서는 클라이언트 다운로드용도로 쓰려고 했는데, 다시 보니 .pem 포맷 요구 하네요... 일단 이대로 해도 되기는 하니까 진행하겠습니다. 

===========================================================
# vi certs.ldif
dn: cn=config
objectClass: olcGlobal
cn: config          // 이 첫 부분 정의를 안해주면 알수없는 오류로 업데이트가 안됩니다. ( 해당 내용은 /usr/src/share 에 있던 TLS 부분 템플릿 내용 입니다 )
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid     

dn: cn=config
changetype: modify
replace: olcTLSCACertificatePath
olcTLSCACertificatePath: /etc/openldap/certs

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
===========================================================

#ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif                    // 인증서 업데이트


#### 여기까지 도메인(DN,DC 설정) , LDAP 관리자 (모니터링 ) , 서버 인증서 업로드 작업까지 완료 되었습니다
#### 이제 유저 계정 관련 스키마와 계정생성을 할 차례.

# 유저 DB ( ldap 디렉토리 설정 및 Account 추가 ) 설정
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG               // ldapuser 디렉토리 설정 컨피그 템플릿을 복사
# chown -R ldap:ldap /var/lib/ldap                    // 해당 폴더 전체 ldap 소유로 설정.

# 기본 디렉토리 DB 구조를 추가
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldifSASL/EXTERNAL authentication started
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
( 에러 안나야 합니다. 이 작업이 안되면, 밑에 부서 추가도 당연히 에러납니다 ) 

# 이제 각 부서(디렉토리)를 구분하는 스키마 업데이트
===========================================
# vi directory.ldif
dn: dc=testldap,dc=co,dc=kr
dc: testldap
objectClass: top
objectClass: domain

dn: cn=Manager ,dc=testldap,dc=co,dc=kr               // testldap.co.kr 도메인의 LDAP 서버에 Manager 정의
objectClass: organizationalRole
cn: Manager
description: LDAP Manager

dn: ou=People,dc=testldap,dc=co,dc=kr                    // People 구조 정의
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=testldap,dc=co,dc=kr                    // Group 구조 정의
objectClass: organizationalUnit
ou: Group
===========================================

# 환경설정에 구조 추가하기 ( add관련 설정은 초기 설정했던 관리자의 Password 를 물어 봅니다. ) 
# ldapadd -x -W -D "cn=Manager,dc=testldap,dc=co,dc=kr" -f directory.ldif


root@ldap-server:/etc/openldap# ldapadd -x -W -D "cn=Manager,dc=testldap,dc=co,dc=kr" -f directory.ldif            // 구조 업데이트 실행
Enter LDAP Password:
adding new entry "dc=testldap,dc=co,dc=kr"
adding new entry "cn=Manager ,dc=testldap,dc=co,dc=kr"
adding new entry "ou=People,dc=testldap,dc=co,dc=kr"
adding new entry "ou=Group,dc=testldap,dc=co,dc=kr"


##디렉토리 구조 완료.
##이제 LDAP 유저만 추가하면 됩니다.

ldapuser1 라는 계정을 만들어 보겠습니다

vi ldapuser1.ldif
===============================================
dn: uid=ldapuser1,ou=People,dc=testldap,dc=co,dc=kr                    // testldap.co.kr 도메인의 People ou(그룹 조직)에 ldapuser1 이라는 dn(여기서는 계정) 을 선언.
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser1
uid: ldapuser1
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/guest/ldapuser1        // 이 부분을 나중에 autofs
loginShell: /bin/bash
gecos: ldapuser1 [Admin (at) testldap]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
==============================================


ldapadd -x -W -D "cn=Manager,dc=testldap,dc=co,dc=kr" -f ldapuser1.ldif               // 계정 생성. Manager ( 관리자 ) 패스워드 물어봄. 
Enter LDAP Password:
adding new entry "uid=ldapuser1,ou=People,dc=testldap,dc=co,dc=kr"



## 서버에 ldapuser1 이라는 계정이 생성 됌. 
## 확인하기
#  ldapsearch -x cn=ldapuser1 -b dc=testldap,dc=co,dc=kr
# extended LDIF
#
# LDAPv3
# base <dc=testldap,dc=co,dc=kr> with scope subtree
# filter: cn=ldapuser1
# requesting: ALL
#

# ldapuser1, People, testldap.co.kr                    // 계정이 존재하면 해당 내용들이 출력 됩니다. ( 계정이 없으면 단순 result 출력만 나옵니다 ) 
dn: uid=ldapuser1,ou=People,dc=testldap,dc=co,dc=kr
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser1
uid: ldapuser1
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/guest/ldapuser1
loginShell: /bin/bash
gecos: ldapuser1 [Admin (at) testldap]
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


서버 구성 및 사용자 계정 추가까지 완료.

마지막으로 LDAP 계정의 Homedirectory Mount를 위해 NFS 구성해야 합니다

# yum -y install nfs-utils
# systemctl start nfs
# systemctl enable nfs
# mkdir -p /home/guest/ldapuser1
# chmod -R 777 /home/guest/ldapuser1
# vi /etc/exports
/home/guest/ldapuser1 -rw *(rw,no_root_squash)

# showmount -e
/home/guest/ldapuser1 *

# exportfs -v
/home/guest/ldapuser1
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

#마운트 테스트
#mount localhost://home/guest/ldapuser1 /mnt
#df -Th 
localhost:/home/guest/ldapuser1 8.0G 1.6G 6.5G 20% /mnt

#umount /mnt




이제 클라이언트에서 해당 계정을 확인해야 합니다.



LDAP Client ( 192.168.0.3 ) 

#/etc/hosts 에 server hostname 설정 
( 설정 안 하면 하단의 ldapserver에 ip직접 입력해도 됩니다 ) 

#yum install -y ldap-clients nss-pam-ldapd                     // 클라이언트와 로컬인증관련 모듈 패키지 설치.

root@TEST1:/etc/openldap/certs# authconfig --enableldap --enableldapauth --ldapserver=testldap.co.kr --ldapbasedn="dc=testldap","dc=co","dc=kr" --update                              
// 서버에 CLI 로 직접 연결. 아무 말 안 나오면 접속

root@TEST1:/etc/openldap/certs# systemctl restart nslcd                    
// ldap 클라이언트 재시작. 

root@TEST1:/etc/openldap/certs# getent passwd ldapuser1                    
// ldap 서버에 생성한 ldapuser1 이라는 계정정보 불러오기.
ldapuser1:*:9999:100:ldapuser1 [Admin (at) testldap]:/home/guest/ldapuser1:/bin/bash                    // 서버에서 계정 정보 가져온 것 확인.


#su ldapuser1                     // ldapuser1 로 로그인 성공 확인. 다만 설정된 /home/guest/ldapuser1 경로가 없다고 뜸.

해당 문제를 위해 LDAP 서버에 있는 NFS Homedir의 autofs 가 필요해짐.

#### autofs 작업
#yum install -y autofs
#systemctl start autofs
#systemctl enable autofs
#vi /etc/auto.master

/misc /etc/auto.misc
/home/guest /etc/auto.guest              // 이 라인을 추가

#vi /etc/auto.guest 파일 생성
ldapuser1 -rw,vers=3 testldap.co.kr:/home/guest/ldapuser1        // 마운트 정보.

* & 로 해도 잘 되는 부분 확인 했습니다.


#systemctl restart autofs            // 재시작

#su - ldapuser1            // 환경설정 유지하면서 유저 변경
마지막 로그인: 수 5월 15 17:30:55 KST 2019 일시 pts/1

-bash-4.2$ pwd                    // 마운트된 홈 경로 확인
/home/guest/ldapuser1

-bash-4.2$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.7G 5.4G 1.3G 81% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 45M 451M 10% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/sda1 297M 146M 152M 49% /boot
tmpfs 100M 0 100M 0% /run/user/1000
/dev/mapper/redhat-fedora 772M 828K 734M 1% /lvm1
tmpfs 100M 32K 100M 1% /run/user/0
testldap.co.kr:/home/guest/ldapuser1 8.0G 1.6G 6.5G 20% /home/guest/ldapuser1                // 자동마운트된 부분 확인


클라이언트에서 LDAP 유저로 로그인 시, 자동 HOME 디렉토리 마운트되는 부분 확인 되었습니다.


필요한 부분

1. 클라이언트의 인증서 사용 옵션 ( Cli 로 하려면 conf 파일 수정해야 함 ) 
2. 시험에선 root 라서 상관이 없으나(위랑 똑같이 될겁니다)
로컬에서 일반유저가 LDAP 유저로 SU Password 로그인 하려면 nss_pam 연동한 /etc/security의 PAM 설정이 필요할 것으로 보임. 
3. authconfig-tui / gtk 쪽은 저녁에 추가 하겠습니다. ( 오늘저녁이라고는 말 안했... ) 







블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

문제16) Copy the file /etc/fstab to /var/tmp/fstab and configure the "ACL" as mention following. The file /var/tmp/fstab is owned by the "root". The file /var/tmp/fstab belongs to the group "testmanager“. The file /var/tmp/fstab should not be executable by other's. The user "max" should able to read and write to the file. The user "dax" can neither read nor write to the file. other users (future and current) should be able to read /var/tmp/fstab.


/etc/fstab 파일을 /var/tmp/fstab 으로 카피하고 ACL 세팅을 하시오.

1. var/tmp/fstab 의 소유는 root 이다.

2. /var/tmp/fstab 은 testmanager 그룹에 소속된다. 

3. /var/tmp/fstab 은 다른 유저는 실행해서는(실행/수정) 안된다.

4. "max" 라는 유저는 fstab 파일을 읽거나 쓸 수 있어야 한다.

5. "dax" 라는 유저는 fstab 파일을 읽거나 쓸 수 없어야 한다.

6. 다른 유저는 fstab 파일을 읽을 수는 있다. 


그야말로 앞선 기출 포스팅에서 "단어" 만 바꾼 다른 문제가 나왔습니다.

1. #cp /etc/fstab /var/tmp/fstab        // 우리는 root 니까 옵션없이 복사하면 root 소유에 root 그룹에 소속된 fstab 파일이 됩니다.

2. #groupadd testmanager         // 그룹이 없으면 만들기

#chown root:testmanager /var/tmp/fstab   or

#chgrp testmanager /var/tmp/fstab                // 그룹을 testmanager 로 변경.

#ll

-rw-r--r-- 1 root testmanager 501 May 13 00:05 fstab

#getfacl fstab                // 현재 fstab 의 ACL 보기

# file: fstab

# owner: root

# group: testmanager

user::rw-

group::r--

other::r--


3. 이미 그렇게 되어 있어서 굳이 수정할 필요가 없음.

456. max user 에게 rw 권한 부여

dax user 에게 모든 권한 불허.

      다른 유저는 읽기만 가능.

# setfacl -m user:max:rw fstab   ( = u:root:rw )         // max user 에게 rw. 

# setfacl -m:dax:--- fstab            // dax user 에게 아무 권한 주지 않음

# getfacl fstab                // 권한 확인하기

# file: fstab

# owner: root

# group: testmanager

user::rw-                // 이건 일반유저가 아니라 소유자

user:max:rw-            // 일반유저 max 의 권한

user:dax:---            // 일반유저 dax 의 권한

group::r--               

mask::rw-        

other::r--            // 다른 일반유저는 읽기만 가능.


 




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

문제) Mount NFS Exports from given path 192.168.2.113:/server

Mount Point as /remote. Configure as autofs.

 

Client 에서 LDAP 계정 연동이 아닌, 단순 NFS 마운트를 

/etc/fstab 이 아닌 Autofs 로 구현하라는 이야깁니다.

앞선 ldap 연동에 비하면, 난이도가 낮은 유형의 문제인데요.


우선 NFS Server 에서 rpcbind , rpcinfo 상태 정상인 경우로 가정합니다.

( 시험장에선 문제에 맞게 NFS 서버가 구현되어 있겠지요 )


#yum install -y autofs*

#vi /etc/auto.master

/misc   /etc/auto.misc 

/remote /etc/auto.remote 추가         / 별도의 Config 파일 구성 선언


#vi /etc/auto.remote

remote *     -rw,sync        192.168.2.113:/server        // 마운트포인트    옵션     NFS 서버 경로


#mkdir /remote

#systemctl restart autofs

#df -h


### 옵션을 잘 모르겠으면 man 5(옵션) [ 명령어 ] 로 항상 참조해 봅시다. 그럼 쉬워짐



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

보통은(RHEL7이라면) 앞서 소개한 chronyd 사용한 세팅인데 

GUI 에서 한다면 system.config-date 패키지를 설치해서 하는 방법 입니다.

문제에서 요청하는 방식대로 하시면 됩니다.


#yum install -y system-config-date

#system-config-date


하시면, chronyd.conf 세팅과 비슷한, 타임서버 설정 존이 그래픽모드로 나타납니다..


블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


시험장에 들어가면 가장 먼저 해야 할 VM 로그인입니다.

로그인해서 yum repo 및 네트워크 설정을 해야 시험을 칠 수 있으니..

이거 못하면 돈만 40만원 내고 집에 가야합니다. 시험장까지 와서 못하실 분은 없겠지만


RHEL 7 의 루트 패스워드 초기화 방법은 하기 주소를 참조하면 되고

간단히 요약하겠습니다.

https://docs.fedoraproject.org/en-US/Fedora/23/html/System_Administrators_Guide/sec-Changing_and_Resetting_the_Root_Password.html


방법 1) rd.break + autolabel 

= grub2 화면에서 e 입력하여 커널옵션 진입 후
 linux16줄의 맨 뒤에 rd.break 입력 후 ctrl + x 로 부팅.


부팅 후 /sysroot 마운트

mount -o remount,rw /sysroot

chroot /sysroot

passwd root

touch ./autolabel

exit 2회 시 그대로 부팅 진행. 


방법 2) init=/bin/bash + chmod /etc/shadow + autolabel

= 커널옵션 linux16줄의 rhgb부터 뒷부분을 싹 지우고 

init=/bin/bash 입력 후 ctrl+x 를 입력하여 부팅. 


부팅 후 / 재 마운트. 

mount -o remount,rw /

passwd root 업데이트 ( 실패함. 성공 떠도 적용 안됩니다. ) 

chmod 640 /etc/shadow

passwd root

touch ./autolabel

exit

(셧다운 되므로, 강제 리부팅)


정상 부팅 후, 수정한 root 패스워드로 로그인. 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


LVM 이야기입니다.

반드시 나오는 RHEL 7의 스토리지 실습 부분이고

생성 , 삭제 , 볼륨 증감 등의 기본적인 운영 커맨드를 숙지해야 합니다.

LVM 의 구조나 상세한 이해를 적는 공간은 아니고, 실전용 실습 용도로 설명합니다.

필수 용어

PV(Physical Volume): LVM 사용을 위해 설정한 최초의 raw 디스크. 

(/dev/sdb1, /dev/sdb2 등). fdisk /dev/sdb 파티셔닝 중 반드시 t 커맨드로 8e ID 부여해야 함. 

PE(Physical Extents): 블럭(PE) 단위로 제어할 때 사용. 

pvcrate에서 옵션으로 -l 을 사용. 

VG(Volume Group): PV 를 모아 하나의 논리적 그룹을 형성. 

( RAID 로 비유하면 물리디스크를 RAID 0,1 등의 Array 로 묶은 그룹 ) 

LV(Logical Volume): VG에서 분할. 실제 마운트 포인트로 사용되는 LVM 파티션. 당연한 이야기지만 VG 보다 클 수는 없다. 

간단 이해의 흐름 ) PV Drive 들을 모아서 VG 를 생성. VG에서 LV 를 분할. 

RAID 과정 생각해도 됩니다. PV가 물리디스크. VG가 Array. LV가 파티션. 


LVM 실습  

/dev/sdb   8GB 포맷되지 않은 디스크. 

1) LV name = LV01

2) VG name = VG01

3) LV size = 50PE  ( PE Size = 20MB ) 

4) LV 형식은 EXT3 

5) /mnt/lvm 에 mount하고, 부팅시 자동으로 마운트 되게 하시오.

6) LV 크기를 70PE 로 확장하시오.

7) LV 크기를 60PE 로 줄이시오.


1) LVM 사용할 디스크 확인 하기

= /dev/sdb   미 파티셔닝 상태로 8GB 디스크 입니다.  

root@TEST1:~# fdisk -l


Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x0004769e


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      616447      307200   83  Linux

/dev/sda2          616448     2713599     1048576   82  Linux swap / Solaris

/dev/sda3         2713600    16777215     7031808   83  Linux


Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x6682c1f3


   Device Boot      Start         End      Blocks   Id  System



2) n 눌러서 8GB 통으로 파티션 만들어 주고 Type 변경 

= PV 생성 준비 완료! ( 초급 학습이므로 단일디스크 사용합니다 ) 

= fdisk 종료하기 전 w 로 싱크하는거 잊지 마시구요. 


Command (m for help): t

Selected partition 1

Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p


Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x6682c1f3


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    16777215     8387584   8e  Linux LVM


PV 생성 완료!


3) PV 지정

= 단일디스크라 별다른 옵션 줄 게 없습니다. 만듭시다!

= 생성 후 확인은 pvs (간략 ) 와 pvdisplay ( 상세 )  두 가지 명령어가 있습니다. 

   vg, lv 도 똑같이 있으니, 활용해주세요. 

형식) pvcreate PV이름

root@TEST1:~# pvcreate /dev/sdb1

  Physical volume "/dev/sdb1" successfully created.


root@TEST1:~# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sdb1     lvm2 ---  <8.00g <8.00g

root@TEST1:~# pvdisplay
  "/dev/sdb1" is a new physical volume of "<8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <8.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               H5G2FT-10IQ-VZwq-QZh7-gdnR-LhNN-6VMFgX

이제 LVM 용도로 사용할 디스크 하나가 준비가 완료되었습니다.


4) VG 생성

PV 의 용량만큼 VG를 생성하거나, 여러 PV모아 그룹화할 수도 있습니다.

지금은 PV 를 그대로 VG로 만듭니다. 

조건에 VG Name 이 있는데 VG부터는 Name 이 필요합니다. 

PE 조건도 있는데 --help 옵션으로 보시면 -s 옵션이 PE(=블럭)크기 지정입니다.

 형식) vgcreate 만들VG이름 PV ...  옵션..

 [ -s|--physicalextentsize Size[m|UNIT] ]

root@TEST1:~# vgcreate vg01 /dev/sdb1 -s 20M

  Volume group "vg01" successfully created

root@TEST1:~# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg01   1   0   0 wz--n- <7.99g <7.99g

root@TEST1:~# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <7.99 GiB
  PE Size               20.00 MiB
  Total PE              409
  Alloc PE / Size       0 / 0
  Free  PE / Size       409 / <7.99 GiB
  VG UUID               BwpXMG-oVag-8zgT-IBZg-Ctw2-3mR7-CvdDrp


5) LV 생성

이제 VG 에서 LV 만 파티션화해서 Mount 하면 실제 LVM 파티션 사용하는 겁니다.

만들 LV 용량을 지정해야 하는데 블럭단위니까 PE*수량 만큼 -l 옵션으로 지정해도 되고, 대문자 -L 10G 같은 식으로 직접 용량을 지정할 수도 있습니다.

위에도 적었지만 LV의 용량은 VG 를 넘어설 수 없습니다. 

형식) lvcreate -L|--size Size[m|UNIT] VG  ( -l 소문자일 경우 PE 수량 )

LV Name 이 조건에 있기 때문에 -n 만들LV이름  을 부가옵션으로 줍시다.


root@TEST1:~# lvcreate -l 50 vg01 -n lv01     PE 50개만큼의 용량

  Logical volume "lv01" created.


root@TEST1:~# lvs

  LV   VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  lv01 vg01 -wi-a----- 1000.00m    PE가 20MB 이므로 * 50 = 1000M


root@TEST1:~# lvdisplay

  --- Logical volume ---

  LV Path                /dev/vg01/lv01             중요. 실제 Mount Point.

  LV Name                lv01

  VG Name                vg01

  LV UUID                TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm

  LV Write Access        read/write

  LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900

  LV Status              available

  # open                 0

  LV Size                1000.00 MiB

  Current LE             50

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     8192

  Block device           253:0



6) 마운트

LV Path 를 마운트해야 합니다 fdisk 로 보이는 mapper 는 마운트가 안됩니다 ;;

lvdisplay 는 아무리봐도 안질리니까 꼭 100번 보세요.

문제 조건에 /mnt/lvm 에 마운트하라고 했으니 디렉토리를 만들어 줍니다.

마운트 전에 조건에 있는 EXT3 형식으로 포맷해줘야 마운트 됩니다. 

root@TEST1:~# lvdisplay

  --- Logical volume ---

  LV Path                /dev/vg01/lv01

  LV Name                lv01

  VG Name                vg01

  LV UUID                TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm

  LV Write Access        read/write

  LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900

  LV Status              available

  # open                 0

  LV Size                1000.00 MiB

  Current LE             50

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     8192

  Block device           253:0


root@TEST1:~# mkdir -p /mnt/lvm

root@TEST1:~# mkfs.ext3 /dev/vg01/lv01

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

64000 inodes, 256000 blocks

12800 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=264241152

8 block groups

32768 blocks per group, 32768 fragments per group

8000 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376


Allocating group tables: done

Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done


root@TEST1:~# mount /dev/vg01/lv01 /mnt/lvm

root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  969M  1.3M  918M   1% /mnt/lvm


마운트가 완료 되었습니다.


7) 부팅시 자동 마운트

LV_PATH 로 /etc/fstab 에 추가. ( 틀리면 부팅안되니까 꼭 재부팅해서 확인해보세요 ) 

root@TEST1:~# vi /etc/fstab


/dev/vg01/lv01                  /mnt/lvm                ext3    defaults        0 0

~


8) 용량을 70PE 로 확장

lvextend 라는 명령어가 있습니다.  create 때랑 똑같아요.

-l PE 수 만큼 입력해주면 됩니다

df 쳐보면 실시간 반영은 안되므로 파일시스템의 리사이징 명령을 내려줘야 합니다.

( EX : xfs 인 경우 xfs_grown LV_PATH 치면 즉시 반영.  ext 시스템은 resize2fs LV_PATH ) 

root@TEST1:~# lvextend -l 70 /dev/vg01/lv01

  Size of logical volume vg01/lv01 changed from 1000.00 MiB (50 extents) to <1.37 GiB (70 extents).

  Logical volume vg01/lv01 successfully resized.


root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  969M  1.3M  918M   1% /mnt/lvm

용량이 1기가에서 그대로 안늘어나있음 


root@TEST1:~# resize2fs /dev/vg01/lv01     // 파일시스템에서 리사이징 체크

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/vg01/lv01 is mounted on /mnt/lvm; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/vg01/lv01 is now 358400 blocks long.


root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  1.4G  1.5M  1.3G   1% /mnt/lvm

정상적으로 늘어난 것 확인. 


9) 용량을 60PE 로 감소

TIP) XFS 파일시스템으로 되어있는 LV는 용량 축소가 안됩니다....

lvextend 다음에는 lvreduce 라는 명령이 있습니다. 줄여줍시다..

reduce 는 주의해야 할 점이 많습니다

1) 반드시 먼저 파일시스템에서 먼저 리사이징으로 줄여줍니다.

lv부터 줄이면 데이터 날아갑니다. 

( /etc/lvm/backup 이용한 복원이 가능하지만 RHCSA 의 영역이 아님 ) 

2) lvreduce 사용 전 반드시 umount 해야 합니다.

3) lvreduce 옵션에 -r ( resize ) 옵션을 꼭 주세요. 안주면 무조건 DATA Loss물어봄.

4) 용량 감소는 가급적 PE 보다 실용량 ( -L ) 으로 하는게 좋습니다. 


ex)

umount /dev/vg01/lv01 또는 /mnt/lvm

resize2fs -f /dev/vg01/lv01 1000M       파일 시스템 사이즈를 1000M 으로 변경

lvreduce -r -L -500M /dev/vg01/lv01    LVM 에서 실제로 변경. ( 1500 --> 1000 )



root@TEST1:~# lvreduce -r -l 60 /dev/vg01/lv01

  WARNING: Reducing active and open logical volume to 1.17 GiB.

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg01/lv01? [y/n]:

umount 안하면 저런 DATA DESTROY 라는 무시무시한 상황이 발생!! 

다만 시험에선 데이터 필요없으니까 그냥 해도 됩니다.  ㅎ



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


요즘 대부분 tar + 압축을 섞어서 .tar.gz 방식을 많이 씁니다만..

bzip2 과 star 방식도 간략하게만 알아보겠습니다.

( 시험에 나왔다는 소리 못들어봤습니다 ) 


1) tar로 묶고 gzip 으로 압축 

=  cvzf 옵션 자체를 그냥 달달 외워도 무방합니다. 


c = 만든다

v = 과정을 보여준다

z = gzip 사용 ( 압축 안 하려면 해당 옵션 빼면 됩니다 ) 

f = Archive 사용

root@TEST1:~# tar cvzf test.tar.gz ./a.txt ./b.txt

./a.txt

./b.txt


root@TEST1:~# ll
-rw-r--r--  1 root root      0 Apr 16 16:02 a.txt
-rw-r--r--  1 root root     38 Apr 16 16:05 b.txt
-rw-r--r--  1 root root    167 Apr 17 13:39 test.tar.gz


2) 임의의 경로에 압축 해제

= c 대신 x 옵션 = xvzf ,  xvjf   

C [PATH] : 압축을 풀 경로 지정

root@TEST1:~# tar xvzf test.tar.gz -C /home/test

./a.txt

./b.txt


root@TEST1:~# ls -l /home/test

total 4

-rw-r--r-- 1 root root  0 Apr 16 16:02 a.txt

-rw-r--r-- 1 root root 38 Apr 16 16:05 b.txt



3) tar 로 묶고 bzip2 를 이용한 압축 = cvjf 

z(gzip) 을 j(bzip2) 옵션으로 바꿔줌. 

root@TEST1:~# tar cvjf test.tar.bz2 ./a.txt ./b.txt

./a.txt

./b.txt


root@TEST1:~# ll

total 368

-rw-r--r--  1 root root    171 Apr 17 13:45 test.tar.bz2



4. star 를 이용한 archieve.

Description

Star is a very fast tar(1) like tape archiver with improved functionality.

라고 적혀는 있지만, tar가 편하고, 대용량, 고속 시대에서 약간의 성능이 범용성을 넘어설 수 있는지는 좀 부정적.

옵션은 기본적으로 동일하게 줄 수 있고, yum -y install star 로 별도 설치를 해줘야 합니다.




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,




su 를 이용하여 쉘 내에서 사용자 전환이 자유롭게 가능합니다.

단 /bin/false 또는 /sbin/nologin 설정이 되어있는 사용자로의 변환은 안됩니다.


그리고 su root 랑 su - 랑 차이가 뭔지 궁금하신 분이 있는데

사용자 변환과, 사용자 환경변수까지 변환의 차이라고 대충 생각해두시면 됩니다

가령 su root 는 root 로 변환은 되지만 $home/.bash_profile 의 환경변수를 불러오지 않습니다.


하지만 su - 계정명 은 완벽하게 해당 계정 환경으로 이동합니다.

root@TEST1:~# su test

sh-4.2$ whoami

test

sh-4.2$

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,




Key 를 이용한 SSH 무인증 접속은 별도의 페이지에서 다루도록 하고

금번 장은, SSH 명령어를 이용한 간단한 원격 접근방법입니다.



1) SSH Account@IP 를 이용한 접속

- root 가 sshd config 에서 Permit 허용이 되어있지 않다면 일반계정 필요.

[root@NAT ~]$ ssh root@192.168.0.3

root@192.168.0.3's password:

Last login: Wed Apr 17 09:48:36 2019 from 192.168.0.115


//////////////////////////////////////////////////////////////////////////////

RHCSA Exam Test Private Server #01

IP : 192.168.0.3

SUBNET : 255.255.255.0

GATEWAY : 192.168.0.2


SNAT

IP : 210.90.167.135 : 8822

GUI Graphics Server

yum install xorg* gnome*

startx or init 5.

//////////////////////////////////////////////////////////////////////////////

[root@192.168.0.3]$ 


2) /etc/hosts 에 Hostname 매칭이 되어있다면 hostname 으로도 접근 가능.

root@NAT:~# cat /etc/hosts

192.168.0.3 TEST1

root@NAT:~# ssh root@TEST1

The authenticity of host 'test1 (192.168.0.3)' can't be established.

ECDSA key fingerprint is SHA256:atlcg+nHLC2TVL3vDZhq9RvYEMI14NwjcHzTuLWMF9s.

ECDSA key fingerprint is MD5:71:a0:95:6a:1f:c3:f5:7f:87:63:64:ef:4c:e0:c9:f9.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'test1' (ECDSA) to the list of known hosts.

root@test1's password:

Last login: Wed Apr 17 09:50:10 2019 from gateway



3) -p 옵션을 사용하여 SSH Port 가 다른 경우 접근 가능.

root@Web1:~# ssh -p 8822 root@210.90.167.135

root@210.90.167.135's password:

Last failed login: Wed Apr 17 10:00:02 KST 2019 from 210.90.167.135 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Wed Apr 17 09:55:08 2019 from gateway


//////////////////////////////////////////////////////////////////////////////

RHCSA Exam Test Private Server #01


IP : 192.168.0.3

SUBNET : 255.255.255.0

GATEWAY : 192.168.0.2




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,