상황 : WSUS 오류로 Role 제거하고 재설치(Computers를 아무리 클릭해도 서버 오류 메시지가 나타남)

Role 제거 후 재부팅을 하여서 새로운 Role 추가를 하려는데 update could not be found 메시지가 발생함

해결방법
1.HKLM\Software\Policies\Microsoft\Windows\Windows Update 하위 OU를 삭제

2. Windows Update 서비스 내리기

3. Role 추가

AD GPO로 한컴뷰어2007 삭제하기

OS/Windows 2017. 10. 10. 21:14 Posted by ­행복
현상황 :
AD환경의 회사 내 모든 사용자들의 PC에 배포된 한컴뷰어 2007을 제거해야 하는 상황

주요이슈 :
- 컴퓨터 대수가 너무 많음
- 일부 파수 충돌이 일어나는 PC는 conhost.exe 파일이 늘어나면서 cmd.exe종료가 안되는 PC가 있음
이 PC의 경우, 한컴뷰어 2007 삭제를 '프로그램 및 기능'에서 수행해도 동작하지 않음!

해결아이디어 :
프로그램 및 기능에서 언인스톨러로 제거가 불가능하다면, 그 비슷한 action을 취한 후 (강제 삭제를 진행), 프로그램 및 기능에서 해당 리스트를 제거하면 되지 않을까?

진행과정 :
1. 실제 구글에서 찾아보면 '프로그램 및 기능'에서 보이지 않게 하는 방법은 레지스트리를 건드리는 것이다.

프로그램 및 기능에 존재하는 리스트들은 레지스트리 하위에 있다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

2. reg 확장자로 등록된 레지스트리 값을 통해 삭제하면 되는데 키값 앞에 -(마이너스)를 붙이고 실행하면 해당 경로 및 하위 레지스트리 값이 모두 삭제 된다.

보통은 하위 경로를 난수로 표현을 해 놓지만 한글뷰어 2007은 경로가 다음과 같다.

KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Haansoft HOffice 2007 Viewer Korean

 레지스트리를 notepad로 만들어 reg확장자로 저장하면 된다.
아래 텍스트를 uninstall.reg로 저장

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Haansoft HOffice 2007 Viewer Korean]

-를 붙여서 삭제한다는 것이 포인트

3. 한글 오피스 2007 뷰어 제거를 하기 위해서의 고민
해당 프로그램은 dll이나 activex 등 보안모듈이나 프로세스를 제어하는 지저분한 프로세스가 없어 C:\Program Files\HNC\HOfficeViewer70 하위 폴더만 날려주면 된다.

4. 위의 3가지 방법을 종합하여,
 해당 폴더의 존재 유무를 체크해서
있는 경우만 삭제를 하고, 레지스트리를 제거하며, 제거된 사용자 리스트를 추출하는 배치파일을 만든다. 배치파일은 다음과 같다.

@echo off
set vol="네트워크 공유폴더 드라이브"
set HWP="C:\Program Files\HNC\HOfficeViewer70"

IF EXIST %HWP% (
rd /s /q %HWP%
copy %vol%\uninstall.reg C:\a.reg
C:\Windows\regedit.exe /s C:\a.reg
del C:\a.reg
echo %date%,%time%,%COMPUTERNAME%>> %vol%\uninst_users.csv
)

주의점 :
1. 리스트 echo 명령을 사용시에는 해당 공유폴더에 모든 사용자들이 write 권한이 필요
2. 레지스트리명령(regedit /s)은 공유폴더에서 동작하지 않아 c:\a.reg로 이름변경해서 떨군 후 실행시킨 후 삭제하도록 함
3. 해당 배치파일은 윈도우 스케쥴러로 동작시키도록 함




예전에는 오프라인 설치 파일을 adobe 사이트에서 구할 수 있었다.
하지만 이놈들이 언제부터인가 오프라인 설치파일을 adobe 사이트에서 바로 받지 못하게 해놓고 방법도 모르게 난해하게 해 놓았다.

그래서 구글에 adobe flash player offline installer 내지는 adobe flash player standalone 이런 식으로 검색을 하면
수도 없는 웹하드 사이트에 악성코드로 의심되는 설치파일이 나온다.

