본문 바로가기
[Naver Cloud Camp 7] 교육 정리

네이버 클라우드 캠프 5일차 230428

by 우기37 2023. 4. 28.

#1 교육 리뷰

오늘의 핵심 주제는 관리자로서 사용자, 권환(소유권, 허가권)을 관리하기를 학습하였습니다.

그리고 Ubuntu_Linux를 초기상태로 설치해서 이미지 내보내기 -> 가져오기

기본 패키지 설정 + 환경설정 후 내보내기 -> 가져오기

 

 

 

#2 사용자 관리

system을 사용할 수 있는 권한

시스템에서 일정공간을 할당 받아 계정이 허락하는 권한을 행사할 수 있다.

 

adduser k1 : k1 user 를 생성하기

passwd k1 : k1 사용자의 비밀번호 지정

 

ls /home : 생성된 user 보기

who : login 중인 모든 사용자 확인

 

whoami : 나는 누구인가?

 

w : login한 user가 뭐하는 중인지?

 

finger k3 : k3 사용자의 정보 확인 // finger 명령어가 없으면 yum -y install finger 해서 설치 후 실행

 

chfn k3 : k3 사용자의 정보 변경 // /etc/passwd/ 파일이 변경됨

 

chage -l k3 : 사용자 기타정보 확인 shadow 파일 관련

 

tail -5 /etc/passwd : 밑에서 5줄 사용자 목록 확인

 

usermod -L ace : ace user에게 LOCK을 건다

 

usermod -U ace : LOCK 해제

 

useradd -D : default 값 보기

 

Group)

 

groupadd BC : BC group 생성하기

 

nl /etc/group : 생성 확인

 

* 위와 같이 group 생성 확인을 해보면 이전에 생성했던 user도 생성시 자동으로 group이 지정됩니다.

 

groups k1 : k1계정이 속한 group 확인

단, BC 는 user로 생성이 아닌 group으로 생성하여 확인 불가

 

usermod -G BC k1 : k1계정의 그룹변경. /etc/group 파일을직접 편집해도 가능합니다.
groups k1 : 확인해보기

 

groupdel BC : BC group 삭제

 

 

 

사용자 용량제한)

버전마다 용량제한 방법이 다르므로 주의해서 아래와 같이 순서대로 진행해야 한다.

한번에 되지 않을때는 quotaon, quotaoff 를 하고 다시 시도.

 

quotaon

 

quoataoff

 

vi /etc/fstab // vi에 들어가서 /home 으로 찾으면 찾기 쉽습니다. defaults 뒤에 ,usrquota 입력 후 저장

 

 

mount -o remount /home
mount | grep /home

quotaoff -avug

quotacheck -avugm

repquota -a

quotaon -avug

 

edquota -t : 유예기간 설정하기

 

edquota -u ace : soft : 50M, hard : 60M로 설정 (50000, 60000)

 

 

repquota -a : 설정 확인하기

 

edquota -p ace j : ace를 j에 용량 복사하기 // <source-user> <target-users>..

 

 

 

소유권과 허가권)

보안과 관련하여 매우 중요한 부분이다.

어떻게 설정할 것인가는 신중히 생각하여 소유주를 변경하거나 소유그룹을 변경해서 권한을 바꿔 주어야 한다.

 

권한읽기

기호 숫자 의미
r 2 ^ 2 = 4 read only 읽기 권한.
w 2 ^ 1 = 2 write 권한 생성, 삭제, 수정할 수 있는 권한
x 2 ^ 0 = 1 file execute 실행권한, directory는 진입권한
- 0 권한 없음

 

3칸씩 끊어 읽어햐 하며, 읽어보면 .bashrc와 .profile 은 644

// .bash_history와 .mysql_history와 .viminfo는 600

// .local과 .ssh와 snap 은 700

// d5는 755

좀 더 이해가 되도록 아래 예시 표를 참고해주세요.

권한자 owner group other
d r w x  r w x  r - x
directory 4+2+1=7 4+2+1=7 4+0+1=5

 

 

 

소유권 변경)

 

디렉토리의 x는 집어넣을 수 있는 권한
디렉토리의 r은 둘러볼 수 있는 권한
디렉토리의 w는 만들고, 수정, 삭제할 수 있는 권한

 

먼저 c1, c2, c3 파일을 생성하였습니다.

 

touch c1
cal > c2
date >> c3

 

 

c2파일의 소유주에게 실행 권한 추가

 

chmod u=+x c2

 

c1 파일의 user, group, other 에세 실행 권한 추가

chmod +x c1

 

c2 파일의 read 권한 해제

chmod -r c2

 

c3 파일의 권한을 744로 변경

chmod 744 c3

 

sam과 sung useradd를 하고 아래와 같이 c1의 소유권자를 sam, 그룹소유권자를 sung으로 변경

chown sam:sung c1

 

 

 

umask)

umask란 사용자고 파일 생성시 자동으로 권한을 조정해 주는 값을 말합니다.

 

umask

 

umask -S : 현재 umask 값 보기

 

