초기 mysql root 패스워드 설정 및 비번 변경과 root 비번 잃어버렸을 경우 변경 하는방법


1. 초기 mysql root 패스워드 설정하기

mysql 서버에 패스워드 없이 로그인 하게되면 서버에 만들어진 데이터베이스나 테이블
기타 이곳에 저장된 자료가 외부인에게 노출될 수 있다. 따라서 이러한 보안을 목적으로
root 패스워드를 지정하면 mysql 서버를 안전하게 보호할 수 있다.

mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges; <--- 적용
flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.
확인한다.
mysql> select host, user, password from user;
+----------------------------------------------------------------+
| Host user password |
+----------------------------------------------------------------+
| localhost root 2e01146f5c065853 |
| localhost.localdomain root 2e01146f5c065853 |
+----------------------------------------------------------------+

mysql> \q
Bye
------------------------------------------------------------------------------------
[주의]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
그대는 mysql 을 shutdown 하거나 reload 하면 된다.
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown
하면 패스워드를 묻는데 이때 입력하면 설정한 mysql이 적용이된다.
# /usr/local/mysql/bin/mysqladmin -u root -p reload;
------------------------------------------------------------------------------------

# mysql -u root -p [Enter] // root 패스워드로 로그인
Enter password: ******

※ Mysql 서버에 root 패스워드가 설정되면 이제 부터는 mysql 서버에 접속하기 위해서는
위와 같이 -u 뒤에 root입력하고 -p 옵션을 사용하여 패스워드를 사용한다는 것을 명시해야 한다.
그리고 엔터를 치면 root 패스워드를 입력받기 위해 커서가 멈춘다.
(mysql 명령어만 입력하고 엔터를 치면 패스워드를 묻지 앟고 바로 mysql> 프롬프트가 나온 옛 시절을 생각해 보면 금방 차이를 느낄수 있음)

2. 루트 비번 변경

mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
mysql> flush privileges;

3. root 패스워드를 분실한 경우(응급조치)

mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다. 시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.

① 실행중인 msyql 종료

# ps -ef | grep mysqld
root 9567 1 0 Mar16 ? 00:00:00 sh ./mysqld_safe
root 9576 9567 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9578 9576 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9579 9578 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld

# killall mysqld

