즉석 관리자 권한을 위한 윈도우 BATCH 스크립트

간단한 팁을 주도록 하겠다.
아마 가장 짧은 관리자 권한 상승 후 실행 스크립트 되겠다.

배치 파일을 작성하다 보면 관리자 권한 상승을 요할 때도 있다.
그러다가 관리자 권한 여부를 확인 후 아니면 관리자 권한 달라고 메시지 날리고 끌 수도 있긴 하다.
하지만 사용자에겐 불편할 수밖에 없다.
그래서 Stack overflow에서도 배치 파일로 관리자 권한 상승에 대한 커뮤니티 연구가 진행되었고.
우린 윈도우 7 까지는 관리자 권한 상승을 아예 꺼서 못느꼈을 수도 있겠지만,
윈도우 8부터는 관리자 권한을 끄면 여간 불편한 일이 생기는 게 한두개가 아니고 레지 건드리는 방법 외엔 없어서
국내 액티브엑스도 처음엔 관리자 권한 끄라고 요청했다가 보안 전문가들에게 털리고 이제 관리자 권한 상승을 요구한다.

어쨌든, 이 마법의 구분을 공개하도록 하겠다.

@ECHO OFF

NET SESSION 2>nul >nul
IF %ERRORLEVEL% NEQ 0 (
IF "%1" == "ELEVATED" GOTO NOTELEVATED
GOTO ELEVATE
)
GOTO ADMINTASKS

:ELEVATE
pushd %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', 'ELEVATED', '', 'runas', 1);close();"
EXIT

:ADMINTASKS
REM 여기에 관리자 권한 상승 후 배치 내용 나열
PAUSE
EXIT

:NOTELEVATED
echo No admin rights
PAUSE
EXIT

자, 처음에 NET SESSION 이라는 꽤 생소한 명령어가 있다. 보통 NET 명령어는 서비스 시작/종료하거나 방화벽 설정 시 자주 사용한다.
SESSION 명령어는 당신 컴퓨터로 공유 폴더던 뭐던 접속할 때 컴퓨터 목록을 띄우는 명령어인데, 목록이 있던 없던 종료 코드는 0이고, 대체적으로 관리자 권한이 없는 경우 외에 오류 코드가 없기 때문에 사용한 것이다.
게다가 NET 명령어는 HELP 수식어가 없으면 무조건 관리자 권한이 필요한 특징을 가지고 있다. 그래서 가장 간단하게 관리자 권한 여부를 확인할 수 있는 마법의 명령어 되시겠다.
뒤에 2>nul >nul 은 아무것도 출력하지 못하게 하는 연산 명령어다. 보통 파일명 붙이면 명령어 출력 결과를 파일로 저장하는데, nul은 일종의 블랙홀 되시겠다.
2는 오류 출력을 가리키는데, 오류 출력도 가리고, 일반 출력도 가리게 하는 연산 명령어라 보면 된다.

이리하여 if 문으로 명령어 결과 코드가 0이면 관리자 권한으로 넘어가면 되고, 그 외 숫자일 경우 관리자 권한을 요청하여 분기로 나눈다.
이제 중요한 부분인데, 보통 BAT 자체로는 관리자 권한 상승이 불가능하기 때문에 임시 폴더 등에 Shell.Application 객체가 담긴 vbs 파일을 만들어 실행했었다.
하지만 이번에는 시스템급 웹 페이지를 띄우는 .hta 파일을 실행하는 mshta를 사용했다. javascript: 프로토콜도 먹힌다. 애초에 엔진이 IE니까.
그리고 내용이야 vbs 생성 내용과 크게 다를 거 없다. 단지 특징이 있다면 배치 파일 자신을 다시 실행하는 거다. 이것도 기존과 크게 다를 게 없다.
이리하여 관리자 권한을 얻으면 다시 BAT 파일을 실행하게 되고, 못얻으면 그냥 종료된다.
관리자 권한을 얻게 되면, ADMINTASKS 부분으로 이동하여 명령어를 실행하게 된다. 그 부분 아래 원하는 명령어 내용을 입력하면 된다.
말이 거창하지만 짧고 간결하며 윈도우 10 최신 환경에서도 실행 잘되는 배치 파일 되시겠다. 유용하게 쓰도록.