umask default 값
root 0022
user 0002
root에서 directory 를 만들 때 값
전체권한 7 7 7
umask 0 2 2
-  
  7 5 5
root에서 file을 만들 때
directory 7 5 5
umaks 1 1 1
-  
  6 4 4

 

umask 733 : 733으로 umask 값 변경

 

set uid : root는 당연히 passwd에 대한쓰기 권한을 가집니다. 또한 일반 사용자는 다른 사람의 비밀번호를 바꿀 수 없게 해야하므로 read 권한만 가져야 합니다. 하지만 이렇게 하면 일반 사용자도 자신의 비밀번호를 바꿀 수 있어야 한다는 문제가 발생합니다. 그래서 set uid 를 사용하면 잠시동안 root 아이디가 되어 자신의 passwd를 바꿀 수 있습니다.

 

s로 설정된 permission, 파일의 실행자와는 상관없이 원래 파일의 소유자 권한으로 동작합니다. /usr/bin/passwd  에서

-rwsr-xr-x 보면 권한이 이렇게 설정되어있습니다. 일반사용자가 자신의 password 를 변경하려고 passwd 명령을 내리면 그 순간 잠간 root의 권한으로 실행되는 것을 의미합니다.

 

ll /usr/bin/passwd

 

sticky bit : sticky bit 로 지정된 폴더에 있는 파일들은 주인과 관리자만 지울 수 있습니다.

예를 들어 /google 이라는 폴더에 snn 이라는 파일이 있습니다. google의 권한은 707이고, snn의 권한은 700 이라 하면 보통 snn을 지울 수 없다고 생각하기 쉽지만, 파일보다 폴더에 권한의 우선권이 있기 때문에 다른 사용자도 snn 파일을 지울 수 있습니다. 그런 경우를 방지하기 위하여 sticky bit를 사용합니다.

 

chmod 1777 c3 : 3자리 권한 앞에 1을 붙이며 이 권한은 폴더에만 가능합니다.

l

 

4000번 이상의소유권을 갖고 있는 파일을 보기

find / -perm -4000 -exec ls -al {} \;

 

 

 

파일 속성 변경)

 

cal > a

date > b

lsattr

chattr +i a

chattr +a b

lsattr

rm a

rm b

// error 가 발생합니다.

 

who >> a 

// error 가 발생합니다.

 

who >> b

// ok

 

chattr -i a

chattr -a b

lsattr

// 다시 변경 완료

 

 

 

#3 DataBase server

 

root에서 mysql 관리 및 사용)

adduser ace

 

passwd ace

 

apt -y install mysql-server : mysql 설치

 

mysql : 접속

 

mysql> select user(); 
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

 

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2023-04-28 09:03:49 |
+---------------------+

 

 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

 

use mysql

 

mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                         |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                   |
| innodb_table_stats                                   |
| password_history                                     |
| plugin                                               |
| procs_priv                                           |
| proxies_priv                                         |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version              |
| replication_group_member_actions                     |
| role_edges                                           |
| server_cost                                          |
| servers                                              |
| slave_master_info                                    |
| slave_relay_log_info                                 |
| slave_worker_info                                    |
| slow_log                                             |
| tables_priv                                          |
| time_zone                                            |
| time_zone_leap_second                                |
| time_zone_name                                       |
| time_zone_transition                                 |
| time_zone_transition_type                            |
| user                                                 |
+------------------------------------------------------+

 

mysql> select user, host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

 

mysql> alter user 'root'@'localhost' identified
    -> with mysql_native_password by 'jj';

 

mysql> flush privileges;

 

mysql> create user myace@localhost identified
    -> with mysql_native_password by 'jj';

 

mysql> grant all privileges on aceDB.* to myace@localhost;

 

mysql> select user, host from user;

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| myace            | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

 


mysql> select user, db from db;
+---------------+--------------------+
| user          | db                 |
+---------------+--------------------+
| myace         | aceDB              |
| mysql.session | performance_schema |
| mysql.sys     | sys                |
+---------------+--------------------+

 

mysql> flush privileges;

 

사용자가 mysql 계정 사용하기)

 

Duplicate Session 으로 ace 사용자 실행

 

$ mysql -u myace -p

 

password : jj 입력 후 엔터

 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+

 

mysql> create database aceDB;

 

mysql> use aceDB;
Database changed


mysql> show tables;
Empty set (0.00 sec)

mysql> create table Man(
    -> name char(20),
    -> age int);

mysql> insert into Man values("손흥민", 32);

mysql> insert into Man values("이강인", 22);

mysql> select * from Man;
+-----------+------+
| name      | age  |
+-----------+------+
| 손흥민    |   32 |
| 이강인    |   22 |
+-----------+------+

 

 

 

#4 PS1 (프롬프트 변경하기)

 

vi /etc/skel/.bashrc

로 들어가서 아래와 같이 기존 PS1은 에러 방지를 위해 # 으로 묶어두고 새롭게 변경할 프롬프트 명령어 입력

 

작성 후 :wq (저장하고 나가기) 입력 후 터미널로 와서 아래 명령어를 입력하면 적용됩니다.

 

source /etc/skel/.bashrc