② grant-table 미사용모드로 mysql시작(권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

nt일 경우 :
c:\program files\mysql\mysql server 4.1\bin>mysqld-nt --standalone --skip-grant-tables
만약 Error 2003 Hy000 Can't connect to MySQL server on 'localhost' 와 같은 메세지가 나온다면

c:\program files\mysql\mysql server 4.1\bin>mysqld --defaults-file="c:\program files\mysql\mysql server 4.1\my.ini" --consol --skip-grant-tables
따로 프롬프트는 떨어지지 않으므로 새로 cmd창을 열어서 접속해 본다.


# ./safe_mysqld --skip-grant-tables &
[1] 12084
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ./mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>

※ mysqld_safe 명령어는 mysql 데몬을 실행시킨다.

③ update문으로 root사용자 패스워드 갱신

mysql> update user set password=password('123') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> \q
Bye

④ 실행중인 mysql 다시 종료(권한 테이블을 사용하지 않는 데몬을 종료)

# ps -ef | grep mysqld
root 12084 11558 0 20:10 pts/2 00:00:00 sh ./mysqld_safe --skip-grant-ta
root 12090 12084 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12092 12090 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12093 12092 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
#
# killall mysqld
mysqld daemon ended
[1]+ Done ./mysqld_safe --skip-grant-tables
#

⑤ Mysql 데몬 재 실행 후 갱신된 패스워드로 로그인

# ./safe_mysqld &
[1] 12102
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ps -ef | grep mysql
root 12102 11558 0 20:13 pts/2 00:00:00 sh ./mysqld_safe
root 12108 12102 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12110 12108 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12111 12110 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld

# mysql -u root -p
Enter Password: *************** 


dig (domain information groper) 는 DNS 네임서버에 쿼리를 날리기위한 유용한 툴이다.
DNS lookup 과 쿼리를 보낸 네임서버로부터 돌아오는 응답을 출력해준다.

대부분의 DNS 관리자들은 DNS장애 시 troubleshoot 를 위해 dig를 사용한다.
이유는 dig의 유연하고 편리하기 때문이다.

보통 dig는 명령어라인 인자들과 함께 사용한다.

dig 사용 시 name server 를 명시하지 않으면 /etc/resolv.conf 파일에 명시된
리스트로 쿼리를 보낸다.

사용법은 다음과 같다.

dig @server name type

[server]
네임서버의 아이피 또는 도메인을 명시한다.
IPv4는 dotted-decimal(.)을 사용하고 IPv6는 colon-delimited(:)을 사용한다.

[name]
도메인을 명시한다.

[type]
ANY, A, MX, SIG, 기타.. 를 명시한다.
명시하지 않을 경우 기본적으로 A레코드를 출력한다.

< 예제 >

// 도메인 조회
[root@assa root]# dig @168.126.63.1 sysadm.kr ANY

; <<>> DiG 9.2.1 <<>> @168.126.63.1 sysadm.kr ANY
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65437
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;domain.net. IN ANY

;; ANSWER SECTION:
domain.net. 172800 IN NS ns.domain.net.

;; AUTHORITY SECTION:
domain.net. 172800 IN NS ns.domain.net.

;; ADDITIONAL SECTION:
ns.domain.net. 172800 IN A 192.168.1.100

;; Query time: 3080 msec
;; SERVER: 168.126.63.1#53(168.126.63.1)
;; WHEN: Sat Mar 29 11:01:07 2003
;; MSG SIZE rcvd: 134

// Reverse lookup(역방향 조회)
[root@assa root]# dig @168.126.63.1 -x 192.168.10.1 ANY
; <<>> DiG 9.2.1 <<>> @168.126.63.1 -x 192.168.10.1 ANY
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61892
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;1.10.168.192.in-addr.arpa. IN ANY

;; AUTHORITY SECTION:
1.10.168.192.in-addr.arpa. 600 IN SOA ns.domain.net. root.ns.domain.net. 2003021922 28800 14400 3600000 86400 



. server : 확인하고자 하는 DNS 서버의 domain 이나 IP 를 넣어주면 됨
2. query type 에 올수 있는것
– a – 네트워크 주소를 의미
– any – 지정한 도메인의 모든 정보를 의미
– mx – 지정한 도메인의 메일서버 정보를 의미
– ns – 네임서버를 의미
– soa – soa 정보를 의미
– hihfo – HINFO 레코드에 대한 정보를 의미

3. query-class : 확인하고자 하는 도메인

4. DIG는 쿼리에 대한 결과를 ANSWER SECTION에, 해당 도메인의 인증을 갖는 네임서버 정보를 AUTHORITY SECTION에, 그리고, 글루레코드 등이 있을 경우 그에대한 정보를 ADDITIONAL SECTION에 출력하여 준다.

출처 : http://sasuke.tistory.com/162?srchid=BR1http%3A%2F%2Fsasuke.tistory.com%2F162

'Works > CentOS & RockyLinux' 카테고리의 다른 글

CentOS7 Locale설정  (0) 2018.05.29
SFTP log 설정  (0) 2018.02.22
크론테이블에 등록 : crontab -e  (0) 2017.09.22
centos7 고정 ip 설정  (0) 2017.09.13
리눅스에서 tcpdump 명령어의 옵션 정리  (0) 2017.06.20


<권한설정>

grant all privileges on 디비명.테이블명 to 사용자@'접속지 주소' identified by '암호' (with grant option);

grant all privileges on *.* to  root@'%' identified by '암호with grant option;
grant all privileges on *.* to  root@'localhost' identified by '암호with grant option;

<권한 제거>
revoke all on 디비명.테이블명 from 사용자;

<권한 적용>
# 모든 명령 후에 항상 아래 명령을 실행해야 실제로 적용된다. 
flush privileges; 



<기타>
# '사용자'가 '암호'으로 111.222.333.0/24 에서 모든 디비와 테이블에 접속하도록 허용
grant all privileges on *.* to  사용자 @'111.222.333.%' identified by '암호';

# '사용자'가 '암호'으로 111.222.333.444 에서 db1 디비의 모든 테이블에 접속하도록 허용
grant all privileges on db1.* to 사용자@'111.222.333.444' identified by '암호';

# '사용자'가 '암호'으로  localhost 에서 db1 디비의 table1에 접속하도록 허용
grant all privileges on db1.table1 to 사용자@'localhost' identified by '암호';

[출처] http://ir.bagesoft.com/675


크론테이블에 등록 : crontab -e
■ cron

- 명령은 지정된 날짜와 시간에 일정 작업을 주기적으로 수행하기 위해 사용되며 각 사용자별로 /var/spool/cron/crontabs 디렉토리에 사용자 ID와 같은 이름의 crontab 화일을 만들어 cron job을 지정할 수 있다
- cron 명령은 시스템이 부팅되면서 /etc/rc2.d/S75cron 스크립트에 의해서 daemon 형태로 수행된다


■ 형식 : crontab -e

분  시  일  월  요일   실행할 명령

   분 : 0-59
   시 : 0-23
   일 : 1-31
   월 : 1-12
   요일 : 0-6( 0: 일요일)


■ 옵션

crontab -e : 작업할 내용 작성하기
crontab -l : 현재 설정되어 있는 작업내용 보기
crontab -r : 설정되어 있는 작업을 모두 삭제하기


■ 예제

ex1) 1일부터 15일 까지로 날짜를 지정하고 싶을 땐 다음과 같이 하이픈을 이용할 수 있다
0   1   1-15     *   *   [명령]
분, 시, 날, 달, 요일, 모두 적용할 수 있다