출처: Stack overflow – How can I auto-elevate my batch file, so that it requests from UAC administrator rights if required?

composite / 2018년 4월 27일 / Piss Development / 0 Comments

개인적으로 Cygwin을 절대 비추하는 이유 (부제: 걍 WSL 써라)

지금은 윈도우 10에 서브시스템 우분투를 설치해 우분투 내에서 할거 하고 있다.

node.js 가 아직 윈도우를 지원하지 않던 시절, 나는 한번 cygwin 을 깔아서 node.js를 설치했다.
잘 된다. 일단은. 일부 기능이 빠졌다고 나와 있다고는 하지만 딱히 불만은 없었다.
하지만 cygwin을 쓰면서 네이티브 리눅스와보다 불편한 감을 지울 수 없었고,
게다가 MS가 직접 나서서 libuv를 윈도우 포팅에 성공하여 node.js가 윈도우에서도 쓸 수 있는 날이 왔고,
나는 이제 더 이상 cygwin이 필요 없어서 지우려고 했으나… 안됐다.
결국 나는 윈도우를 밀어서 cygwin의 흔적을 지워버렸다.

Cygwin은 UNIX 콘솔의 편리함을 그대로 윈도우에서 쓸 수 있는 일종의 미들웨어이다.
Cygwin에서 유닉스 기반의 네이티브 컴파일도 가능하고 왠만한 도구들(쉘, 프로그램, 도구, ssh, git 버전관리 등등)을 그대로 지원한다.
하지만, 나는 이걸 쓰는 것보다 차라리 윈도우 10을 깔고, 거기에 서브시스템 리눅스를 깔라고 하고 싶다.
위키에서도 소개되긴 했지만… 왜그런지 짧게 설명자면…

  • 패키지 관리자의 부재 (apt, yum 등)
  • Windows 계정 종속적인 사용자 (Bitvise SSH Server도 마찬가지긴 하지만…)
  • 일부 커널 종속적인 프로그램 미지원 (docker 등)
  • 편해 보이지만 은근 불편한 언인스톨 시스템
  • 더럽게 느린 성능
  • 애매한 보안 정책 (관리자 계정은 root…)

아무리 장점이 많아도 단점이 모두 씹어먹기 때문에 나는 앞으로도 cygwin을 이용할 생각 절대로 없다고 보면 된다.
만약 윈도우에서 리눅스를 돌리고자 한다면, 나는 단 1초의 고민도 없이 윈도우 10의 서브시스템 리눅스를 권유하거나, 가상OS를 권하고 싶다.
VMWARE나 VirtualBox 등 가상 사용법이야 뭐 다들 알 것 같으니 넘어가고, 윈도우 10의 리눅스 기능에 짧막하게 소개하겠다.
일단, 윈도우에서 설치 가능한 리눅스는 아래와 같으며,
심지어 윈도우 서버 2016에서 빌드 1706 이상일 경우에도 일부 리눅스 설치가 가능하다.

  • Ubuntu (서버 2016 지원)
  • openSUSE (서버 2016 지원, Hyper-V 공식지원)
  • SLES (SUSE Linux Enterprise Server) (서버 2016 지원, Hyper-V 공식지원)
  • Kali Linux

해킹과 보안에 매달리는 사용자는 Kali까지 지원되니 고민 없이 설치하면 된다.
비록 설치 시 손 댈 곳은 많지만, 완벽한 리눅스 환경을 제공하면서, 게다가 커널도 일반 리눅스 커널이라 지원되는 커널이 있는 프로그램이라면 모두 설치가 가능하다.
게다가 성능은 기존 자원을 유동적으로 활용하기 때문에 사양에 따르긴 하겠지만 Cygwin보다 훨씬 부드럽게 동작한다.
나는 Ubuntu를 설치했는데, 재밌는 점이 윈도우 상에서 관리자 권한을 필요한 폴더나 파일일 경우 Ubuntu 에서도 sudo 등의 권한 상승을 요구한다는 점이다.
물론 TrustedInstaller 권한이 있는 파일이나 폴더는 죽어도 못건드린다…