결국 현재 사용 가능한 방법은
adobe 사이트에 가입 > 이메일 인증 후 계정 활성화 > get.adobe.com/kr/flashplayer에서 IT 매니저 또는 OEM이신가요? 를 선택 > 설문조사 참여 > 약 1시간 후에 자신의 이메일로 다운로드 링크를 보내옴 >  보내준 링크로 접속하면 Offline Installer 파일을 받을 수 있따.

Distribute를 위한 링크는 다음
http://www.adobe.com/kr/products/players/flash-player-distribution.html
여기에 들어가서 Apply to Distribute 누르고 설문조사 해서 제출하면 이메일로 링크를 받을 수 있다.

aero기능 끄고 이미지 배포하기

OS/Windows 2017. 9. 22. 20:17 Posted by ­행복
정답을 찾은 관련포럼 링크

https://www.sevenforums.com/customization/107786-aero-registry-entries.html

정답은
Desktop Window Manager Session Manager
서비스를 Disable(사용안함)으로 한 후 톔플릿을 만들어 이미지를 생성하면 된다.

사고의 흐름 과정 : 사용자 프로파일에서 아무리 해도 안되고, google에 aero disable, aero unattend, aero deployment 등등...검색을하면
aero theme failed와 같이 aero 테마를 쓰려는 사람들만 가득하고, 성능을 고려해서 안쓰고자 하는 사람을 못 봤다.

그래서 레지스트리 문제가 아닐까 하고 aero registry라고 검색시 솔루션을 발견.

레지스트리 문제가 아니라 서비스의 문제였던것이다.

해당 서비스가 기동되면 dwm.exe라는 프로세스가 aero 꽌련 기능을 활성화 시켜서 투명도 같은 것을 예쁘게 만들어준다.(aero glass 기능)
하지만 메모리를 130메가를 점유하는 것을 봤다. 업무환경에서는 반드시 없어야할 기능이라고 생각한다.
aero 투명화 기능을 꺼도 해당 서비스가 구동되어있으면 dwm.exe는 약 9MB의 메모리를 점유한다.
먼저, GPO에서 batch를 실행하는 가장 쉬운 방법은
1.컴퓨터정책-Policies-Windows Settings-Scripts(Startup/Shutdown)
2.사용자정책-Policies-Windows Settings-Scripts(Logon/Logoff)

로그온 스크립트를 주로 사용하는데, 첫번째 문제는 사용자가 로그온을 할때까지 배치를 돌릴수가 없다. 두번째 문제는 무슨 이유에서인지 로그온 배치가 잘 적용되지 않을 경우가 (운영경험상) 많다.

따라서 그것보다 효율적이고 확실한 방법이며 사용자가 로그온을 하지 않아도 백그라운드로 돌리는 방법으로 Task Scheduler를 사용하게 되었는데 이 방법은 반복 실행 설정이 된다는 점에서 확실히 1번 실행하는 로그온 스크립트보다 확실하게 컴퓨터들을 batch로 제어할 수 있다.


우선 실행할 batch파일을 AD sysvol 폴더 어딘가에 넣어야하는데, 그냥 편의상 해당 GPO 경로의 logon폴더에 batch파일을 두고, task scheduler에 그 경로의 bat파일을 실행하도록 한다.

task scheduler는 컴퓨터 정책과 사용자 정책에 각각 존재하는데, 컴퓨터 정책에 적용하게 되었다.

경로는 Computer Configuration - Preferences - Control Panel Settings - Scheduled Tasks

우클릭 후 정책을 새로 만든다.
우클릭->New->Immediate Task (Windows Vista and later)
---첫번째 General탭에서---
Name : 아무거나
--Security Options에서--
When running the task, use the following user account:
"NT AUTHORITY\SYSTEM"을 설정
라디오버튼 Run whether user is logged on or not 선택
맨아래
Configure for : Window 7로 변경

---두번째 actions 탭에서---
New버튼 누른 후
Action : Start a Program
경로 : Logon 폴더의 bat 파일 선택