ex2) 1일과 7일 15일에 cron을 작동시킬 땐 콤마를 이용하면 된다
0   1  1,7,15    *   *   [명령]
분, 시, 날, 달, 요일, 모두 적용할 수 있다

ex3) 매 5일 마다 실행하고 싶을 땐 슬래쉬(/)를 이용한면 된다
0   1   /5   *   *   [명령]
분, 시, 날, 달, 요일, 모두 적용할 수 있다
/ 안해줘도 달이 *로 표현되어 있어서 매달 실행된다. 하지만 좋은 습관을 들이기 위해..


 

ex4) 매주 일요일 오전 3:15에 /var 디렉토리에 있는 core 화일을 지우는 작업
15 3 * * 0 find /var -name core 2>/dev/null |  xargs rm -f


ex5) 매월 1일 오후 6시에 시스템 down message 보내기
0 18 1 * * wall "System Will be down"


■ Access 제한

- /etc/cron.d/cron.allow 파일이나 /etc/cron.d/cron.deny 화일을 이용하여 시스템 관리자는 각 사용자별로 crontab 파일에 대한 Access 권한을 제한 할 수 있다
 * crontab을 access 할 수 있는 사용자

   - /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 파일 안에 지정된 사용자
   - /etc/cron.d/cron.allow 화일이 없는 경우 : /etc/cron.d/cron.deny 파일 안에 지정되지 않은 사용자
       
 * crontab을 access 할 수 없는 사용자

   - /etc/cron.d/cron.allow 파일이 존재하는 경우 : 그 파일 않에 지정되지 않은 사용자
   - /etc/cron.d/cron.allow 파일이 없는 경우 : /etc/cron.d/cron.deny 파일에 지정된 사용자
   - /etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 파일이 모두 없는 경우 : root를 제외한 모든 사용자
  
- OS가 설치되면 기본적으로 /etc/cron.d/cron.deny이 생성되고 그 안에 아래의 사용자들이 지정된다
daemon
bin
smtp
nuucp
listen
nobody
noaccess

/etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일에 사용자를 지정할 때는 위와 같이 한줄에 한명씩 사용자를 지정한다.


0 4 1,10 * * 명령1

위 처럼 crontab을 편집하면 매월 1일과 10일 4시에 명령1을 실행한다는 의미이다. 또
0 4 1-10 * * 명령2

위처럼 crontab을 편집하면 매월 1일부터 10일동안 매일 명령2를 실행한다는 의미이다. 그리고

0 4 */5 * * 명령3

라고 편집하면 매 5일마다 실행한다는 것으로 1일, 6일, 11일 등과 같이 5일 간격으로 실행한다는 의미이다.
그리고 그 외에 root 권한으로 다른 사용자의 crontab 파일을 편집하기 위해서는 다음과 같이 명령하면 된다.

crontab -u user -e
[출처] Cron|작성자 지우개



출처: http://annehouse.tistory.com/390 [초록지붕의 앤]

'Works > CentOS & RockyLinux' 카테고리의 다른 글

SFTP log 설정  (0) 2018.02.22
dig 개념 및 사용법  (0) 2017.11.01
centos7 고정 ip 설정  (0) 2017.09.13
리눅스에서 tcpdump 명령어의 옵션 정리  (0) 2017.06.20
유용한 find 명령어 응용모음.  (0) 2017.06.09


 