어쨌든 간에, 회사에서 리눅스 개발이나 테스트를 겸하고 싶다면, 2가지 방법이 있는데,
스냅샷 등의 크리티컬 테스트를 요하는 환경이라면 아무래도 가상환경이 가장 이득이며,
그게 아닌 왠만한 실행 테스트 환경을 원한다면 윈도우 10에 리눅스 환경을 설치하는 것이 좋다. 회사에서는 그게 더 싸다. 물론 아예 리눅스 까는것보단 비싸긴 하겠지만, 문서작업 때문에 윈도우 쓸 수밖에 없는데 뭐.

추가내용:
WSL에서는 docker 못돌린다. 커널과 환경은 docker 사양에 맞긴 하지만 가장 중요한 chroot 명령어가 없기 때문이다… 이는 WSL에 SSH 서버 돌리는 법에서도 언급했다.
docker 같은 크리티컬한 작업을 원한다면 가상 돌리는 게 훨씬 이득이다. 그밖에 가벼운 일반적인 사용 용도(node.js나 python 돌리는 등)에 WSL 쓰도록.

composite / 2018년 4월 24일 / Piss Development / 0 Comments

Windows 10/Server 2016 이상에서 원격 액세스 및 라우터 없이 NAT 사용하기

보통 윈도우 환경에서 공유기 같은 환경을 구성하기 위해서 NAT 소프트웨어나, 또는 서버의 경우 원격 액세스 및 라우터 기능을 설치한다.
윈도우 10부터, 또는 서버 2016 부터, 이제 원격 엑세스 기능이 없어도 NAT 기능을 제공하는 powershell cmdlet 을 제공한다.
바로 NetNat 모듈이다.

https://docs.microsoft.com/en-us/powershell/module/netnat/?view=win10-ps

모듈 이름 그대로 NAT 환경을 제공한다. 이로 인한 이점은 아래와 같다.

  • 윈도우 10에서 사용 가능. 특히 원격 액세스 및 라우터 없어도 환경설정 가능
  • 위 기능으로 바로 Hyper-V 내부 네트워크 구성에다가 인터넷 연결이 가능
  • 심지어 여러 NAT 구성 가능

기능상 이점으로 주로 Hyper-V 환경을 구축할 때 많이 이용한다.
사용 방법을 알아보자.

인터페이스 구축

실제 랜카드

공유로 사용할 랜카드에 원하는 게이트웨이 IP를 설정하면 된다. 예를 들면 IP는 192.168.0.1 넷마스크 255.255.255.0 끝.
DNS는 원하면 구축하고 싫으면 안하면 된다. 비워도 어자피 ISP에서 제공하는 DNS 물려받게 되어 있다.
그냥 파워쉘로도 당연히 IP 부여가 가능하다. 자세한 설명은 아래 섹션 참고하자.

New-NetIPAddress –IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "공유로 쓸 네트워크 이름"

Hyper-V

주로 Hyper-V 환경을 예시로 들도록 하겠다. 준비물은 Powershell 관리자 권한이 부여된 콘솔 창을 띄우기만 하면 준비 끝.
Hyper-V 관리자에서 가상 스위치 관리자를 통해 내부 네트워크에 원하는 이름으로 생성한 뒤, 네트워크 및 공유 센터 > 어댑터 변경에서 실제 랜카드처럼 생성한 Hyper-V 내부 내트워크의 IP를 원하는 게이트웨이 IP로 설정해도 되고, powershell 로 가상 내부 내트워크를 생성한 뒤 바로 IP 부여가 가능하다.

먼저, Hyper-V 가상 스위치 중 내부 네트워크 드라이버를 하나 생성한다.

New-VMSwitch –SwitchName "원하는이름" –SwitchType Internal

실행 후 vEthernet (원하는이름) 이런 식으로 명명된 가상 네트워크가 인터페이스가 생성될 것이다.
그다음 생성한 인터페이스의 IP를 부여한다. IP는 예시를 든 것이므로 원하는 IP 대역으로 수정하도록 한다.
PrefixLength 는 CIDR 마스킹 넘버로 24는 255.255.255.0을 가리킨다. 이것도 상황에 따라 원할 경우 변경할 수 있다.

