Linux - find 파일 찾기 명령어

1. 특정용량 이상되는 파일 찾기 (ex : 100 Mb)
find /* -size +100000k -exec ls -l {} \;

2. 특정 퍼미션 파일 찾기 (ex : 4755)

find /* -perm 4755 -exec la -l {} \;


3. 지정된 일자 이후에 변경된 모든 파일 찾기 (서버 보안점검시 사용, ex : 2일)

find /* -used 2 -exec ls -l {} \;

4. 특정디렉토리내에 존재하는 모든 디렉토리 목록만 확인하기
find /* -type d -print

5. PC내에 존재하는 모든 링크파일 검사하기(서버 보안점검시 사용)

find /* -type l -exec ls -l {} \;


6. 특정 문자열로 된 파일 찾기

find /* -name "*.php" -print | xargs egrep -rnoI "sms" | more

 

리눅스 권한주기


/home/linux

안에다 계정을 추가해서 linux1은 rwx로 linux2는 r-w로 linux3는 아무도 접근못하게

설정을 하려고 하는데요

group의 개념이 부족해서 인지 어려운것 같아요

어떤 명령어를 넣어야 하는지 답변좀 해주세요

 

 

질문자 채택

re: 리눅스 권한주기

 

 

 

몇가지 선행되어야 할 설명이 있어서 알려드립니다.

우선 그룹추가라는 명령어가 있습니다. test333으로 만들어보았습니다.

그룹이 추가되어 있는지 확인해보면 정상적으로 추가가 되었습니다.

[root@]# groupadd test333

[root@]# vi /etc/group

test333:x:517:


그럼 사용자를 추가해보는 것을 해봅니다.

[root@]# adduser addtest

[root@]# vipw

addtest:x:517:518::/home/addtest:/bin/bash

아무런 옵션을 주지않고 추가해보면 어떻게 될까요?

보통은 이렇게 됩니다.

설명하게 되면 사용자의 루트 디렉토리는 /home 디렉토리에 아래에 유저의 이름으로 된 디렉토리가 생기는 것으로 보면 돕니다.


하지만 질문자가 말씀해주시는 것은 /home/linux라는 폴더 아래에 주고자 합니다.


이러한 옵션은 -d로 추가 해줍니다.

즉 이런 형식을 거치게 됩니다.


useradd -d /home/linux/ linux1


즉 이렇게 하면, 원하시는 결과를 얻을 수 있습니다.

하지만 이미 이전에 linux라는 폴더를 만들어 줘야 겠죠...

추가해보기로 합니다.

[root@81 ~]# mkdir /home/linux

[root@81 ~]# useradd -d /home/linux/ linux1

useradd: warning: the home directory already exists.

Not copying any file from skel directory into it.

경고가 나옵니다. 사용자의 원래 디렉토리는 home 디렉토리 하단부터 시작되니까, 원래부터 있었다는 것이고,

스켈 디렉토리에 있는 어떠한 파일도 복사할 수 없었다는 경고가 나옵니다.

하지만 디렉토리 생성은 이뤄집니다.


[root@81 ~]# vipw

linux1:x:517:518::/home/linux/:/bin/bash

이렇게 보면 아까 말씀하신 것처럼 linux1이라는 사용자가 추가됩니다.


rwxrwxrwx 이런 권한을 알고 계셔야 합니다.

이거는 웨이트 코드랑 비슷하게 읽으시면 됩니다.

421 이런 순서입니다.

즉 한개의 덩어리를 rwx라고 보고 3개가 있게 되는데,

777 이런 식으로 계산하면 됩니다.

즉 이런 가중치가 owner(자기자신),group(그룹권한),other(다른 사용자) 이렇게 부여됩니다.

r = 읽기 w = 쓰기 x = 실행 입니다.

즉 앞에 숫자가 4가되면 읽을 수 있으며, 2가 되면 쓸 수 있으며, x는 실행할 수 있다는 이야기입니다.


다시 말해 linux3은 아무런 권한이 필요 없는 사용자라고 잡고, other0으로 주겠습니다.

그럼 두번째 말씀하신 것은 linux2r-w니가 5로 주겠습니다.

그리고 자기 자신은 모든것을 가지고 있어야 하니 당연히 7이겠죠.

그럼 폴더 권한을 그렇게 주면 됩니다.


[root@]# cd /home/

[root@home]# ls -al

drwxr-xr-x 2 root root 4096 Oct 29 15:37 linux


[root@home]# chmod 750 linux

[root@home]# ls -al

drwxr-x--- 2 root root 4096 Oct 29 15:37 linux


기본적인 권한 설정에 바뀌었습니다.

그렇다면, 중간에 root.root로 바뀐 것을 바꿔야겠죠....

아까의 명령어를 다시 기억해보겠습니다.


[root@home]# userdel linux1

다시 아까 사용자를 지워보겠습니다.


이제 그룹을 추가해보겠습니다.


[root@home]# groupadd linux2

[root@home]# useradd -d /home/linux/ -g linux2 linux1

Creating mailbox file: File exists

useradd: warning: the home directory already exists.

Not copying any file from skel directory into it.


아까 말한 경고가 뜨지만 다시 확인해보면 정상적으로 주어진 사실을 확인해볼 수 있습니다.

[root@home]# vipw

linux1:x:517:518::/home/linux/:/bin/bash

[root@home]# vi /etc/group

linux2:x:518:


제가 이걸 다시 설명해드린 것은 위에꺼랑 다른것을 참조해서 말씀드리기 위한 것입니다.

자세히 보시면 517 다음에 518이라고 생성되었으며 그건 그룹의 id518linux2의 그룹 소속으로 linux1이 생성된 것을 알려주는 것입니다.


linux2:x:518:

[root@81 home]# ls -al

drwxr-x--- 2 root root 4096 Oct 29 15:37 linux

그룹과 사용자를 모두 만들어 주었으니, 저기 root.root를 바꿔 봅니다.


[root@81 home]# chown linux1.linux2 linux

[root@81 home]# ls -al

drwxr-x--- 2 linux1 linux2 4096 Oct 29 15:37 linux


원하시는 데로 셋팅이 되었습니다.


요청을 하셨기 때문에 똑같이 해보기는 해보았지만, 보통 이렇게는 잘안씁니다.

일종의 편법이고, 디렉토리 관리하기 귀찮습니다.


쉽기는 하지만, 리눅스 기본에 충실하게 알려드리고자 설명이 길어졌습니다.



--------------------------------------------------------------------------------------------------------------------------------


디렉터리명, 사용자 명, 그룹명은 질문자가 원하는 것으로 답변되지 않을 수 있습니다.


사용자 추가 명령과 권한설정(permission)에 관련된 문제입니다.


모두가 동일한 그룹에 있을 때를 가정합니다.

(root 권한으로 해야 하는 것은 아시지요??)


우선 그룹하나를 추가합니다.

groupadd testlinux


그룹의 gid를 확인합니다.

cat /etc/group | grep testlinux


그 후 사용자를 추가해야겠지요??

(여기서 503은 조금 전 확인한 gid를 의미합니다.)


useradd -g 503 linux1

useradd -g 503 linux2

useradd -g 503 linux3


이제 홈 디렉터리로 이동합니다.

cd /home


linux1 디렉터리는 그룹에 대해 모든 권한을 가져야 한다고 했으니..

chmod 770 linux1


linux2 디렉터리는 그룹에 대해 r-x권한을 가져야 한다고 했으니..

chmod 750 linux2


linux3 디렉터리는 그룹에 대해 모든 권한이 없어야 한다고 했으니..

chmod 700 linux3


위와 같이 하시면 됩니다.




만약 /home/linux 하위에 해당디렉터리가 존재해야 한다면..

useradd 부분에서.. -d 옵션을 이용하여 별도 설정하셔야 합니다.


예를 들어..

useradd -g 503 -d /home/linux/linux1 linux1

과 같이 입력을 하면.. /home/linux/linux1 디렉터리가 linux1 사용자의 홈 디렉터리가 됩니다.

빠른 해결

1. sendmail이 설치되어 있는지, 작동하고 있는지 확인.

작동하지 않고 있다면, 재시작

[root@www spool]# rpm -qa |grep sendmail
sendmail-8.13.8-2.el5
sendmail-cf-8.13.8-2.el5
[root@www spool]# /etc/rc.d/init.d/sendmail stop
sendmail를 종료 중: [실패]
[root@www spool]# /etc/rc.d/init.d/sendmail start
sendmail (을)를 시작 중: [ OK ]
sm-client를 시작 중: [ OK ]

2. /var/spool/clientmqueue 파일 삭제시

rm -f /var/spool/clientmqueue/*

-------------------------------------------------------------------------------------------------------------------------------

smtp 가 sendmail을 하지 못할 경우 /var/spool/clientmqueue요기에 파일 이 쌓이게 된다.

따라서 주기적으로 지워주어야 루트가 100%되는 현상을 막을 수 있다.

cron에 아래의 커맨드를 입력해 주자.

30 08 25 * * /usr/bin/find /var/spool/clientmqueue -mtime +30 | xargs rm

--------------------------------------------------------------------------------------------------------


가끔씩 /var 쪽의 사용량이 90%를 넘기는 경우가 종종 있다..

시스템이 24시간 동안 가동되는 것이라서 이것저것들이 많이 생기는데, 주로 메일 발송 관련 항목들이 용량을 많이 잡아먹곤한다..

/var/spool 이란 폴더는 메일에 관련된 폴더 이므로, 확인해 주는 것이 좋다.

내가 /var 폴더의 용량을 확인하는 방법은,

# du -h --max-depth=2

/var에서 위의 명령어를 입력하면, /var 아래 2단계 하위 폴더까지의 용량을 KB, MB, GB 단위로 보여준다.

이중에서 용량을 가장 많이 차지하는 것을 적당히 삭제하면 되겠는데,

오늘 같은 경우에는 /var/spool/clientmqueue가 3.3G 중에 3.0G를 차지하고 있었다..

# ls | xargs rm -f

라는 명령어를 사용하여 파일을 다 지워주면 된다..ㅋ

물론 이 명령어는 /var/spool/clientmqueue에서 실행하여야한다.

아니면 이 폴더 자체를 날려버리고 새로 만들어도 상관은 없다.

# rm -rf /var/spool/clientmqueue

# mkdir /var/spool/clientmqueue

# chown smmsp:smmsp /var/spool/clientmqueue

이 명령어를 root 권한으로 실행하면 된다.

이것 확인이 귀찮다면, crontab에 등록하여서 자동으로 지워지게끔하는 방법도 있는데,

30 0 * * * /usr/bin/find /var/spool/clientmqueue -mtime +30 | xargs rm -f

항목을 등록하면 된다.

crontab에 등록하는 방법은 다음 기회에..^^



--------------------------------------------------------------------------------------------------------

/var/spool/clientmqueue 메일서버





2008/12/31 12:15

http://blog.naver.com/junix/80060652451



 



http://sial.org/howto/sendmail/

sendmail 과 같은 메일 중계 프로그램이 메일을 중계할때 sendmail은
첫번째로 /var/spool/clientmqueue 디렉토리에 모든 메시지를 복사한다.

sendmail 은 setgid smmsp 프로그램이여서 다른 사용자 권한을 ㅊㅇ /gives the any user the permission to do so
(/var/spool/clientmqueue smmsp 유저와 그룹에 속한다.)

나중에 다른 sendmail 프로세스가 sendmail localhost-only MTA 전송 메시지를
/var/spool/clientmqueue 에서 /var/spool/mqueue 로 복사하고 그것들의 목적지도 보낸다.

/var/spool/clientmqueue에서 파일이 쌓일때, 보통 sendmail localhost MTA 가 실행되지 않아
mail을 보내지 않는다.




SW개발자에게 웹어플리케이션의 보안부분은 항상 머리가 아픈 부분입니다.
웹어플리케이션의 보안이슈를 웹서버에서 차단가능한 방법이 있으면, SW개발자는 개발에 집중할 수 있겠죠.

오늘 취약점 점검툴을 이용해서 배포하려는 사이트를 분석해보니, 해결해야 하는 취약점의 숫자가 좀 많습니다. ㅡ.ㅡ
서버측에서 접근하는 패킷에 대한 룰셋을 적용하는 방법과, 개발한 소스코드를 보정하는 방법 중, 해당 서버의 전체 어플리케이션에 대해서 웹방화벽을 설치하기로 결정하고 ModSecurity 를 적용하기로 했습니다..

ModSecurity의 설치법에 대해서는 KISA 홈페이지 를 방문해보시면. 한글로 된 가이드가 있습니다.
소스코드 설치를 원하시면 위 링크에서 컴파일에 대한 과정을 설명한 내용을 참고하시기 바랍니다.

저는 최근에는 부득이한 경우를 제외하고는 소스컴파일을 하지 않고, 설치한 패키지에 대한 운영상의 편리함을 생각해서 가능하면 apt, yum, rpm 등의 설치방식을 사용합니다. ModSecurity를 설치할 수 있는 repository를 구글링해서 Yum repository를 찾아냈습니다. (원문 url : http://portugalcode.com/index.php?topic=2850.0;wap2)

How to install mod_security by yum(Redhat-Centos 5)

(1/1)

@Scroll:
1.Download the EPEL repo :

Código
GeSHi (bash):
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
Created by GeSHI 1.0.7.20

2.Then type the following command :

Código
GeSHi (bash):
yum install mod_security
Created by GeSHI 1.0.7.20

Note : Mod_security require liblua-5.1.so, If you don’t have this , it will throw an error while installing by yum.


Código
GeSHi (bash):
--> Processing Dependency: liblua-5.1.so for package: mod_security
--> Finished Dependency Resolution
mod_security-2.5.9-1.el5.i386 from epel has depsolving problems
--> Missing Dependency: liblua-5.1.so is needed by package mod_security-2.5.9- 1.el5.i386 (epel)
Error: Missing Dependency: liblua-5.1.so is needed by package mod_security-2.5.9 -1.el5.i386 (epel)
Created by GeSHI 1.0.7.20

Solution: You can download the rpm from this website

http://rpm.pbone.net/index.php3/stat/4/idpl/12580541/com/lua-5.1.4-1.i386.rpm.html

If your server complain you have installed already newer version then you can reinstall the installed version by using

Código
GeSHi (bash):
-bash-3.2# rpm -qa | grep lua
lua-5.1.4-1.el5.rf
-bash-3.2# rpm -e lua-5.1.4-1.el5.rf
-bash-3.2# rpm -Uvh lua-5.1.4-1.i386.rpm
Preparing… ########################################### [100%]
1:lua ########################################### [100%]

Created by GeSHI 1.0.7.20

Now type

Código
GeSHi (bash):
-bash-3.2# updatedb

-bash-3.2# locate liblua-5.1.so
/usr/lib/liblua-5.1.so

Created by GeSHI 1.0.7.20

So it shows that your server has the required file for it to install mod_security

Now run

Código
GeSHi (bash):
yum install mod_security
Created by GeSHI 1.0.7.20

It should installed now mod_security configuration files

/etc/httpd/conf.d/mod_security.conf – main configuration file for the mod_security Apache module.
/etc/httpd/modsecurity.d/ – all other configuration files for the mod_security Apache.
/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf – Configuration contained in this file should be customized for your specific requirements before deployment.
/var/log/httpd/modsec_debug.log – Use debug messages for debugging mod_security rules and other problems.
/var/log/httpd/modsec_audit.log – All requests that trigger a ModSecurity events (as detected) or a serer error are logged (”RelevantOnly”) are logged into this file.
After installing mod_security , Edit modsecurity_crs_10_config.conf file and make sure bellow line is enabled.

SecRuleEngine On

Now restart the httpd server by

Código
GeSHi (bash):
service httpd restart
Created by GeSHI 1.0.7.20

Check the /var/log/httpd/error_log for this lines
[Fri Aug 28 10:48:24 2009] [notice] ModSecurity for Apache/2.5.9 (http://www.mod security.org/) configured.

영문사이트는 아니지만 중요한 정보는 다 들어있으니 그대로 설치하기로 했습니다.

1) mod_security 설치
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
위 명령으로 epel repository가 잘 설치되었다면

yum install mod_security
를 실행합니다.

두어번 의존패키지 설치를 묻는데 y를 눌러주면 설치는 끝납니다.(너무쉽죠?)


2) 방화벽에서 사용할 룰셋의 생성
설치를 마쳣으면 아파치 환경설정 디렉토리안의 mod_security.conf 파일을 확인합니다..



방화벽에서 적용할 룰셋은 자신이 직접 만들어서 사용가능하지만, 일단은 KISA에서 배포하는 룰셋을 다운로드 받아서 사용하자.
룰셋 다운로드 : http://toolbox.krcert.or.kr/ > ModSecurity 자료실 > 차단샘플 룰 을 찾아서 다운로드.

다운받은 룰셋을 yum 설치시 생성된 디렉토리에 복사하자.
아래의 modsecurity_kisa.conf 파일이 다운로드 받은 룰셋이다.
룰셋의 설정에 대한 자세한설명은 KISA홈페이지를 이용하거나 파일내의 주석을 참고하자.







룰셋파일의 내용중(modsecurity_kisa.conf)
01 # 웹서버의 헤더 정보 변경<br>
02 # Apache 설정의 ServerTokens값이 Full로 설정되 있어야 함.<br>
03 SecServerSignature "Microsoft-IIS/5.0"<br>
04 <br># 아규먼트 구분자<br>
05 SecArgumentSeparator "&"<br>
06 <br># 다음의 메소드 이외에는 허용하지 않음.<br>
07 SecRule REQUEST_METHOD "(PUT|DELETE|TRACE)" "deny, log"<br>
08 <br>SecRequestBodyAccess Off<br>
09 SecResponseBodyAccess Off<br>
10 SecResponseBodyMimeType (null) text/html text/plain<br>
11 SecResponseBodyLimit 524288<br>
12 <br>#############################<br>
13 # 3. PHP 인젝션 취약 공격 방지(공개 게시판 솔루션 대상 공격 포함)<br>
14 SecRule REQUEST_URI "\.php" "chain, msg:'PHP Injection Attacks'"<br>
15 # dir|page 가 들어가 있으면서 https가 요청되는 경우가 fckeditor 에서 발생하기 때문에 수정<br>
16 SecRule REQUEST_URI "(dir|page|)" chain<br>
17 #SecRule REQUEST_URI "=(http|https|ftp)\:/"<br>
18 SecRule REQUEST_URI "=(https|ftp)\:/"<br>
19 SecRule REQUEST_URI "shell_exec\(" "msg:'PHP Injection Attacks'"<br>


참고) 저의 경우 RPM 패키지에서 제공되는 설정을 그대로 사용해서 kisa에서 배포하는 설정을 복사한 후 , 바로 룰셋을 적용하니 웹사이트가 열리지 않았습니다. 로그를 보면서 확인해본 결과
/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_50_outbound.conf 파일의 설정이 문제를 일으켰고.
이 파일을 제거하고 서비스에 적용했을때 이상없는 서비스가 가능했습니다.


3) 설치 후 적용 확인

설치 및 룰셋의 설정이 완료되었으면 제대로 동작하는지 확인합니다.

modsecurity 로그파일에 아래와 같은 로그가 남는경우
ModSecurity: Failed to access DBM file "E:/tmp/resource": The system cannot find the path specified

로그를 확인하니 오류메세지가 보여서 구글링한 결과
기본설치시 제공되는 modsecurity_crs_10.config.conf 의 설정에 아래의 내용을 추가해야 한다는것을 알았습니다.
웹서버가 접근가능한 경로를 하나 생성해서 아래와 같은 내용을 추가해주어야 한다.
vi /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf

SecUploadDir /var/www/tmp
SecDataDir /var/www/tmp
SecTmpDir /var/www/tmp

웹서버를 재시작하면 이제 방화벽이 작동하게 됩니다.

룰셋이 작동하는 상태를 확인하려면 환경설정파일에서 지정한 로그파일을 확인하면 됩니다.
다운받은 룰셋을 아무수정없이 사용하는경우라면 로그파일은 아파치설치디렉토리/logs/modsec_audit.log 에 남게 되고,
파일의 내용을 확인하면 아래처럼 룰셋이 작동되고 있는 상태가 보여집니다.
















지금까지는 룰셋이 작동되기는 하지만, 차단시키지 않고 있는 상태입니다.
정상적인 작동여부를 확인하고, 자신이 원하는 형태로 룰셋이 적용되는것을 확인한 후, 반드시 환경설정파일에서 pass 부분을 deny 로 변경해야 차단이 시작됩니다.

방화벽을 적용했더니 작동안되는 부분이 있다면 항의가 많겠죠? 실 서버에 적용시에는 당연히 방화벽으로 인한 서비스의 중단이 없도록 정상적인 서비스를 방해하는 룰셋이 있다면 반드시 확인하고 사용해야 합니다.

변경 전
SecDefaultAction "pass,log,auditlog,phase:2,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"

변경 후
SecDefaultAction "deny,log,phase:2,status:406,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"

여기까지 하면 방화벽의 설치는 끝났습니다.

4) 기타
로그파일의 비대해지는 것을 방지하기 위해서 로그를 날짜별로 나누어서 보관하는것이 좋겠죠.
KISA에서 제공하는 FAQ를 보니 잘 설명되어있어서 그대로 적용했습니다. 아래 링크에서 상세내용을 확인할 수 있습니다
http://toolbox.krcert.or.kr > ModSecurity FAQ > 로그파일의 사이즈가 너무 큰데 이를 날짜나 시간별로 분할할 수 없나요?






KISA에서 제공하는 룰셋의 주요 점검 항목

PHP 인젝션 취약 공격 방지(공개 게시판 솔루션 대상 공격 포함)
명령어 실행 방지
XSS 공격 방지
SSI 인젝션 관련 공격 차단
악성 프로그램 봇, User-Agent
검색엔진 Recon/Google 이용한 해킹 방지
PHPMyAdmin 관련 공격 취약점 적용
SQL Injection 공격 차단
WebShell 공격 방지
Tomcat 취약점 이용한 공격 방지


기타) 적용 후 추가한 내용
# dir|page 가 들어가 있으면서 https가 요청되는 경우가 fckeditor 에서 발생하기 때문에 수정
SecRule REQUEST_URI "(dir|page|)" chain
#SecRule REQUEST_URI "=(http|https|ftp)\:/"
SecRule REQUEST_URI "=(https|ftp)\:/"
SecRule REQUEST_URI "shell_exec\(" "msg:'PHP Injection Attacks'"

공개SW 웹방화벽 mod_security를 이용해서 여러분의 어플리케이션을 보호해보시는 것이 어떨까요?

 

/usr/local/httpsd/bin/apachectl sslstart


[Mon Oct 17 17:11:27 2011] [warn] NameVirtualHost 192.168.1.7:443 has no VirtualHosts
/usr/local/httpsd/bin/apachectl: line 184: 20577 파일 크기 제한을 초과함 $HTTPD -DSSL
/usr/local/httpsd/bin/apachectl sslstart: httpd could not be started

로그 파일이 ssl_engine_log 파일이 2G를 넘어서 생기는 문제.


---------------------------------------------------------------------------------

/usr/local/apache/bin/apachectl restart

파일 크기 제한을 초과함 에러가 발생하면 로그 파일 확인할것.


로그파일 확인 후,


child pid xxxxxx exit signal File size limit exceeded (25) 에러
와 같은 메일이 발생한다면 이는 웹서버의 로그 파일의 크기가 너무 커서 그렇다



[장애조치법]

child pid **** exit signal File size limit exceeded (25)
<< Error Message: child pid **** exit signal File size limit exceeded (25) >>
# 아파치 웹서버에서 tail -f error_log 시, 다음과 같은 에러 발생 시 조치방법입니다.
1. 파일시스템이 EXT2 라면 로그파일의 크기가 2GB 제한에 걸려 있습니다.
--> cp /dev/null access_log (or error_log)
(2GB 를 넘는 아파치 관련 로그파일에 NULL 값을 주어 Resizing 한다.)
./apachectl stop
./apachectl start
2. 로그파일이 2GB를 넘어 1번과 같이 조치하였거나 아파치 로그파일이 2GB를 넘지 않았음에도
에러가 지속적으로 발생한다면, 다음 find 명령으로 로그파일을 찾아낸다.
---> find / -size +1000000000c -exec ls -al {} ;

아마도 2GB 이상인 로그파일이 잡힐 것이다.
cp /dev/null /tmp/wl_proxy.log


 

출처 :: http://cauca.springnote.com/pages/328015.xhtml


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

1. mysql 실행 중에 비밀번호 변경방법 - update문을 이용하여 변경한다.


mysql > use mysql


mysql DB를 이용한다.


mysql> update user set password=password('new-pw')

> where user='root';


mysql> flush privileges; → 적용



2. mysqladmin 명령어를 이용한 비밀번호 변경방법




3. root 패스워드를 분실한 경우


mysql을 오랫동안 사용하지 않은 경우에는 root 계정의 비밀번호를 잊어버려 당황할 때가 있을 수가 있다. 서버 관리자라면 이런 경우를 대비하여 아래와 같이 새로 설정하는 방법을 숙지 해야 할 것이다.


① 실행중인 mysql 종료

#] 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 시작 (권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

#] ./safe_mysqld --skip-grant-tables &

[1] 12084

#] Starting mysqld daemon with databases from /usr/local/mysql/data

#] ./mysql -u root mysql

.......

mysql>

※ mysql_safe 명령어는 mysql 데몬을 실행시키는 명령어임.


③ update 문으로 root 사용자 비밀번호 갱신

mysql> update user set password=password('new-pw')

> where user='root';


④ 실행중인 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

출처 :: http://kwon37xi.egloos.com/1634694


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지...
Redhat Linux 7.3, MySQL 3.23.58 에서 테스트함.
설치는 Redhat 기본 제공 RPM으로 했다.

데이터베이스 접속

$ mysql -u 사용자명 -p dbname


설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

$ mysql -u root mysql



비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다.


  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호

  • update문 이용
    $ mysql -u root mysql

    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';
    mysql> FLUSH PRIVILEGES;


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';


username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
아래 댓글에서 rukikuki님이 알려주셨습니다.
GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;
처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요..

http://tech.zhenhua.info/2009/01/mysql-error-104528000-access-denied-for.html 에 따르면 '%'란 localhost 를 제외한 모든 호스트를 뜻한다고 한다. 즉, localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.

불필요한 사용자 삭제는

mysql> DLETE FROM user WHERE user='username';
mysql> FLUSH PRIVILEGES;



데이터베이스 생성/보기


  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.



테이블 생성/보기


  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;
    혹은
    mysql> DESCRIBE tablename;

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;



현재 상태 보기


mysql> status

--------------
mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)

Connection id: 26
Current database: study
Current user: study@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: euc_kr
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 hours 9 min 59 sec

Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1
Open tables: 1 Queries per second avg: 0.021
--------------



INSERT

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);

혹은

mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);



SELECT

mysql> SELECT col1, col2, ... FROM tablename;


컬럼명을 *로 하면 모든 컬럼 의미.

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;


컬럼의 이름을 바꿔서 출력.

mysql> SELECT * FROM tablename ORDER BY col1 DESC;
mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;


DESC는 내림차순 ASC는 오름차순.

mysql> SELECT * FROM grade WHERE korean < 90;


조건줘서 SELECT.

mysql> SELECT * FROM grade LIMIT 10;


결과중 처음부터 10개만 가져오기

mysql> SELECT * FROM grade LIMIT 100, 10;


결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE

mysql> UPDATE tablename SET col1=새값 WEHER 조건



DELETE

mysql> DELETE FROM tablename WEHRE 조건



mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다.

$ mysql -E -u root -p mysql



mysql에서 발생한 오류나 경고 다시 보기

mysql> show errors;
mysql> show warnings;








-----------------------------------------------------------------------------------



  • rukikuki 2009/09/03 16:04 # 삭제답글
  • 이 포스팅으로 MySQL 명령어에 많은 도움을 받았던 유저입니다.

    다름이 아니라. GRANT ALL PRIVILEGES 에서 사용자가 속해있는 호스트를 % 로 지정했을 때 속해있는 호스트의 ip 에 관계없이 접속할 수 있어야 하는데 그렇게 해도 접속이 안된다고 하셔서 첨언합니다.

    GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;

    처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요..

    늘 건승하시고 주님안에서 원하시는 바 다 이루시길 기도합니다

  • 호비스 2011/09/19 01:41 # 삭제답글

    IF EXISTS의 명확한 명령어 뜻은
    앞절에 쿼리문을 실행할때 뒷절에 테이블명, 혹은 컬럼명이 존재하는지
    여부를 판단하여 수행하라는 뜻입니다. ^^
  • 권남 2011/09/19 03:45 #

    의미를 명확히 해주셔서 감사합니다.

'운영체제 > MySQL' 카테고리의 다른 글

mysql DB 속도 저하로 연결 안될시  (0) 2012.11.05
MySql-Password 변경  (0) 2012.10.30
MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30

MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)

출처 :: http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&wr_id=237




mysql> use mysql;
mysql> create database 디비명;


## DB 생성하기
mysql> insert into db (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv) values ('localhost', '디비명', '디비아이디', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

사용하시려는 권한에 따라 해당 기능에 대한 부여권한은 달라질 수 있습니다.
일반적으로 특별한 기능을 필요로 하지 않는 한도 내에서는 아래와 같은 권한만 포함이 되면 됩니다.

자세한 사항은 MySQL 매뉴얼을 참고 (조회 기능 제공)
- http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&lang=k

- select, insert, update, delete, create, drop, index


## 사용자추가 (방법1)
mysql> insert into user (host, user, password) values ('localhost', '아이디' ,password('비밀번호'));


## 사용자추가 (방법2) 기존 암호형식으로
mysql> insert into user (host, user, password) values ('localhost', '아이디' , password=old_password('비밀번호'));


## mysql 다시 시작
/usr/local/mysql/bin/mysqladmin -uroot -p비밀번호 reload


## 기존 암호형식으로 비밀번호 저장하기
mysql 4.1 이후에는 비밀번호 암호화가 변경되었으므로 아래의 명령어를 한번 실행
mysql> update user set password=old_password('새 비밀번호') WHERE user = 'root';


전체 테이블 보기

--데이터베이스설정 use문
use mysql;--시스템테이블 접근하기위해

--전체테이블보기
show tables;

-- 테이블 구조보기
describe user;--user테이블 구조 보기
grant 테이블

-- user
user테이블에 정리된 권한은 전역값이라서 이 시스템의 모든 데이터베이스에 적용된다.(mysql포함)

-- db
사용자가 어떤 호스트에서 어떤 데이터베이스로 접근할 수 있는지 결정, 이 테이블에 정리된 권한은 특정 행에 올라와 있는 모든 데이터베이스에 적용된다.(DDL,DML,DCL등의 권한)

-- host
user와 db테이블을 보완하는 기능을 한다. 사용자가 여러 호스트에서 데이터베이스에 접속하려면 user나 db테이블에 호스트를 등록하지 않고 그 대신에 host테이블에 각각의 사용자-호스트 조합에 대한 권한을 명시할 수 있다.

-- table_priv, columns_priv 테이블
테이블 수준의 권한과 열 수준의 권한을 지정한다. 이들은 db 테이블과 비슷하게 동작하지만 특정 데이터베이스에 있는 테이블에 대한, 특별 테이블에 있는 열에 대한 권한만을 준다.

-- grant 문으로 권한변경시
flush privileges; 명령어를 실행해야 권한이 변경된 사실을 mysql에 알린다.



show로 정보얻기

--전체테이블보기
show tables;

--사용할수 있는 데이터베이스보기
show database;

--테이블 열 보기(books테이블)
show columns from books;

--해당 계정의 세부적인 권한을 보여준다.
show grants for 계정명;

--지정한 테이블에 속한 인덱스를 나열한다.
show index from 테이블;

--시스템 아이템의 수에 대한 정보를 얻는다.
show status;
ex) show status like variable_name

--시스템 변수 보기(mysql 버전같은것을 알수있다.)
show global variables;
show session variables;

--db에 접속한 세션 리스트
show processlist

--각 테이블에 대한 정보 보여주기
show table status

--user가 가진 권한을 설정하기 위한 grant 문을 보여준다.
show grants for user

--서버가 지원하는 다른 권한을 보여준다.
show privileges

--데이터베이스를 생성할수 있는 create database문을 보여준다.
show create database db

--테이블을 생성할수 있는 create table 문을 보여준다.
show create table 테이블명

--사용할수있는 테이블형을 보여주고 어떤것이 기본값인지 알려준다.
show engines;

--innodb저장엔진의 현재 상황에 대한 데이터를 보여준다.
show innodb status

--bdb 저장 엔진에 대한 로그 파일에 대한 정보를 보여준다.
show logs

--마지막 쿼리가 실행되었을때 생긴 에러,경고,주의를 보여준다.
show warnings

--마지막 쿼리가 실행되었을때 생긴 에러를 보여준다.
show errors

실행계획보기
쿼리문 앞에 EXPLAIN을 붙인다.




MySQL ver. 5.0.21 윈도우즈 셋업 파일용.

$Mysql_home/bin/mysql -u root -p
enter the password : *******
Mysql>

# 데이터베이스 생성
Mysql> use mysql;
Mysql> create database databeseName;

# 사용자 계정 추가
Mysql> Grant ALL ON <DATABASE 명 혹은 테이블명> TO <사용자명>@<호스트명> IDENTIFIED BY '비밀번호';

# 데이터베이스 권한 설정

Mysql> insert into db values('%','디비이름','UserName',
->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
--> desc db; 하여 컬럼의 갯수 확인 후 'Y'옵션 지정 함...ㅡㅡㅋ

Mysql> INSERT INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections)
VALUES('localhost', 'zzong', PASSWORD('****'),
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0);

Mysql> flush privileges;



<< 자료인용 >>
http://blog.naver.com/netfron/140034841987
http://blog.naver.com/miojj04?Redirect=Log&logNo=100034315177




 

'운영체제 > MySQL' 카테고리의 다른 글

MySql-Password 변경  (0) 2012.10.30
MySQL 기본 명령어 정리  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30

출처 및 더 자세한 사항은


http://radiocom.kunsan.ac.kr/lecture/start.html


--------------------------------------------------------------------------------------------------------------------



비밀번호 변경


데이터베이스에 접속하기 위해서는 반드시 비밀번호가 필요하며, 데이터베이스의 안전을 위해서는 비밀번호를 변경할 필요도 존재한다. MySQL에서 비밀번호의 문자 길이에 제약이 없다.

사용자 접속에서 client 업그레이드 오류가 나오면 old_password를 실행하여 해결한다.

mysql에서 root의 비밀번호를 잊었을 때 새로 지정하는 방법이 있다.

【방법1】 mysql_setpermission을 이용하여 비밀번호를 변경
【방법2】 set 문을 이용하여 비밀번호를 변경

다음은 사용자 'kim'의 비밀번호를 'kim_pass'으로 변경한 예이다. 

주의:
  password() 함수를 사용하지 않아도 되는 비밀번호가 암호화 되는 경우
     1) GRANT...IDENTIFIED BY 
     2) mysqladmin password문을 사용한 비밀번호 변경

  password() 함수를 사용해야만 비밀번호가 암호화 되는 경우
     1) SET PASSWORD
     2) INSERT 
     3) UPDATE 문을 사용하여 비밀번호를 변경할 때


SET PASSWORD FOR user= PASSWORD()를 사용한 경우 user로 특별하게 지목한 사용자의 비밀번호를 변경함
(root가 다른 사용자의 비밀번호를 수정할 경우에 주로 사용함)
SET PASSWORD=PASSWORD()를 사용한 경우 현재 로그인한 자신의 비밀번호 수정

mysql의 root 계정 비밀번호 설정

【예제】
shell> mysql -u root ☜ 처음에는 root의 비밀번호가 아직 지정돼 있지 않음
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
mysql>

또는 다음과 같은 방법으로 지정해도 된다.
shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"

또는 다음과 같은 방법으로 지정해도 된다.
shell> mysql -u root
mysql> UPDATE mysql.user SET PASSWORD=password('newpwd')

-> WHERE user='root';
mysql> FLUSH PRIVILEGES;
【예제】
# pgrep mysqld
1025
1003
# mysql -u root -p
Enter password: kunsan1234 

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('arirang1234');
mysql> SET PASSWORD FOR 'root'@'jijoe' = PASSWORD('arirang1234');
mysql> select current_user;
 
mysql> exit
Bye
# mysql -u root -p
Enter password: arirang1234 
 
mysql>



【예제】 % mysql --user=root -p mysql password : *********** mysql> GRANT USAGE -> ON *.* -> TO kim@'%' -> IDENTIFIED BY 'kim_pass'; mysql> FLUSH PRIVILEGES; 【예제】 # mysqladmin -u kim password kim_pass 현재 로그인한 자신의 비밀번호는 다음과 같이 변경할 수 있다. 【예제】 % mysql -u joe -pkim1234 mysql> SET password=password('joe_pass'); Query OK, 0 rows affected (0.00 sec) mysql> exit % mysql -u joe -pjoe_pass mysql> mysql의 root password 재설정 SET에 의한 일반 사용자의 비밀번호 변경 mysqladmin password

'운영체제 > MySQL' 카테고리의 다른 글

MySQL 기본 명령어 정리  (0) 2012.10.30
MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
Mysql Dump 백업,복구  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30

출처 :: http://ucnn.tistory.com/39



--------------------------------------------------------------------------

Dump

Databases 전체 덤프

mysqldump -u[아이디] -p[패스워드] --all-databases > 저장될 파일명

ex) mysqldump -uroot -ppass --all-databases > test.sql

Database만 덤프

mysqldump -u[아이디] -p[패스워드] [디비명] > 저장될 파일명

ex) mysqldump -uroot -ppass test > test.sql

테이블만 덤프

mysqldump -u[아이디] -p[패스워드] [디비명] [테이블명] > 저장될 파일명

ex) mysqldump -uroot -ppass test student > test.sql

테이블구조만 덤프

mysqldump -u[아이디] -p[패스워드] --no-data [디비명] [테이블명] > 저장될 파일명

ex) mysqldump -uroot -ppass --no-data test student > test.sql

테이블구조를 제외한 데이터만 덤프

mysqldump -u[아이디] -p[패스워드] --no-create [디비명] [테이블명] > 저장될 파일명

ex) mysqldump -uroot -ppass --no-create test student > test.sql

복구

덤프파일을 이용한 복구

mysql -u[아이디]-p[패스워드] [디비명]< 파일명


'운영체제 > MySQL' 카테고리의 다른 글

MySQL 사용자 추가 및 데이터베이스 추가 (2009/11/03 수정)  (0) 2012.10.30
MySQL 총정리  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Mysql Alter  (0) 2012.10.30
Source 사용시 한글 깨짐 현상  (0) 2012.10.30

+ Recent posts