centos 7 고정 ip 


/etc/sysconfig/network-scripts/ifcfg-xxxxx 파일

############# dhcp-config ############

#TYPE=Ethernet

#BOOTPROTO=dhcp

#DEFROUTE=yes

#PEERDNS=yes

#PEERROUTES=yes

#IPV4_FAILURE_FATAL=no

#IPV6INIT=yes

#IPV6_AUTOCONF=yes

#IPV6_DEFROUTE=yes

#IPV6_PEERDNS=yes

#IPV6_PEERROUTES=yes

#IPV6_FAILURE_FATAL=no

#NAME=eno16777736

#UUID=d41562bc-ed43-4426-b395-e519468318a1

#DEVICE=eno16777736

#ONBOOT=yes


############### static-config #######

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

NAME=eno16777736

UUID=xxxxxxxxxxxxxxxxxxxxxxxxxx

DEVICE=eno16777736

ONBOOT=yes

IPADDR=192.168.233.xxx

NETMASK=255.255.255.0

GATEWAY=xxx.xxx.xxx.x

DNS1=168.126.63.1

DNS2=8.8.8.8

USERCTL=no

NM_CONTROLLED=yes




HWADDR=xx:xx:xx:xx:xx:xx : 맥주소 입력

TYPE= Ethernet : 이더넷 인터페이스의 종류

BOOTPROTO=static : ip할당 방식

static : 고정 아이피 할당

dhcp : 유동 아이피 할당

bootp : dhcp 이전에 사용하던 방식

none : 사용안함

DEFROUTE=yes : 디폴트라우트 사용 여부

PEERDNS=yes : dhcp 서버의 dns정보를 /etc/resolv.conf에 저장 여부

PEERROUTES=yes : dhcp 서버의 라우터 정보를 /etc/sysconfig/network에 저장 여부

IPV4_FAILURE_FATAL=yes : 설정이 잘 안됬을 때 IPv6 사용 여부(yes면 사용하지 않고 no면 사용)

IPV6INIT=yes : IPv6 사용 여부

NAME=enp0s3 : GUI 네트워크 설정 때 보이는 NIC 이름

ONBOOT=yes : 부팅시 자동 활성화 여부

BROADCAST= : 브로드캐스트 주소

IPADDR= : 아이피주소

NETMASK= : 넷마스크 주소

NETWORK= : 네트워크 주소

GATEWAY= : 게이트웨이 주소

DNS1= : DNS주소

DNS2= : DNS주소

USERCTL=no : 일반 사용자가 수정 할 수 있는지에 대한 여부

NM_CONTROLLED=yes : 네트워크 관리도구사용 여부



출처: http://flyyunha.tistory.com/entry/centos7-고정-ip-설정 [Get your Dream]


PHP 에 GeoIP 를 사용할 경우 확장 모듈을 설치 하는 방법 입니다.

http://pecl.php.net/package/geoip

[root@yongbok ~]# cd /usr/local/src

[root@yongbok ~]# wget http://pecl.php.net/get/geoip-1.0.7.tgz

[root@yongbok ~]# wget http://pecl.php.net/get/geoip-1.1.1.tgz    (php7 이상일 경우) // 1.1.1 버전은 베타이긴 하나 작동에 이상은 없었다.

[root@yongbok ~]# tar xzvf geoip-1.0.7.tgz

[root@yongbok ~]# cd geoip-1.0.7

[root@yongbok ~]# /usr/local/php5/bin/phpize

[root@yongbok ~]# ./configure --with-php-config=/usr/local/php5/bin/php-config --with-geoip=/usr/local

[root@yongbok ~]# make ; make install

Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/

php.ini 파일에 GeoIP 구문 추가

[root@yongbok ~]# vi /usr/local/apache2/conf/php.ini
[GeoIP]
extension_dir=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
extension = geoip.so
geoip.custom_directory=/usr/local/share/GeoIP (GeoIP.dat 파일의 경로 정의, 시스템마다 다를수 있음)

아파치 재시작
[root@yongbok ~]# /usr/local/apache2/bin/apachectl restart

phpinfo 로 확인
[root@yongbok ~]# echo '<?php phpinfo(); ?>'>/var/www/phpinfo.php


[출처] http://cy.cyworld.com/home/37141209/post/4BB719E61B15773CBD468401

[추가] php 에서 GeoIP 사용 샘플 (접속자 IP체크하여 국가코드 출력) // 2023. 1. 12 추가됨