New-NetIPAddress –IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "vEthernet (원하는이름)"

사실 UI에서 네트워크 및 공유 센터 > 어댑터 변경 을 통해 변경해도 지장 하나도 없다.

NAT 환경 구성

이제 본격적으로 NAT를 구성하도록 하겠다.
라고 하지만 사실 별거 없다. 이제 파워쉘을 준비했으면 한줄 추가하면 끝.
마지막 InternalIPInterfaceAddressPrefix 인자에서 마스킹 IP를 입력하면 되는데,
예를 들어 192.168.0.1 넷마스크 255.255.255.0 설정했으면 192.168.0.0/24 이렇게 입력하면 된다.
원하는공유명칭 에 원하는 공유 식별자를 입력하면 되는데, 삭제 시 적어두었던 식별자를 통해 삭제할 수 있다.

New-NetNat –Name 원하는공유명칭 –InternalIPInterfaceAddressPrefix 192.168.0.0/24

끝이다. 허무할 정도로 간단하게 NAT 설정은 끝났고 공유기처럼 환경 구성하는 방법은 준비가 완료된 것이다.

참고로 삭제는 아래와 같다.

Remove-NetNat –Name 원하는공유명칭

포트 포워딩

만약 가상 컴퓨터의 특정 포트를 외부에서 접속하거나, 지금 윈도우 컴퓨터로 연결된 하위 네트워크에 있는 서비스 포트에 외부로 접속하고 싶다면,
물론 안전하게 VPN 구축해서 서비스하는 것을 추천하지만, 필요할 경우 포트포워딩도 추가 및 관리가 가능하다.
내부 공유 컴퓨터에서 80번 포트를 통해 웹 서비스하고 있는 걸 외부에서 82번 포트를 통해 접속하고자 할 경우를 예를 들어 작성하도록 하겠다.

Add-NetNatStaticMapping -NatName "원하는포트포워드명" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.2 -InternalPort 80 -ExternalPort 82

그렇다. InternalPort 인자에 내부 공유 컴퓨터가 서비스하는 포트, ExternalPort 인자에 외부에서 접속할 포트를 입력하면 된다.
그리고, Protocol 이야 TCP, UDP 등 일반적인 인터페이스일 테고,
ExternalIPAddress 인자에 외부에서 허용할 IP 대역을 입력하는데, 0.0.0.0 이면 모든 외부 접속이 허용된다고 보면 된다.
그리고 InternalIPAddress 인자에다가 내부 컴퓨터나 가상컴 IP를 입력하면 된다.

반대로 삭제하고자 할 경우 아래처럼 하면 된다.

Remove-NetNatStaticMapping -NatName "원하는포트포워드명"

DHCP는?

만약 윈도우 10이면, 기능 없다. 외부 프로그램 아니면 포기하는게 편하다.
그리고 윈도우 서버다? 그러면 할 수 없이 DHCP 서버를 깔아야 한다.
윈도우 서버의 DHCP 서버 사용 방법은 직접 검색하거나 도움말 보거나 하면 되고,
윈도우 10이면, 몇가지 도구와 방법이 제공되는데, 링크 가서 알아보면 되겠다.

  1. DHCP Server for Windows
  2. TFTP32 – 주로 네트워크 부팅 서버 구축에 많이 사용되는데 DHCP도 제공한다.
  3. isc-dhcp-server DHCP 서버 설치
    윈도우 우분투 서브시스템 이용, 완전한 서버를 유지하도록 사용하기 위해서는 내 글 참고.

이상 끗.

참고

NetNat – cmdlet – MSDN
SET UP A HYPER-V VIRTUAL SWITCH USING A NAT NETWORK

composite / 2017년 11월 23일 / Piss Development / 0 Comments

WSL에서 리눅스 프로세스 관리하기

리눅스 프로세스 또한 윈도우 작업 관리자에서 관리할 수 있다.
물론 속성 확인 등 윈도우 특화 기능은 지원하지 않는다. 오로지 끝내기 뿐.