나머지는 디폴트 옵션...

제대로 실행되었는지 확인하려면

bat파일에 리다이렉션을 Logon 폴더로 해놓고, txt파일을 하나 만들어서 속성-Security탭에서, Authenticated Users의 write 권한을 Allow해주면 된다.

예시: echo %computername%>> \\cloud.com\SysVol\cloud.com\Policies\{FCE35803-E171-442C-8BAB-826EF89B7753}\User\Scripts\Logon\result.txt

result.txt를 생성한 후 권한 생성


목적(왜하는가) : 일정기간 켜져있으면 중앙관리서버의 명령을 받아 자동으로 전원이 OFF되어야하는데 그렇지 않은 PC들에 대한 action을 취하기 위함

대상 : AD기반의 windows 운영체제(cmd batch 스크립트가 통하는 PC)

조치방법 : AD Domain Controller의 Group Policy에 task scheduler를 삽입한다. batch 파일이 주기적으로 실행되게끔

논리 : time /t를 통해 현재의 날짜를 뽑고
최초로 켜진 시간값은 여러가지 명령어 중에서도 상대적으로 출력결과가 빨리 도출되는 net statistics workstation 명령어를 활용한다.

단, 여기서 문제가 있다.
한글 OS상에서는 결과값이 한글로 출력된다.
이렇게 출력되면 영문OS 와 한글OS에서 출력 결과값을 수집하기 어려움이 있다.

그래서 다음의 명령어로 반드시 영문cmd코드페이지를 호출해서 batch를 실행하고자 한다.

chcp 437

(한글코드페이지는 949번임)

그렇게 명령을 내리면
Statistics since 2017-08-28 ?? 11:11:18
과 같은 값을 도출할 수 있게 된다.

그러면 이 PC는 2017년 8월 28일에 켜지고 지금까지 꺼지지 않았다는 뜻이 된다.

다음은 저기서 2017-08-28의 값만 추출하고 싶다. 그럴때는 batch의 for 문을 사용해야 한다.

자세한 사용법은 아래의 링크를 참조한다.

[링크]bat파일안에서 for문의 이용법 by 블르샤이닝님


우선 for /F 뒤에 delims라는 조건식으로 -와 space를 동시에 구분기호로해서
앞의 명령의 결과값을 쪼개면
statistics since 2017-08-28
까지 5개의 덩어리로 구별할 수 있다.
tokens라는 조건식으로 3부터 5까지를 변수 D,E,F에 저장하도록한다.

말로 하면 더이상 쉽게 표현할 수 없고 명령어를 보고 직관적으로 이해를 해야 한다.

for /F "tokens=3-5 delims=- " %%d in ('net statistics workstation ^| findstr since') do (set D=%%d&set E=%%e&set F=%%f)

delims뒤에 - 와 space 한칸을 넣어서 그 두개를 구분자로 사용하겠다는 의미이고
변수는 %%d부터 시작해서 차례로
tokens3-5 : 3번째에서 5번째까지의 덩어리를 취해서 순차적으로 넣겠다는 의미이다. 알파벳은 d e f 이렇게 순차적으로 올라가면서 저장되더라.

그것을 윈도우 환경변수 설정 명령어인 set에 저장되더라. 그리고 set 명령어를 쳐보면 변수가 저장됨을 알 수 있다.
명령어 in () 안에 파이프라인에 ^를 붙인 이유는 | (pipe)기호가 '작은따옴표 안에서 동작하게 하기 위함인 것 같다.
(findstr는 since만 해당하는 단어만 잡아내는 리눅스의 grep같은 명령어이다)


여기까지가 끝인 줄 알았는데 그렇게 취한 숫자에 또 다른 문제가 발생했다.

받아오는값은 2017-08-30과 같다. 그러면 08을 받아온다. 계산식에 넣을때 08은 숫자로 인식하지 않아서 배치에서 오류가 나더라.

그래서 다음의 링크에서 해결법을 찾아냈다.

[링크]Add/Remove Leading Zeroes

3번을 보면 해결방법이 나온다.
if "%B:~0,1%"=="0" SET B=%B:~1%