<?php
geoip_setup_custom_directory('/home/your_account/');
$a = $_SERVER['REMOTE_ADDR'];
$country = geoip_country_code_by_name($a);
echo "Your IP : ".$a." [$country]";
?>

[설명] geoip_setup_custom_directory() 함수는 이미 php.ini 에 정의되어 있는데 소스코드에 별도로 정의하는 이유는

php.ini 에 정의된 geoip_setup_custom_directory 의 퍼미션이 other가 읽기권한이 없으면 국가코드가 NULL 로 

출력되는데 퍼미션 변경이 불가한 상황일 때 위 방법 (일반계정 내에 데이터 파일을 업로드 하고 경로 정의) 을

이용하면 문제 없이 국가코드가 출력된다.

'Works > 확장모듈설치매뉴얼' 카테고리의 다른 글

apache mod_proxy.so 컴파일 방법  (0) 2023.09.08
apache mod_unique_id module 추가  (0) 2023.04.20
Zend Guard Loader 설치  (0) 2017.05.17
APC 확장모듈 설치  (0) 2017.04.26
freetds 확장모듈 설치  (0) 2016.09.27


이 프로그램은 이미 오래 전에 나돌던 프로그램입니다.

아시는 분은 다 아실 프로그램 dezend 입니다.

젠드엔코더로 암호화된 젠드 엔코더파일을 디코더하는 프로그램으로 방법은 간단합니다.

압축해제해서 디코더할 PHP소스 파일을 해당폴더에 넣어 php.exe 파일에 끌어넣기만 하면 됩니다.

예를 들어 test.php 파일을 php.exe 파일에 끌어넣기 하면 test.de.php 파일로 디코더되어 생성됩니다.

Dezend Encoder.zip

[출처] http://blog.habonyphp.com/383#.WWNC2-S1uUn


HTML 태그 내용을 그대로 출력하기 위해서는

<pre>  </pre> 태그사이에 html 소스를 입력해 주면 된다.


[Wed May 01 23:28:43 2013] [warn] Invalid command 'CBandLimit', undefined virtualhost name
[Wed May 01 23:28:43 2013] [warn] Invalid command 'CBandPeriod', undefined virtualhost name
 
위의 로그가 아파치 재시작 또는 문법 검증시 나타난다면

아파치 가상 호스트 설정파일에 ServerName 지시자가 주석처리되어 있거나 정의되지 않는 항목이 있는지

전체적으로 점검해 보아야 한다. 특히 Warning 로그에 해당 라인번호가 명시되지 않으니

수동으로 다 확인해야 한다.



php.ini 설정에서 register_globals = on/off 차이점과 기능설명

rester_globals 를 On 으로 하면 변수가 get, post, session 변수인지 체크하지 않아도 됩니다. 
쓰기에 따라서 보안적인 부분에 문제가 생길 수 있습니다
 

register_globals = on
가능 -> $_POST['u_id']
가능 -> $u_id
 
register_globals = off
가능 -> $_POST['u_id']
불가능 -> $u_id  
* extrract()로 처리하면 가능

php.ini에서 register_globals=off 일경우 헤더나 인클루드를 이용해서 상단에
@extract($_GET);
@extract($_POST);
@extract($_SERVER);
@extract($_FILES);
@extract($_ENV);
@extract($_COOKIE);
@extract($_SESSION);
 
위와 같이 처리해 주면 기존 소스를 그대로 사용할 수 있다.
혹은 받아오는 변수의 전체코드를 다 써주면 됨
$HTTP_GET_VARS[변수] 또는 $_GET[변수]
$HTTP_POST_VARS[변수] 또는 $_POST[변수]
$HTTP_COOKIE_VARS[변수] 또는 $_COOKIE[변수]
$HTTP_SESSION_VARS[변수] 또는 $_SESSION[변수]
$HTTP_POST_FILES[변수] 또는 $_POST_FILES[변수]



출처: http://gocoding.tistory.com/156 [Developer Factory]

'Works > PHP' 카테고리의 다른 글

리눅스 대량의 파일 지우기  (0) 2017.11.20
Dezend Encoder  (0) 2017.07.10
sqlsrv 함수로 mssql 접속하는 테스트페이지  (0) 2017.03.29
php 퍼미션 관련 함수  (0) 2016.10.25
PHP 문자열 함수  (0) 2016.06.30