아이콘이 있을 리 없으니 흰 아이콘만 뜰 뿐이다.
그리고 Sysinternals 에서 제공하는 Process Explorer 에서도 볼 수 있다.

대체적으로 맨 아래로 내리나 보다.

다음으로는 서비스를 확인해 보도록 하겠다.

composite / 2017년 8월 25일 / Piss Development / 0 Comments

WSL(윈도우 내 리눅스) 에서 데몬 유지 및 sshd 서버 돌리기

먼저 WSL의 특징을 설명하겠다.
일단 리눅스기 때문에 백그라운드 서비스, 즉, 데몬도 존재하며, 똑같이 돌아간다.
하지만 윈도우에서 bash 프로세스가 하나도 없으면, 리눅스 서비스는 다 죽고 리눅스 전원이 꺼진 것이나 다름없다.
그래서 윈도우를 키자마자 리눅스 서비스를 돌리고 싶으면 윈도우 시작하자마자 bash 프로세스를 돌려야 한다.
이를 기초하여 SSH 서버 데몬을 돌림으로 리눅스의 기능을 윈도우 시작 때부터 유지하는 방법을 설명하도록 하겠다.
이를 잘 정리한 링크로부터 출처를 가져왔다.

How to run sshd as a windows service ? #612
How to run Ubuntu service on Windows (at startup)?

  1. 윈도우에서 bash 실행한다.
  2. sudo dpkg-reconfigure openssh-server 실행하여 SSH 호스트 재구성한다.
  3. sudo nano /etc/ssh/sshd_config 실행하여 SSH 설정 파일 편집에 들어간다.
  4. UsePrivilegeSeparation 항목을 찾아 옆에 yesno로 변경
    (이유는 UsePrivilegeSeparation 옵션은 chroot() 호출을 WSL에서 아직 지원하지 않기 때문)
  5. 비번으로 접속하고자 할 경우 PasswordAuthentication 항목을 찾아 (없으면 추가) yes로 세팅.
    (만약 없으면 SSH 접속할 경우 키 파일을 요구함. 유저 파일에 키를 생성하고 클라이언트도 가지고 있어야 함.)
  6. ctrl+O 단축키로 저장 후 ctrl+X 로 편집기를 빠져나간다.
  7. sudo visudo 실행하여 sudo 권한설정 파일을 편집한다.
  8. 적당한 줄을 찾아 $USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D 문구를 추가한 후, $USER를 로그인 이름으로 바꾼다.
    (로그인 이름 알고싶으면 pwd ~/ 쳐서 /home/ 뒤 명칭을 봐라.)
  9. 단축키로 저장 후 나가서 메시지 뜬 게 있는지 확인하고, 메시지 나올 경우 visudo 오류이므로 적절히 수정하여 해결한다. (모르면 검색해라.)
  10. (옵션) SSH 서버를 외부에서 접속하고 싶은 경우, 윈도우에서 방화벽에서 포트번호 22를 허용한다. (개인 및 도메인 범위까지 한다. 공용 말고)
  11. 윈도우 시작 시 SSH 서버를 돌리기 위해 (적당한파일명).vbs 파일을 메모장이나 아무 편집기로 생성 후 아래 내용을 넣는다.
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
  1. 저장했으면, 모든 bash 프로세스를 끄고(리눅스 실행 모두 다 종료) vbs 파일을 더블클릭 후 PuTTY 등으로 SSH 접속 되는지 확인한다.
  2. 성공했으면 bash.exe 프로세스 종료 후, 위 vbs 파일을 작업 스케줄러에 등록한다. (모르면 좀 검색하고). 물론 “시스템 시작시”에.
    (시스템 시작 시, 파일은 vbs파일 다이렉트 호출, 사용계정은 반드시 로그인할 계정. LOCAL SERVICE 같은 시스템계정 말고. 암호 저장 안해도 됨.)
  3. 윈도우 껐다 킨 후 PuTTY로 SSH 접속 되는지 확인해서 접속 되면 이제 윈도우와 리눅스는 한몸으로 실제처럼 돌아갈 것이다. 서비스도 다.