구문을 해석하면
B:~0,1 B라는 변수
문자열 시작위치(0 - 첫번째문자열부터)
1-첫번째까지를 취한값을 의미한다.
앞의숫자와 뒤의 숫자가 무엇을의미하는지, 예제 실습을 해보면 쉽게 알 수 있다.

<예>
%bytes:~0,-3% : byte라는 변수의 0(첫번째 문자열기준으로) -3(뒤에서3번째까지)

본론으로 돌아와서
B의 첫번째문자열 값이 0과 같으면
B=%B:~1% 1(두번째문자열을 B에 대입)
결국 08인경우 8로 만들라는 뜻이다.


다음, 현재 시간과 서버 시간의 차이를 계산하는 방법 - 정확할 필요가 없다.

간단한 알고리즘으로
8월 1일이 7월 31일보다 월은 크나 일수는 작고
2018년 1월 1일이 2017년 12월 31일보다 월수나 일수나 작지만 뒷날이 된다.

그래서 고안한것이
연도차이*12를 해서 월수를 더해주고
월수차이*30을 해서 일수에 더해주면
정확한 값은 아니지만 대충 몇일 차이인지 알 수 있을것이다.

그리고 그 차이값을 새로운 변수G에 저장하고 그 차이값이 한달(30일)이 넘어가면 action을 취하게 하면 된다.

이것을 모두 구현한 스크립트는 다음과 같다.

(echo hello 부분에 취할 action을 정해주면 된다)



:::현재날짜와 PC가 켜진 시간을 변수로 저장

FOR /F "tokens=1-3 delims=- " %%a IN ('date /t') DO (set A=%%a&set B=%%b&set C=%%c)
for /F "tokens=3-5 delims=- " %%d in ('net statistics workstation ^| findstr since') do (set D=%%d&set E=%%e&set F=%%f)

:::일 월 앞에 0이 붙어있으면 0을 제거합니다

if "%B:~0,1%"=="0" SET B=%B:~1%
if "%C:~0,1%"=="0" SET C=%C:~1%
if "%E:~0,1%"=="0" SET E=%E:~1%
if "%F:~0,1%"=="0" SET F=%F:~1%

:::연도가 바뀌면 차이만큼 일 가산

if %A% GTR %D% (
set /A ="B+(A-D)*12"
)

:::월이 바뀌면 차이만큼 일 가산

if %B% GTR %E% (
set /A C="C+(B-E)*30"
)

set /A G=%C%-%F%
echo G
if %G% GTR 30 (
echo hello
)

SAMBA 4.6.5 설치 삽질기

OS/Linux 2017. 6. 23. 19:39 Posted by ­행복
이것을 적어두지 않으면 아까운 지식이므로 내가 적는다.

종합적인 흐름의 기법으로(내가 잘 알아보기만하면 되므로) 이슈를 위해 고뇌한 흔적을 위주로 적을 예정이다.

참고문헌 :
samba 패키지를 yum 없이 수동으로 설치하는 방법
samba.org의 직접 삼바패키지 빌드하는방법
samba 취약점 조치하신분의 티스토리 블로그


상황 : 호스팅업체 나야나의 리눅스서버 samba 랜섬웨어 감염으로 긴급조치 지시 하달

운영하지도 않는 리눅스 서버의 samba 버전 취약으로 버전업을 위한 조치
해당 리눅스 서버는 centos6버전이며 자체가 다음카카오와 동기화된 레포지토리를 구축하고 있다.

현재 samba 버전은 3.6.9-169.el6_5

조치방법 :
1. 그동안 업데이트 안한 레포지토리를 daumkakao repository 와 동기화
lftp -c "set ftp:passive-mode off; mirror -c -e -i rpm http://anonymous@ftp.daumkakao.com/centos/ /SYSLOG-NW/www/centos"

(내 기억에는 daumkakao ip의 80포트로 방화벽을 오픈한 상태)

그다음 레포지토리 데이터베이스를 재구성해야함 우선 centos 6버전의 패키지들은 6.9폴더에 있고, 64비트 os 만 할 것이므로 다음의 명령을 수행

