Jun 101. 서버의 crontab이 삭제 돼있는것을 확인

2. 당시 등록해줬으나 또다시 삭제됨, 1분간격으로 삭제되는것을 확인

3.message 로그에는 
Jun 10 06:53:54 cobuy-0952 init: Re-executing /sbin/init 
Jun 10 06:54:55 cobuy-0952 init: Re-executing /sbin/init 
Jun 10 06:55:55 cobuy-0952 init: Re-executing /sbin/init 
Jun 10 06:56:56 cobuy-0952 init: Re-executing /sbin/init 
Jun 10 06:57:56 cobuy-0952 init: Re-executing /sbin/init 
Jun 10 06:58:57 cobuy-0952 init: Re-executing /sbin/init 
Jun 10 06:59:58 cobuy-0952 init: Re-executing /sbin/init
라는 메세지가 1분간격으로 쌓여있음, tail -f 로 확인해보면 위 메세지가 로깅될때마다 crontab에 삭제됨

##참고로 Re-executing /sbin/init  메세지는 init 6 해서 보면 서버 재부티될 때 올라오는 메세지


4.strace -s 65535 -f -t -o log.txt -p 1 으로 init(pid : 1) 프로세스를 확인해보면 1분간격으로 init restart가 확인됨

strace 내용
1     17:21:46 --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=4316, si_uid=0} ---
1     17:21:46 write(4, "\0", 1)        = 1
1     17:21:46 rt_sigreturn()           = -1 EINTR (Interrupted system call)
1     17:21:46 read(3, "\0", 1)         = 1
1     17:21:46 read(3, 0x7fff9a1c07df, 1) = -1 EAGAIN (Resource temporarily unavailable)    ###7fff9a1c07df 이메모리주소를 찾을려고 했는데 못찾았다.
1     17:21:46 open("/etc/localtime", O_RDONLY) = 9   ####여기서부터 
1     17:21:46 fstat(9, {st_mode=S_IFREG|0644, st_size=517, ...}) = 0
1     17:21:46 fstat(9, {st_mode=S_IFREG|0644, st_size=517, ...}) = 0
1     17:21:46 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f95b8be1000
1     17:21:46 read(9, "TZif2\0\0\중략\0\0\0\0\0\0\0\0\0\0\0\0\nKST-9\n", 4096) = 517
1     17:21:46 lseek(9, -304, SEEK_CUR) = 213
1     17:21:46 read(9, "TZif2\0\중략\0\0\0\0\0\0\nKST-9\n", 4096) = 304
1     17:21:46 close(9)                 = 0       #####여기까지는 localtime 불러오는거니까 무시해도 될듯
1     17:21:46 munmap(0x7f95b8be1000, 4096) = 0
1     17:21:46 socket(PF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 9
1     17:21:46 connect(9, {sa_family=AF_LOCAL, sun_path="/dev/log"}, 110) = 0
1     17:21:46 sendto(9, "<28>May 31 17:21:46 init: Re-executing /sbin/init", 49, MSG_NOSIGNAL, NULL, 0) = 49  ###메세지 로그에 로깅되는 부분..
1     17:21:46 rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
1     17:21:46 execve("/sbin/init", ["/sbin/init", "--restart"], [/* 3 vars */]) = 0     여기서 아마 crontab이 초기화되는것같다...
1     17:21:46 brk(0)                   = 0x560480f31000
등등... 약 360줄

strace를 토대로 어느 프로세스(혹은 데몬)때문에 crontab이 초기화 되는지 찾아보려했는데 결국은 실패
ㄴ/proc/*/map/ 에는 뒤에 몇자리 때봐도 안나
애초에 어느 프로세스로 인해 실행됐다 라는 기록이 안된다면 찾는건 거의 불가능하다고 판단
처음에는 시스템이 올라오면서 init 데몬이 뭔가 문제가 생겼나.. 싶어서 os 재부팅도 해보고 메모리에 Resource temporarily unavailable 에러가 나오니 메모리 불량인가... 싶어 메모리 교체도 해봤으나 하루정도 괜찮고 동일증상 발생
crontab도 안돌고 있는데 1분간격으로 위와같이 init 프로세스에서 뭔가 작동하는걸로보아 현재 실행돼있는 프로세스중 하나에 문제가 있다고 판단
수상한 프로세스를 찾아보니 서버가 해킹당해있었음
/tmp/javax 에 해킹 프로그램 실행돼있었음 많이 보던 해킹프로그램이였는데 이걸로 인해 crontab이 삭제(init 프로세스에 뭔가 작동)되는건 첨보는 경우였습니다.

'job > linux' 카테고리의 다른 글

nginx + php-fpm 취약점  (0) 2019.10.29
sysdig 로 해킹당한 서버 분석해보기  (0) 2019.06.20
centos 5 yum error  (0) 2019.04.29
nodejs npm , socket.io 설치  (0) 2019.04.10
ionice  (1) 2019.04.09

TASK [Running Windows Update] **********************************************************************************************************
task path: /root/ansible/dhsa/winu.yml:5
win_updates: running win_updates module
Using module file /usr/lib/python2.7/site-packages/ansible/modules/windows/win_updates.ps1
<123.123.123.123> ESTABLISH WINRM CONNECTION FOR USER: test01 on PORT 5986 TO 123.123.123.123 
EXEC (via pipeline wrapper)
The full traceback is:
Exception calling "RunAsUser" with "7" argument(s): "Failed to start become pro
cess (The service cannot be started, either because it is disabled or because i
t has no enabled devices associated with it, Win32ErrorCode 1058)"
At line:907 char:9
+         $result = [AnsibleBecome.BecomeUtil]::RunAsUser($username, $password,
 $l ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : Win32Exception
 

fatal: [123.123.123.123  ]: FAILED! => {
    "changed": false, 
    "msg": "Failed to become user SYSTEM: Exception calling \"RunAsUser\" with \"7\" argument(s): \"Failed to start become process (The service cannot be started, either because it is disabled or because it has no enabled devices associated with it, Win32ErrorCode 1058)\""
}
        to retry, use: --limit @/root/ansible/dhsa/winu.retry

PLAY RECAP *****************************************************************************************************************************
123.123.123.123       : ok=0    changed=0    unreachable=0    failed=1    skipped=0  

 

 

윈도우 보안업데이트 하려고 하는데 위와같이 에러 발생

 

이럴경우에는 윈도우 서비스중 secondary logon  서비스가 사용안함으로 돼 있을경우 에러가 난다. 원래는 윈도우 보안업데이트 실행시 이게 종료돼있어도 자동으로 실행되야하는데 아에 사용안함으로 돼 있으니까 에러 난다.

 

secondary logon 이게 원래 디폴트는 사용안함이 아니다. 근데 보안상 취약한 서비스라 사용안함을 권고하고 있다. 

 

대부분 서비스 사용중이라 이런 에러 자체가 없어서 찾느라 드럽게 힘들었다. 

'job > ansible' 카테고리의 다른 글

ansible git으로 받은 awx 설치시 에러  (1) 2019.07.10
windows host에서 ansible 실행하는법  (0) 2019.05.23
ansible 공부한 모듈들 정리  (0) 2019.05.02
ansible - 디렉토리 구조  (0) 2019.05.02
ansible- error  (0) 2019.04.26

리눅스 서버는 ssh를 통해서 ansible이 통신하는데 윈도우 서버는 winrm 이라는 윈도우 리모트 매니져를 통한다.

winrm 은 윈2012 는 기본적으로 실행이 돼 있다. 5985 포트로 올라와있음

근데 ansible은 기본적으로 winrm의 ssl 5986 포트를 통해서 통신을 해야 한다.(5985로도 할 수는 있는데 보안 뭐 실행안되고 뭐 그런게 있는듯)

 

 

[root@master ~]# ansible -i /etc/ansible/hosts win -m win_ping
123.123.123.123 | UNREACHABLE! => {
    "changed": false, 
    "msg": "ssl: HTTPSConnectionPool(host='123.123.123.123', port=5986): Max retries exceeded with url: /wsman (Caused by ConnectTimeoutError(, 'Connection to 123.123.123.123 timed out. (connect timeout=30)'))", 
    "unreachable": true
}

 

위와같이 에러가 나는 이유는 windows hosts 서버에 winrm 5986 포트 리슨이 안돼있어서(즉 winrm ssl 실행이 안돼있어서) 이다.

 

 

그전에 winrm no module 없다고 뜨면

pip pywinrm 으로 pywinrm 설치해줘야 한다.

 

windows 2012 의 경우 파워쉘 실행후
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"

$file = "$env:temp\ConfigureRemotingForAnsible.ps1"

(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)

powershell.exe -ExecutionPolicy ByPass -File $file

 

 

위와 같이 실행

 

위 구문을 실행하면 된다.

 

[root@master ~]# ansible -i /etc/ansible/hosts win -m win_ping
123.123.123.123 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

잘된다.

 

hosts 파일 내용은

[win]
123.123.123.123 
[win:vars]
ansible_password='123123123'
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_user=administrator
ansible_port=5986

'job > ansible' 카테고리의 다른 글

ansible git으로 받은 awx 설치시 에러  (1) 2019.07.10
ansible - windows Win32ErrorCode 1058  (0) 2019.05.23
ansible 공부한 모듈들 정리  (0) 2019.05.02
ansible - 디렉토리 구조  (0) 2019.05.02
ansible- error  (0) 2019.04.26

+ Recent posts