왜 굳이 vbs로 하냐고? 물론 bat 파일 쓰거나 직접 작업 스케줄러에 등록할 수는 있어.
근데 작업 스케줄러던 bat 등록하던 뭘 하던 도스창 뜬다. 너같으면 좋겠냐? vbsws.run 에 두번째 0 인자가 바로 창 안띄워 주는 고마운 인자다.
내가 필요 시 즐겨쓰는 놈이기도 하지. 이제 리눅스 VM으로 깔 필요도 없다. 편리하다.

끗.

composite / 2017년 8월 25일 / Piss Development / 1 Comment

WSL(윈도우 서브시스템 리눅스) 에서 node.js 개발하기

오늘 좀 골때리는 경험을 했기에 글 싸지른다. 왜인지는 후에 설명한다.
이 글은 윈도우 10 레드스톤 2(크리에이터즈 업데이트) 이상에서 리눅스 서브시스템을 설치한 사용자에 해당된다.
안깔았으면 이전 글을 참고하고, 해당사항 없으면 씹기 바란다.

1. node.js 설치

먼저 apt-get 공식 리포지토리의 node 는 옛날 버전이다.
원하는 버전을 설치하고자 할 경우 리포지토리를 추가하여 설치해야 한다.
설치 버전별 목록은 여기서 볼 수 있다.
여기서는 가장 최신 버전인 7.x 버전을 설치하도록 하겠다.
별거 없다.

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -  
sudo apt-get install -y nodejs  

끗. 사실 윈도우에 별도로 node.js 깐 적 없다면 1번에서 끝나면 된다.
URL 끝 setup_(메이저버전).x 파일명 부분에 자신이 원하는 버전 숫자로 바꾸면 된다.
하지만 윈도우 내 개발환경에서 node.jsPython 등을 설치했을 경우 골때리는 문제가 발생할 것이다.
이제부터 들어간다.

2. 환경변수 관리

이 글을 쓰는 이유이기도 한데, 기본적으로 리눅스 서브시스템을 실행하면 윈도우 환경변수가 리눅스로 공유된다.
그래서 윈도우 PATH 변수가 먼저 들어간 뒤, 리눅스 PATH 변수 내용이 짬뽕된다.
이 때문에, 예를 들어 윈도우 내 node.js를 설치한 상태일 경우, npm 실행 시 아래 메시지가 나올 것이다.

$ npm
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")

물론 환경변수 공유는 편리할 수 있으나, 대부분 독립형 운영체제라 가정하고 설계하고 개발하기 때문에
개발자 입장에서는 난처하면서도 골 안때릴 수가 없다. 몇가지 방법이 있는데 취향껏 따라하면 된다.

윈도우 환경변수 공유하지 않도록 설정

윈도우 아니랄까봐 리눅스 서브시스템 옵션을 레지스트리에 등록하고 있다.
따라서 만약 윈도우 환경변수를 리눅스로 옮기기 싫으면 아래 레지스트리 소스를 메모장 등으로 붙여넣은 후,

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss]
"AppendNtPath"=dword:00000000

참고로 레지파일은 반드시 빈 행이 하나 들어가도록 한 뒤 끝내야 한다.
원하는 파일명.reg 로 저장한 뒤 걍 실행해버리면 된다. 물론 되돌리고 싶으면 값 부분에 dword:00000001 로 바꿔 실행하면 된다.

Github Issue 출처

.bashrc 파일에 원치 않는 변수내용 삭제

윈도우 환경 변수를 포기 못할 경우에 간단한 팁이다.
PATH 환경변수에 특정 내용을 지우는 식으로 처리할 수 있다.
아래 쉘 스크립트를 ~/.bashrc 파일 내용에 추가하면 원치 않는 변수 내용을 삭제할 수 있다.