createrepo --no-database /SYSLOG-NW/www/centos/6.9/os/x86_64
createrepo --no-database /SYSLOG-NW/www/centos/6.9/updates/x86_64
createrepo --no-database /SYSLOG-NW/www/centos/6.9/extras/x86_64
createrepo --no-database /SYSLOG-NW/www/centos/6.9/centosplus/x86_64


 그런 다음, 내가 클라이언트 입장에서 서버의 레포지토리에 접속을 해야 하므로 다음과 같이 입력
나는 파일 이름을 el6.repo라고 명명하였으며 /etc/yum.repos.d/ 아래에 텍스트 파일로 저장하면 됨

파일이름 : el6.repo
[i-bases]
name=Rhel $releasever - $basearch - base
baseurl=http://192.168.0.100/centos/6.9/os/$basearch
enabled=1
gpgcheck=0

[i-updates]
name=Rhel $releasever - $basearch - updates
baseurl=http://192.168.0.100/centos/6.9/updates/$basearch
enabled=1
gpgcheck=0

[i-extras]
name=Rhel $releasever - $basearch - extras
baseurl=http://192.168.0.100/centos/6.9/extras/$basearch
enabled=1
gpgcheck=0

[i-centplus]
name=Rhel $releasever - $basearch - centosplus
baseurl=http://192.168.0.100/centos/6.9/centosplus/$basearch
enabled=1
gpgcheck=0


레포지토리 주소가 192.168.0.100이다.


그리고 나서 yum update all 한 후 레포지토리 한번 갱신해주고(설치는안함)
yum update samba 명령으로 samba 버전을 3.6.9-169.el6_5 에서 3.6.23-43.el6_9로 올리게 됨

근데, 랜섬웨어 패치는 samba 4.6버전임...

그래서 다음 명령을 수행
yum remove samba
yum install samba4

그리고 /etc/samba/smb.conf에 다음을 추가해줘야만 했다.

파일이름 : smb.conf
==== Share Definitions ====
[SYSLOG-NW]
        comment = syslog
        path = /SYSLOG-NW
        browseable = yes
        guest ok = no
        writable = yes
        printable = no

그리고 service smb restart
그랬더니 없어졌던 SYSLOG-NW 공유폴더를 다시 사용할 수 있었다.

이제 마운트를 하고 썼던 다른 서버에서 오류가 났다. 그 서버에 다시 마운트하기
(클라이언트 리눅스에서 마운트) mount -t cifs //182.192.0.100/SYSLOG-NW /SYSLOG-NW -o user='root',password='password'


여기까지 성공. 그런데 빌어먹을 다음 레포지토리의 samba4 버전이  4.2.10-10.el6_9로 조치필요한 4.6.5버전보다 훨씬 낮은거 아닌가 참나

그래서 할 수 없이 samba.org에 올라온 버전을 받고, 압축을 풀고, make install 까지 하고도 뭐가 문제인지 몰라 고민하던 와중에

이거대로 했더니 성공하였다.(출처 상단 블로그 링크)
- 구동스크립트 복사
cd ../packaging/RedHat/
cp smb.init /etc/init.d/smb
cp samba.pamd /etc/pam.d/samba

- samba의 데몬과 실행파일들을 PATH 변수의 디렉토리에 모두 링크
ln -s /usr/local/samba/sbin/* /usr/sbin
ln -s /usr/local/samba/bin/* /usr/bin

-samba 서버 시작
/etc/init.d/smb start  또는 service smb start
여기서, 또 퍼미션이 막혀서
chmod 744/etc/init.d/smb 해주니까 실행됨

재부팅되도 실행되도록
chkconfig --level 3 smb on
해당 명령도 적어둠


그런데 smbstatus를 자꾸만 실행해도
Can't load /etc/samba/smb.conf - run testparm to debug it
이렇게 오류 메시지가 나와서
 cp /etc/samba/smb.conf /usr/local/samba/etc/smb.conf
이렇게 조치를 해줌

->새로운 4.6버전은 /usr/local/samba/etc/smb.conf가 기본 설정값임을 확인했다.

Failed to find entry for user root.
이렇게 나와서
smbpasswd -a root
해서 password 넣었더니 samba 사용자가 생김. 기존 yum으로 install 해서 쓰던 samba랑 다른 양상










의문점 :
왜 마운트가 안되는걸까 미치겠네

'OS > Linux' 카테고리의 다른 글

1년 이상 된 로그 삭제해서 삭제목록 리스트 남기기  (0) 2017.12.07
(방화벽) 로그 저장 while문 파일 입력  (0) 2017.02.16
cifs 마운트시 유의점  (0) 2016.08.31
리눅스 파일 시스템 구조  (0) 2016.03.02
PCB  (0) 2016.03.02

진화된 정품인증 스크립트

OS/Windows 2017. 2. 28. 14:17 Posted by ­행복
예전의 방법
오피스 2013 KMS가 설치된 AD환경 사용자들 중
2013이 설치된 컴퓨터들이 있는 OU에만
다음의 GPO를 적용했다.
(Computer - Policies - Windows Settings - startup script)

kms.bat
cd C:\Program Files\Microsoft Office\Office15\
cscript ospp.vbs /act




개선된 방법
if문을 활용해서 2013이 설치되지 않은 사용자들 상관없이 모든 OU에 대해 적용
scheduled task를 통해 로그온시 한번만 실행할 수 있도록 하기

배치파일자체는 스크립트를 사용해서 더 스마트한 코드를 구현
kms.bat

@echo off

set ospp="C:\Program Files\Microsoft Office\Office15\ospp.vbs"

if exist %ospp% (
cscript %ospp% /act
)


(방화벽) 로그 저장 while문 파일 입력

OS/Linux 2017. 2. 16. 17:10 Posted by ­행복
bash쉘 프로그래밍

장비 일일 로그를 일 단위로 crontab 돌리는 경우

- 문제
1. 새로운 고객사 장비가 도입/제거 되었을 경우, crontab의 쉘스크립트를 매번 수정해 주어야 하는 불편함을 겪었다.
2. 고객사가 많은 경우, 같은 내용 경로만 다른 스크립트 내용을 고객사 개수만큼 사용하여 코드의 길이가 길고 보기 어렵다.

- 해결
파일에서 입력을 받고 while문 한 단위로
종료하는 경우로 해결

- 코드예시

#####example.sh######
CPFWs=/syslog/CPFWs.txt
#읽어올 파일 변수 설정
while read SampleVariable
#변수이름은 자유롭게
do
scp -v /opt/$SampleVariable/$(date -d -1days '+%Y-%m-%d)*.log root@1.1.1.1:/syslog/$SampleVariable/ >> /script/log/$SampleVariable"_"log_$(date -d -1days '+%Y-%m-%d').log 2>&1
done < $CPFWs
#읽어올 파일 변수를 done뒤에 입력

'OS > Linux' 카테고리의 다른 글

1년 이상 된 로그 삭제해서 삭제목록 리스트 남기기  (0) 2017.12.07
SAMBA 4.6.5 설치 삽질기  (0) 2017.06.23
cifs 마운트시 유의점  (0) 2016.08.31
리눅스 파일 시스템 구조  (0) 2016.03.02
PCB  (0) 2016.03.02
운영중인 2012 R2 WSUS에서 Update Services mmc 콘솔이 동작이 자꾸 죽는 것이었다.

WSUS 서비스를 재시작해도 올라오지않았다.
나는 단순 서비스 오류인줄알고 재부팅을 했다. 하지만 재부팅하고 괜찮다가 몇시간 후에 똑같은 이슈가 발생했다.

Event ID 12072가 발생하였다.

원인 : 너무 많은 WSUS 클라이언트들이 붙어서 발생한 것으로 추정

해결방법
WSUS 503에러 조치방법

IIS 서비스가 내려가있었다.
IIS를 시작해주면 2012R2의 WSUS mmc 콘솔은 다시 동작을 한다.
그리고 추가적으로 재발 방지를 위해서는 Advanced Settings에서 큐 길이를 늘려주는 해결책으로 조치를 하였다.

조금 더 모니터링을 해보고 피드백을 남기도록 하겠다.