### remove unnecessary Win PATHs
# This can prevent extension-less commands from bleeding into BASH.
# (eg. "ng" would execute the Win bin if "@angular/cli" wasn't installed on Linux.)
#
function path_remove {
  # Delete path by parts so we can never accidentally remove sub paths
  PATH=${PATH//":$1:"/":"} # delete any instances in the middle
  PATH=${PATH/#"$1:"/} # delete any instance at the beginning
  PATH=${PATH/%":$1"/} # delete any instance in the at the end
}

path_remove '/mnt/c/Users/me/AppData/Roaming/npm'
path_remove '/mnt/c/Users/me/AppData/Local/Yarn/bin'
path_remove '/mnt/c/Program Files (x86)/Yarn/bin'
path_remove '/mnt/c/Program Files/Git'
path_remove '/mnt/c/Program Files/Git/cmd'
path_remove '/mnt/c/Program Files/nodejs'
path_remove '/mnt/c/OpenSSL-Win32/bin'
path_remove '/mnt/c/Program Files (x86)/Python27'

이후 bash를 빠져나가고 다시 bash 실행하면 원치 않는 명령어 실행을 방지하여 조금은 더 깨끗한 환경에서 개발할 수 있을 것이다.
Github Issue 출처

composite / 2017년 8월 24일 / Piss Development / 0 Comments

윈도우 10 우분투 Bash를 탐색기 메뉴로 추가하기

제목 참 거창하지만 사실 별 거 없다.
어자피 오른쪽 마우스 메뉴와 별 다를 거 없기 때문이다.

윈도우 10 레드스톤 2(크리에이터즈 업데이트) 이상에서 우분투 서브시스템 설치 방법은 구글에 널리고 널렸으니 찾아봐라.
거기게 모든 게 다 있으니. 아니면 걍 링크 뿌린다. 여기가 친절한 듯.
(주: 스토어 단독 계정 등록만 해도 우분투 받는데 지장 없다. 특히 회사컴일 수록 로컬계정 관리가 정신건강에 이롭다.)

레지스트리 편집귀 귀찮게 건드릴 거 없다.
출처는 https://github.com/Manouchehri/bash-WSL-context-menu 이다.

bash 레지스트리 추가 (원문 컨텍스트 메뉴)
bash 레지스트리 추가 (한글 컨텍스트 메뉴)

됐다. 탐색기 오른쪽 클릭으로 잘들 써봐. 끗.

composite / 2017년 8월 22일 / Piss Development / 0 Comments

웹 기반의 컴퓨터 원격 통합관리 : ULTERIUS

https://ulterius.io/

  • 컴퓨터 시스템 모니터링 지원
  • 설치가 필요없는 원격 데스크탑 지원
  • 해당 컴퓨터 탐색기를 웹으로, 업로드 다운로드 당연히 지원.
  • 파워쉘 등 강력한 원격 실행환경 지원
  • 플러그인 지원 (완벽하지 않음)

이런 솔루션은 돈을 줘도 할 말 없는 솔루션인데 MPL 2.0 오픈소스인 C# 서버 앱이다.
.NET 4.5 이상을 지원하는 가능한 모든 윈도우에서 지원한다. 그렇다. 당연히 윈도우 전용이다.

composite / 2017년 3월 17일 / Dog's bullshit / 0 Comments

윈도우 10 ISO 다운받기 (물론 합법)

최근들어 윈도우 10 ISO가 필요하게 되어 링크를 들러봤더니…

ISO 다운로드 선택 박스는 안뜨고 그저 도구 다운로드만 뜰 것이다.
그렇다. 윈도우 운영체제는 막힌 거다.

하지만 불가능하지는 않다. OS를 속이고 들어가면 되는데,
그냥 user agent 를 바꿔주는 확장을 깔면 해결된다.
크롬이나 불여우는 암거나 확장 깔고 OS 바꿔치기 하고 접속하면 되며, (맥~)
IE나 Edge는 확장은 없고 대신 F12 개발자 도구를 통해 바꿀 수 있다.

내가 쓰는 속이는 user agent 문자열 예제는 아래와 같다.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

그러하다. 그리고 접속하면 ISO 다운받을 운영체제 선택박스 화면이 뜰 것이다.
그 뭐냐… 누군가가 선택박스 핵 걸어서 하위 버전 다운받는 것도 통하는 지는 안해봤다. 난 그저 윈도 10만 있으면 되니까.

불법은 아니고 합법이다. 어자피 제품 키는 없다. 정당한 제품 키 없이 쓰면 불법이고, 쓰면 합법인 거다.

composite / 2017년 3월 16일 / Piss Development / 0 Comments

Microsoft Edge 브라우저가 빡치는 이유

윈도우 10에 내장된 Edge.
옛날 유럽에 IE 끼워팔기 논란에 휩싸였던 IE의 역사를 딛기는 개뿔 일단 OS 종속적 인터넷 브라우저다.
뭐 물론 이후 윈도우에서 선택적으로 프로그램 추가 제거에 포함되는 쾌거(?)도 낳았던 논란이다.
사실 그렇게 따지면 Mac OS의 Safari는 뭐냐 시발?

어쨌든 Edge. 크롬의 초창기를 보는 듯한 브라우저이다. 초기화 속도도 빠릿빠릿하고 페이지 불러오는 속도도 빠릿빠릿하다.
물론 크롬처럼 확장 기능 많아지고 이것저것 덕지덕지 붙이는 날이 온다면 어떻게 될지는 그때 가봐야 알 것 같고.
ACID 점수가 점진적으로 높게 간다는건 좋은 징조 아니던가.

하지만 역시 IE보다도 불편하게 만드는 Edge의 문제점을 짚어보고 사용 시 유념하고 넘길 건 넘어가야겠다.

뒤로가기와 앞으로가기 버튼의 히스토리 부재

이건 진짜 용서할 수 없는 부재다. IE보다도 불편하게 만드는 가장 큰 주범이다.
특히 리디렉트가 더럽게 많은 한국사이트와 소셜로그인으로 인한 다중 리디렉트 이후에는 정말 빡치게 만든다.
원하는 이전 페이지를, 예를 들어 구글 검색하다 레딧 들어가서 구글 로긴 하고 레딧 댓글 달다가 다시 구글 검색결과로 돌아가는 시나리오를 생각해보자.
히스토리 내역도 안보여주고, 오로지 감으로만 몇번 연속 클릭질을 해야 하니 얼마나 짜증 이빠이지 아니한가.
그렇다고 개발자도구 키고 history.go(-2) 이지랄 하리? 하아…

SSL 있어? 신뢰할 수 있는 사이트네. 근데?

HTTPS 를 통해 접속된 사이트라면 주소표시줄 옆에 자물쇠 아이콘이 있어 안전한 사이트임을 보여준다.
근데 그다음엔 어쩌란 말인가. 진짜 이 사이트가 정말 신뢰된 사이튼지 아닌지 검증하고 싶은데?
인증서를 볼 수 없다. IE도 크롬도 불여우도 다 인증서 정보 보여주는데 IE는 그딴거 없다.
다행히도 비주류(?) 브라우저라 망정이지 이건 정말 개선해야 한다.
주류였으면 피싱은? SSL 스니핑 등 다양한 공격을 구분할 수 있는 수단은? 개발자 도구 여는거? 지랄.

HTTP 오류 페이지 그만 좀 보고싶다.

엣지는 HTTP 오류 코드가 나오면 정말 친근한 페이지가 여러분을 반길 것이다. 400이던 404던 500이던…
하지만 개발자에게는 정말 지랄같지 아니할 수 없다. 오류 내용 보려면 개발자 도구 켜고 내용 볼 수 밖에 없다.
아 그래… 맞아.. 하긴… 이건 개발자가 볼 페이지긴 하지… 근데 이건 아니자나…
다행히도 Edge가 오류 페이지를 보여주는 조건이 있다고 한다.
Prevent Edge browser hiding HTTP error pages

In Internet Explorer, as long as the server returned more than 512 bytes of data in the response, it would display the response, but in Edge, that’s not enough.

원래 IE에서는 HTTP 오류 코드를 받을 때 응답 내용 크기가 512바이트를 넘기면 사이트에서 제공하는 오류 페이지를 보여준다고 한다. 하지만 Edge는 이걸로 부족하다고.

https://www.hackcraft.net/error/badrequest/

이 경우 400 HTTP 오류를 보여주는데 페이지 내용이 표시된다. 크기는 2.17KB라고 한다. 보여준다. 이런 식으로 조건을 만족하면 되나보다.

아 손아파. 일단 여기까지.

composite / 2016년 5월 17일 / Piss Development / 0 Comments