2013년 1월 29일 화요일

diff patch

A 원본 폴더
B 수정된 폴더
C 패치할 폴더

1. B로 이동

diff -urN A B > patch.diff

B로 이동했기 때문에 A의 경로는 길테고 B는 ./이 될꺼다.

2. 패치할 경로로 이동

patch -p0 > patch.diff

p0가 될 수 있는건 수정된 폴더에서 패치 파일을 만들었기 때문
한칸 위 폴더에서 했으면 -p1
(계산하기 귀찮아서 패치할 폴더에 가서 만든거임)

2013년 1월 28일 월요일

LTE 무제한 요금제 나올 수 밖에 없는 이유.

답 : U플이 하니까 다 따라하니까.


LG 텔레콤이 사용자 젤 없잖아 ...

돈도 없고.

돈 없는건 LG는 폰에 보험 적용도 없다는 것으로 알 수 있고

사용자 없는 것은 LTE 무제한 요금제 하는 걸로 알 수 있다.(뭐 사실 뉴스봐도 뻔히 나오는 내용을 '척'하는 거지만 ㅋㅋ)

초창기 엄청나게 좋은 주파수 대역을 가져서 승승장구 했었던 SK가

LTE 나오면서 속도에서도 KT에게 밀리는 분위기.

인터넷 뒤져보면 속도 테스트 있는데 확실히 KT가 빨랐다.

그래서 KT는 워프~ 로 광고를 민거고...

SK의 경우 좋은 주파수 대역으로 얻은 통화 품질로 좋은 이미지를 쌓아논 것을

KT의 경우 아이폰의 유저층과 속도로 평준화 시켰다.

LG는 기회가 별로 없어서 그 동안 좋은 요금제로 싼 이미지로 잘 밀고 있었다.


그러나 LTE 오면서 삼사의 승부수는 하나밖에 없어진 것이다.

어차피 모바일이 감당하기엔 겁나 빠른 속도로 속도 편차가 있던 없든 LTE만 있으면

되는 현재 모바일 수준에서 요금제와 데이터량만이 유일한 승부수다.

아이폰도 암때나 다 쓸 수 있고, 이젠 아이폰보다 구글 소프트웨어 폰이 대세를 타면서

춘추전국 시대.

 그러나 난 역시 KT랑 LG는 쓰고 있다(폰2개)

지금 SK는 쉬지만 그 동안 SK 포함해서 쭉 써왔고.

기업 철학을 보면 LG는 일단 지른다. 그래서 요즘에야 갤탭 데이터가 좀 빨라진 것을 느낀다

LG는 무제한 해도 난 안 쓴다.

KT의 경우 삐걱거리긴 하지만 한국전기통신 공사가 전신이라서 그런지 통신망 증설은 잘한다. 그리고 민영화 되고 나서는 스타 임원을 노리는 친구들이 겁나 밑에 아해를 개 부리듯이 부릴 것 같다.

SK의 경우 애들이 똑똑하다. 똑똑한 애들 뽑는 회사니까.

기간제로 쫌만 모집해 볼 것이다. 망 상태보다 늘리던지 하겠지.

내 선택은 SK LTE 무제한 이다.

일본애들이 KT 2대 주주인 것도 마음에 안 들지만.(세계통일본부장으로 난 자질이 없다. 공석인 동안은 내가 하지만) 돈 안된다고 2G 종료를 일찍한 것도 짜증나기 때문. 그 때 2G폰 사용하던 할머니 할아버지들은? 

SK도 2G 종료하겠지만. 아직은 이어나가고 있다. 그리고 KT는 더이상 한국전기통신이라고 하기에도 민망... 쩝.. 학창시절, 나라기업이라고 편하게 살던 분들이 갑자기 민영화 바람 불어서 동아리에 일거리 줘서 만나러 갔었던 기억이 난다. 뭐... 그 때 시키긴 다 시켜놓고 돈도 제대로 안줘서 짜증나서 그런 건 아니고...(KT 10년 써줬다)

쩝.. 별거 아닌 걸로 횡설 수설 했네.

알럽 SK 니가 대한민국 통신 기업해라. 제조업체들이 노인분들 위한 폰들도 좀 만들게 하고.

그리고 말 나온김에 삼양라면...

삼양라면 클레식 디자인은 좋은데 맛은 너무 하더라... 

이제 새마을 운동 이끌던 자존심 좀 버리고 몸에 좋은 것만 만들지 말자.

몸에 안좋아도 맛난거 만들어 주세용.(진짜로...)

selinux 둘러보기 008

어느 정도 지식이 쌓였으면 이제 사용해 보자.

데스크톱 리눅스는 우분투가 거의 통일해 버렸으니

우분투에서 ... 개인적으로 난 레드헷쪽이 좋다.

인터넷 뒤져보면  sestatus상태보고

selinuxenabled를 하라느니 config에서 enforcing으로

바꾸고 targeted로 하라느니...

우분투는 간단히 다음과 같이 하면 끗.

root@cooler-desktop:~# apt-get install selinux

Reading package lists... Done
Building dependency tree    
Reading state information... Done
The following extra packages will be installed:
  selinux-policy-ubuntu         우분투에 맞는 policy까지 제공하는가 보다.
The following packages will be REMOVED:
  apparmor apparmor-utils selinux-policy-default
얘네들은 selinux와 충돌하나보다. app armor란게 있는지도 몰랐네.
The following NEW packages will be installed:
  selinux selinux-policy-ubuntu
종합
0 upgraded, 2 newly installed, 3 to remove and 518 not upgraded. 헐 518개나 깔렸있었냐.
Need to get 2825kB of archives.
After this operation, 6705kB disk space will be freed.
Do you want to continue [Y/n]? 약관 동의와 같은 기분으로
Get:1 http://kr.archive.ubuntu.com/ubuntu/ lucid-updates/universe selinux 1:0.10~10.04.1 [11.2kB]
Get:2 http://kr.archive.ubuntu.com/ubuntu/ lucid/universe selinux-policy-ubuntu 0.2.20091117-0ubuntu1 [2814kB]
Fetched 2825kB in 0s (3144kB/s)                
Preconfiguring packages ...
(Reading database ... 361985 files and directories currently installed.)
Removing apparmor-utils ...
Removing apparmor ...
 * Unloading AppArmor profiles                                                                                                                                       [ OK ]
Removing selinux-policy-default ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Selecting previously deselected package selinux.
(Reading database ... 361670 files and directories currently installed.)
Unpacking selinux (from .../selinux_1%3a0.10~10.04.1_all.deb) ...
Processing triggers for ureadahead ...
Setting up selinux (1:0.10~10.04.1) ...
Generating grub.cfg ... 그럽도 바뀌는군.
Found linux image: /boot/vmlinuz-2.6.32-24-generic
Found initrd image: /boot/initrd.img-2.6.32-24-generic
Found memtest86+ image: /boot/memtest86+.bin
done
 * Starting SELinux autorelabel                                                                                                                                       
요런텍스트는 나중에 이런 기능 찾을 때 유용하다
[ OK ]

Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.32-24-generic
Selecting previously deselected package selinux-policy-ubuntu.
(Reading database ... 361684 files and directories currently installed.)
Unpacking selinux-policy-ubuntu (from .../selinux-policy-ubuntu_0.2.20091117-0ubuntu1_all.deb) ...
Setting up selinux-policy-ubuntu (0.2.20091117-0ubuntu1) ...
Updating /etc/selinux/config.

Processing triggers for selinux ...
semodule deferred processing now taking place
/usr/sbin/semodule: SELinux policy is not managed or store cannot be accessed.
 * File relabel will occur upon next shutdown/reboot.
 * Starting SELinux autorelabel                                                                                                                                              * A relabel has already been requested. Please reboot to finish relabeling your system.
                                                                                                                                                                     [ OK ]

암튼 잘 깔린다. 리붓하래서 리붓한다.


root@cooler-desktop:~# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          permissive
Policy version:                 24
Policy from config file:        ubuntu

SSH도 잘된다. 우분투님하도 열심히 selinux를 넣고 계신가보다.

우분투 니가 있어 내가 있다.

피쓰~

(그래도 윈8 따라가려면 한참 남았다 ㅠㅠ 베릴 컴피즈 빼고)

2013년 1월 27일 일요일

CJ 제약 사건

본래 범죄의 80%는 밝혀지지 않는 법. CJ 리베이트 ㅡㅡ;

로비하는 동영상까지 촬영된 것을 볼 때 이건 정말....

돈이면 다 된다는 생각하는 기업에서 나오는 제품은 믿을 수가 없다.

사실... 그 아래 연구진들이야 돈 많은 기업에서 열심히 연구해서 만든 제품이

다 나쁠리는 없을 것이다.

그리고 약국가서 무슨 약 달라고 할 때 제일제당 마크 보고 바꿔달라고 하는 것도

약사한테 무례할 것 같다.

다만, 헛개수, 헛개컨디션, 홍삼진, 골드 홍삼진은 음료니까.

내가 선택해서 안 마셔야 겠다.

홍삼은 only 정관장. 숙취엔 여명 808이다.

여명 808 만세.

참.

그나저나.. 여명 808 2가지 사이즌데 너무 구분이 안간다 ㅠㅠ

그래서 이집이 더 싼건지 안 싼건지도 모르겠다.

사이즈 구분 좀 명확히 해주세요.

아빠의 일기

소율이 태어난지 2개월 8일(70일)째이다.

그 동안 많은 일이 있었고 또 일어나고 있다.

남자들끼리는 소소하게 이야기를 나누지는 않기 때문에

주변에서 들어왔던 이야기들은 결국 경험하면서 디테일 하게 알게 된다.

내가 알고 있었던 것들은 대부분의 남자들도 알고 있는 거라고 생각하며

도움이 되고자 "새롭게 알게된 것들"을 정리해 보고자 한다.

1. 기저귀는 하루에 1~3번이라고 생각했다.
 -> 하루 8번 이상이다. 최소 8번이라고 생각하면 된다.

2. 모유는 그냥 수유하면 되는 걸로 생각했다. 모유가 나오기 전에 여자는 엄청 아파한다.
 -> 모유 짜는 건 쉬운게 아닌 것 같다. 그냥 쭉 나오는게 아니다.
 아픈 것이다.

3. 모유가 얼마나 좋은지 몰랐다. 모유는 완전 식품
 -> 병원에서 의료보험도 되지 않는 약들을 쓸 때 싸인하면서 마음이 안 좋았는데
   사실 그동안 별로 호전되는 걸 보지도 못했다.(병원에서 말할 땐) 괜찮아 질거라
 했는데 내가 직접 좋아지는 것을 느낀 것은 짜낸 모유를 갔다주고 나서
 몰라보게 나아지는 것을 느낀 것이다.
 엄마말에 의하면 애기에 맞춰서 모유 성분도 달라진다고 한다.
 -> 병원말에서는 분유도 같이 먹어야 한다고 했었는데 모유만 먹이라고 강권했다.
 몸무게 늘더라. 정말 모유만한 것은 없는 것 같다.

4. 먹고 싸는 건 쉽다고 생각햇다. 애기들은 변비에 잘 걸린다. 토도 잘한다.
 -> 그래도 모유만 먹으면 똥을 잘 싼다. 분유 먹으면 이틀넘게 안 쌀수도 있고
 인터넷 보니까 일주일 넘게 안 싸는 집도 있다고 하더라.
-> 먹이고 나면 꼭 트름을 시켜줘야 한다. 평균 시간을 재어 보니
3분 정도 걸린다. 3분 내에 트름이 안되면 나중에 방귀를 끼거나 그렇게 하더라.

5. 직장 다니면 나라에서 지원을 많이 해 준다. 의료보험은 상당히 중요하다.
 -> 의료보험 적용안되는 약만 안 썼어도 NICU(신생아 중환자실) 비용은 거의 없다고
 보면 된다. 뭐 그래도 2개월 일찍 나오면 200 정도는 든다고 보면 되는데 실재 병원비는
그보다 3배는 많다.
 -> 의료 보험 적용 안되는 약도 모르니까 일단 써야 하는데 본인 부담 비용은 500정도
든다. 그래도 나라에서 지원 금액 빼면 1000은 훌쩍 넘는다. 의료 보험이 혜택이 참 크다.
-> 일정한 조건이 되면 나라에서 자기 부담 금액으로 낸 것도 보상해 준다.
 3000만원 넘는 좋은 차만 없으면 거의 된다고 보면 된다. 자세한 것은 보건소에 문의를...
(이 블로그에서 신생아 나 미숙아 키워드로 검색해도 된거다 -> 왼쪽 위에 검색창)

6. 시간이 얼마 안 들어가는 줄 알았는데 애기 키우는 것은 보통일이 아니다.
-> 2~3명 키우는 집도 있지만 한명을 키우더라도 2~3시간 마다 모유를 먹어야 하기 때문에
밤/낮 구분이 없다. 먹이는 시간이랑 준비하는 시간등을 합하면 여유 시간이 없다고 봐야 한다. 차라리 일을 나가는게 편할 정도니 아빠들은 일하고 왔다고 폼 잡지 말고 여유가되면 도와줘야 한다.

7. 혼자만의 생각이 전부가 아니다. 인터넷에서 여러 사람이 말하는 것 들은 다 이유가 있다.
-> 젖병은 닥터브라운, 유팡 젖병소독기, 기저귀는 하기스, 분유는 산양 분유, 브랜드명은 까먹었는데 기적의 발진크림 등... 유명한 것들은 다 이유가 있는 것이다. 다른 것은 물라도 닥터 브라운 젖병은 정말 신기한 제품이다. 애기가 내뱉는 거품이 다 사라지는게...

8. 생각보다 돈도 많이 든다.
-> 분유랑 기저귀값만 해도 많다. 분유 한통에 5만원선이니까 모유랑 같이 먹이면 15일 정도 간다고 보면 된다. 한달에 분유값 10만원. 기저귀값 10만원으로 잡으면 기본 나가는게 20이다. 여러 장비(수유쿠션, 공기 정화기, 젖병, 아기침대, 모빌, 동화책, CD 등등)들을 사려면 그외에 들어가는 돈도 많다. 애기 용품점 가면 안내도 자세하게 해 주고 책자등도 준다. 그리고 관련 인터넷 사이트 뒤지면 프로모션을 위해서 공짜로 뭘 주는 곳도 있으니 잘 활용하면 된다. 그러나 난 들어가 본적이 없다. 바빠죽겠는데 :) 그 때 그 때 필요한 것을 사면 되는데 남자가 나서기 보다 여자가 하자는 것을 잘 판단해서 도와주면 된다. 

사실 아직도 아빠라는게 안 믿기고 살아가면서 애기가 그대로 있는게 아니라 금방금방 커가기 때문에 늘 새로운 하루 겠지만. 생각이 크게 많이 바뀌거나 하지는 않는 것 같다. 그리고 나에겐 아버지에 대한 안좋은 감정이 아직 있는데, 애를 키워보니 아버지에 대한 나쁜 감정이 사라지는게 아니라 더 강해지고 있는 것 같다. 아버지가 되면 아버지를 이해한다고 했던가... 이해를 하기 시작하니 더 화가 나는 추억들.


그러나 많은 것들을 배우는 것은 사실이다. 삶과 죽음에 대해서도 생각하게 되고.

나도 이랬었나 하고 생각하게 되고.

그리고 아빠란게 안 믿기는 것이 문제라고 생각되고 있다. 어서 빨리 자각하고 어떻게 애기를 키울 것인지 철학을 세워야 한다.

 우리가 비록 열심히 일하고 애기에게 많은 정성을 쏟고 있긴 하지만 이 녀석도 자신이 원해서 태어난 것은 아니다. 그래서 애기가 내 것이라는 생각을 가져서는 안된다.

 좋은 길로 인도는 하겠지만 내 욕심대로 키워서는 안될 것이다.

다만 자기 생각만 하는 인간들을 구분해서 적당히 거리를 둘 줄 알고, 나쁜 인간들에게 대적할 수 있는 명석함은 욕심을 내어서라고 심어주고 싶다.

 그리고 애기가 더 능력이 되면 사회 불쌍한 사람들에게 빛이 되는 사람이 되도록 인도하고 싶다.

 등따시고 배불러서는 이룰 수 없는 많은 것들이 있지만. 등따시고 배부른 시절의 기억도 심어 주고 싶고. 힘들지만 행복한 일들도 소개시켜주고 싶다.

그리고 먼 훗날 일이겠지만.

와이프랑 나랑 이혼 가정의 아들 딸이었기 때문에. 나처럼 불같은 남자보다는
안정적인 친구를 만났으면 좋겠다. 뭐 자기가 좋다고 하면 어쩔 수 없는 노릇이겠지만.

애를 낳아보면 내가 가졌던 생각들이 다 정리되는 느낌이라 너무 좋다.

천년만년 살 것도 아닌데 미필적 고의로 여자 친구 있는거 숨기면서 다른 여자랑 노는 남자들이나... 결혼 했으면서 점심시간 여자 동기들하고만 따로 보는 남자 녀석이나...(한 두번은 그냥 넘어가겠는데 너무 자주 마추친다)

 뭐 믓튼, 농도 짙은 순간들을 살고 있지안흔 그들의 삶이 맞지 않다는 생각이 더더욱 짙어지는 것 같다.

 이제 세상도 많이 바뀌어 간다. 나도 딸애 한테는 구세대란 소리를 들을 날이 얼마 남지 않았다. 세월이 오래 지나고 명품으로 기억되는 물건처럼 멋진 중년이 되려면 노력해야 할 것들이 많다.

 조금씩 해 나가도록 하자.

 세계통일과 함께. ㅋ

신 산양분유

http://www.ivenet.co.kr/

인터넷 뉴스를 보다 산양분유에 대한 기사를 접하게 되었다..

유명한 산양분유라고 판매되는 제품들이 100% 산양 분유가 아니라고..

새로 출시된 신 산양우유만이 100% 산양을 사용한다는데..

울 아이에게 줄 것이기에 고가의 산양을 선택했건만...

갈아 타야 하겠다.. 신 산양분유로...

2013년 1월 26일 토요일

security 001

 객체 직렬화 역 직렬화가 되기 때문에

직렬화된 일련의 바이트를 읽을 수 있으면

역 직렬화가 가능해진다.

자바의 경우 강력한 직렬화가 제공되지만

안드로이드의 경우 parcelable 사용해 본 사람은 알겠지만

자바 제공 기본 예약어 외에 커스터마이징 객체가 들어있는 경우

객체 단위의 저장은 힘들다.

그러나 잘 연구하면 aidl을 이용하는 녀석들을

역공학으로 분석할 수 있다는 이야기가 나온다.

뭐... 아직은 모바일쪽 금융권 앱이 시원찮지만

이 부분의 가능성도  간과해서는 안될 것 같다.

selinux 007

에혀. HTML로 바꾸어서 쓴다. 여기다가 붙이는건 글자 크기 유지 안하겠지. 그나저나 블로그 텍스트 편집기에서도 Ctrl+Z랑 되돌리기인 Ctrl+Y가 너무 잘 먹네. 계속 발전하길 바란다. 블로거~ 사족은 그만 하고. 멀티레벨 시큐리티다. Policy Declares Levels and categories applies constraints on objects and permissions with MLS dominance keywords ==, !=, eq, dom, domby, incomp mlsconstrain file {create relabelto } { l2 eq h2 } mlsvalidatetrans transitions between levels Still requires a lot of work 전혀 감이 안온다. 다음을 위해서 한번 읽어나 두자. Allows enabling/disabling portions of policy Booleans define in policy Logical operations allowed && || ^ ! == != Does not support nested conditionals Booleans modified through special applications or SELinuxfs policy에 저런 연산자도 먹는다는 걸 알아 두자. 1985: LOCK (early Type Enforcement) 1990: DTMach / DTOS 1995: Utah Fluke / Flask 1999: 2.2 Linux Kernel (patch) 2000: 2001: 2.4 Linux Kernel (patch) 2002: LSM 2003: 2.6 Linux Kernel (mainline) 2006: Full network labeling Present 2006년에 network labeling까지 되었네. 역사가 그리 깊지는 않아 보인다. 겁나 불편한 놈이라고만 생각했는데 앞으로는 유용하게 쓰일 것 같다.

Type Enforcement
아 댄장

HTML에서 쓰다보니 띄워쓰기를 안 넣었네.


br 좀 써줬어야 하는데... 에디터 플러스에서 HTML 기능으로 메모하던던 전혀 쓸모 없었던 것 같다.


lObject(s): items in a system that are acted upon (files, IPC, sockets, etc….)lSubject(s): process that are requesting access to an objectlAll Objects and Subjects contain a security contextlSecurity Context(s) are composed of four partslAll Security Context components are checked against the policy to see if access is allowed.
lType is the base component while role and user are used to further restrict type enforcement

사실 이부분은 복습인데...(블로거에서 글자 크기 조정하려면 이전에 썼던 글을 Ctrl+C V 하면 되는구나)

object들은 리눅스의 모든 것이고 subject는 프로세스라고 보면 되겠다. 오브젝트와 서브젝트는 selinux가 케어하는 모든 부분이고 security context로 이름을 붙인다.

모든 security context는 allowd 되었는지 검사가 되는 것이고 타입은 기본적인 컴포넌트, 반면 롤과 user는 더 TE로 제한하기 위한 것이다.

기본적은 타입이란 놈을 이용해서 제어를 하고(.te파일은 type enforcement니까)
role과 user 별로 제어를 할 수도 있다는 말이다.




system_u:object_r:passwd_exec_t:s0:c0.c2-s2:c0.c1



user:role:type:sensitivity[:category,…][-sensitivity[:category,…]]

이건 앞부분에서 했는데 mls에 대한 내용이 나왔다. sensitivity이랑 category라는 거....
s랑 c의 이름은 알게 되었다.

TE Access Control



_> TE파일 구조...

allow user_t bin_t : file { read execute write getattr setattr}

로 되어 있음녀

User_t는 도메인 타입으로 도메인은 프로세스 타입이라고 했다. 파일이라도 메모리에 올라가면 프로세스가 되는거니까... 어떤 타입에 접근하고자 하는 Source type이다.

bin_t는 타겟 타입이고. The type of the object being accessed by the process 라고 하는 걸 봐서. 프로세스끼리는 아니고 object 단위인가 보다. 여기서 혼돈이 발생한다. ㅡㅡ; 뭔가 프로세스 끼리도 통제를 할 것 같은데 결국 subject도 object가 실행된 녀석이고. 실행은 안 되었더라도 subject(process)에 종속된 리소스들일 것 아닌가?

 이런 애매한 것들은 계속 쓰다보면 자연스럽게 익숙해 지는 것들이라 넘어 가면 된다.

file은 object class다. 얘는 앞쪽에 나왔던 41개 중에 하나인 것이다.

{}안에는 Permissions지. 20개 짜리.

PPT 붙여 넣기도 귀찮으니 읽고 핵심 요약만 하겠다. selinux ppt는 인터넷에 널렸다.

selinux filetype:ppt나 pdf로 검색하면 수두루루룩. 구글신 만세~


user_t는 untrusted user다. 뭐 다른 도메인으로 정할 수는 있겠으나 예약어 처럼 쓰이는데 의미가 참 충격적이다.

selinux에서 말하는 user랑 DAC(리눅스 기본 uid, gid 뭐 그런거..)에서 말하는 user는 다른 user다.

LSM 리눅스 시큐리티 모델을 위한 커널 프레임웍이다.(Linux Security Model)의 약자겠지.

시큐리티 첵을 위한 후킹셋을 제공한다.

보통은 DAC 체킹을 위해 쓰인다.

MAC은 DAC fail이면 불리지 않는다. 이건 겁나 중요한 대목인 것 같다.

결국 LSM에도 if(DAC fail) then MAC 아니 else MAC해바바

인 것이다. SELinux에 LSM도 포함된다고 해야 하나 LSM에 SElinux에 포함된다고 해야 하나... 그건 소스를 보야...

관련 자료... 특히 그림을 쭉 훑어 보니

LSM module 은 커널단에 위치하고 있고 Selinux FileSystem을 통해서 User 단에서 접근한다. 리눅스에서 참 익숙한 모델이다. 모든게 File 로 취급하는 리눅스 철학이랑 같다.

Access Vector Cache 라는 애도 봉니다.

Security Server라는 놈이 Policy Checking을 하지만 중간에 캐시를 둬서 더 빠르게 하려는 것이겠지. 자세한건 소스편에서.

Policy소스는 policy.conf로 통합된다.(그림 상으론)

Types, TE Rules, Roles, Users...랑 리소스 레이블링 내용 제한 내용 클레스랑 퍼미션들...

policy.conf는 Checkpolicy에 의해 Binary Policy File로 바뀌어서

load_policy에 의해 로드된다.

바이너리로 바뀌기 직전 policy가 policy.conf라는게 너무너무너무 중요하다.

얜 안드로이드의 경우

androut out target product xxxxx obj ETC sepolicy_intermediates에 저장된다.

바이너리는 sepolicy: 파일인데

file 명령어로 때려보면  SE Linux policy v24 MLS 8 symbols 7 ocons 라고 되어 있다.

앞에 포스팅중 android system core toolbox 에서 file.c가 없었기 때문에

걘 패치할 필요가 없었다... 뭐... adb shell에서 file이란 명령어 때릴 필요는 없으니까.
(보안산 adb shell은 최소한으로 유지한다)

내 폰만을 위한 커스터 마이징 빌드때는 busybox에 bash쉘 포팅했었는데 무쟈게 편했었다. 탭도 먹고 흐흣.
(하실려는 분들은 이미지가 커지면 문제가 좀 생길수도 있음을 잊지 마시고...)


길게 썼네 마무리 멘트는


Object Classes
-File related (blk_file,chr_file,dir,fd …)
-Network related (socket, packet_socket, rawip_socket, …)
-IPC related (ipc, msg, msgq, sem, shm)
-Misc Classes (capability, process, security, system)


마무리 할랬는데... process는 왜 misc에 들어가고 object classes에 들어가는거야 ㅡㅡ; 써글. 암튼 좋은 자료들도 다 혼돈을 준다니깐.
블락/케릭터 디바이스 파일ㅇ나 디렉토리, 파일 디스크립터 들은 익숙한데 misc에 있는 시큐리티나 capability는 뭐하는 친구들일까?

selinux 006 둘러보기


lSELinux Homepage: www.nsa.gov/selinuxlSELinux Mailing list: http://www.nsa.gov/selinux/info/list.cfm?MenuID=41.1.1.9lRedhat SELinux Mailing List: http://www.redhat.com/mailman/listinfo/fedora-selinux-listlFedora SELinux Wiki: http://fedoraproject.org/wiki/SELinuxlFedora Core 3 and laterlDebianlGentoolSuSelSE-BSDlSE-MACHlSELinux Management and policy analysis tools-audit2allow-audit2why-load_policy-newrole-restorecon-semanage-semodule-sestatus-setbool-etc...lInterface between userspace and kernellUsed by libselinux and libsemanage to communicate requests with the kernellProvides a quick and easy interface for humanslUsually not used directly from programslInterface between userspace and kernellUsed by libselinux and libsemanage to communicate requests with the kernellProvides a quick and easy interface for humanslUsually not used directly from programs빠르고 쉬운 인터페이스며 프로그램에 의해서 바로 쓰여지지는 않는다는...lcheckpolicyllibselinuxllibsemanagellibsepollpolicycoreutils로 이루어져 있는 갑다.젤 중요한 놈이 libselinuxAVC 계산하고 context를 만들고 정하고 가져온다.policy 엔진에 쿼리를 날릴 수 있는 API를 제공한다.libsemanager도 중요한데 로긴 이름이나 유저 네트웍 포트, 인터페이스파일 컨텍스트, 레벨 체인지, 역할 등...의 기능을 제공한다.libselinux가 베이스라면 libsemanager는 좀 더 향상된 기능을 제공한다고 해야 하나...이 둘을 나누는 정책이 약간 감은 온다.



다 인터넷에 있는 내용들.
selinux의 경우 policy를 재부팅없이 바꿀 수 있는데 그것이 semodule이다.
그리고 중요한 selinux file system.
커널과 유저단의 인터페이스 역할을 하고 libselinux와 libsemanager를 통해 쓰여지고
...



둘러보기 4 댓글 이동

ttp://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/
에서는 안드로이드 소스 탐색이 버전별로 가능하다.
커널 소스를 보려면 git를 이용해서 받아야 한다.

안드로이드의 공개된 소스 트리를 보고 싶으면 
git ls-remote -h http://android.googlesource.com/platform/manifest.git

받고 싶으면 
curl http://android.git.kernel.org/repo > ./repo
리포{리파지토리(저장소)} 스크립트를 받고
repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.1_r1
repo sync 
요렇게.

커널소스는
git clone https://android.googlesource.com/kernel/common.git .


git branch -a

git checkout -b android-3.0 remotes/origin/android-3.0



https://groups.google.com/forum/?fromgroups#!topic/android-building/7Mg52A9eP4s

여기에 잘 정리되어 있다.

VPN 삽질 정보 백업.

VPN 삽질 노트 2

일단 AD가 깔려 있어야 AD를 깔았다.

cmd - dcpromo.exe
 하면 된다.

 초 간단.
 지울 때도 같다.

 안 깔려 있는 상태에서는 /forceremoval 옵션을 줘도 설치를 한다.
 dcpromo.exe는 AD  ON/OFF 명령어라고 보면 되겠다.

 생성/삭제 시 administrator 암호를 물어 본다.

 즉, AD를 깔면 AD쯕으로 user 정보가 넘어간다.

 그래서 AD 설치 후에는 compmgmt.msc에서 더 이상 유저 정보를 볼 수 없는 것이다.

사실 AD를 안 깔아도 VPN은 잘 동작할 것 같다.
AD는 거의 기본 서비스 이기 때문에  서버 테스팅은 거의 AD에서
이루저지지 않았을까하고 생각해 본다. 그래서 설치하는 것이다.

설치 후에는 윈도우키 + Break로 고급 설정에 들어가서 컴퓨터 이름을 바꾸어 준다.
꼭 바꿀 필요는 없는데 FQDN(Full Qulified Domain Name)을 클라우드에서 받은
이름으로 해 줬더니 뭔가 덕지덕지 더 붙어서 이상한 이름으로 ㅡㅡ;
클라우드에서 받은 걸로 나오도록 해주려면 도메인 네임을
cloudapp.net으로 바꿔주면 된다.

알아서 잘 확인하고.

Activie Directory Certification Service를 깔아준다. 인터넷에 있는 걸로
난 Stand alone으로 안 깔고 Enterprise로 깔았다. 왜? 공부 하려고.
까는 도중 IIS도 깐다.
일단 http://localhost를 IE에서 쳐서 인터넷 접속 확인하고.
cloud에서 80 tcp 포트 열어서 외부 에서도 확인한다.

IIS는 잘 동작 하구먼~

시작 - 실행 ... 간단히 윈도우키 + R을 누르고
mmc를 치면
관리 콘솔이 나온다.

이 친구는 입맛대로 설정을 골라서 만들 수 있는 부페의 접시 같은 녀석이다.
Ctrl+M을 눌러서
인증서를 담아 준다.

그럼 컹. root 인증서가 벌써 있다. 보면 ㅡㅡ;

그렇다. localhost/certsrv 들어가서 따로 만들어 줄 필요가 없는 것이다.

Intended purpose가 all로 되어있다. 웹 인증서니 서버 인증서니... 다 필요 음땅.

요거 하나면 된다.

라고 일단 생각해 본다.

키가 붙은건 개인키 같고 키 모냥이 없는건 공개키 같다.

사용자를 추가 해 준다.

서버 admin tool에 보면 Active directory용 유저 관리가 있다.

생성 후 Dial-in properties에 들어가서 network access allow로 바꿔준다.

그 전에 SSL 테스트를 해 보려고 TCP 443 포트를 클라우드에 열어 준다.

그리고 다른 컴퓨터에서 HTTPS를 붙여서 웹으로 접속해 본다.

접속이 안된다. 인증서 문제인가?

뭐 일단 접어 두고

포트
점검

•For PPTP:
◦IP Protocol=TCP, TCP Port number=1723   <- by="" control="" nbsp="" p="" path="" pptp="" used="">◦IP Protocol=GRE (value 47)   <- by="" data="" p="" path="" pptp="" used="">•For L2TP:
◦IP Protocol Type=UDP, UDP Port Number=500    <- by="" control="" ec="" ikev1="" nbsp="" p="" path="" used="">◦IP Protocol Type=UDP, UDP Port Number=4500   <- by="" control="" ec="" ikev1="" nbsp="" p="" path="" used="">◦IP Protocol Type=ESP (value 50)   <- by="" data="" ipsec="" p="" path="" used="">•For SSTP:
◦IP Protocol=TCP, TCP Port number=443   <- and="" by="" control="" data="" nbsp="" p="" path="" sstp="" used="">•For IKEv2:
◦IP Protocol Type=UDP, UDP Port Number=500    <- by="" control="" ec="" ikev2="" nbsp="" p="" path="" used="">◦IP Protocol Type=UDP, UDP Port Number=4500   <- by="" control="" ec="" ikev2="" nbsp="" p="" path="" used="">◦IP Protocol Type=ESP (value 50)   <- by="" data="" ipsec="" p="" path="" used="">

•For PPTP:
◦IP Protocol=TCP, TCP Port number=1723  <- by="" control="" nbsp="" p="" path="" pptp="" used="">◦IP Protocol=GRE (value 47)  <- by="" data="" p="" path="" pptp="" used="">•For L2TP:
◦IP Protocol Type=UDP, UDP Port Number=500   <- by="" control="" ec="" ikev1="" nbsp="" p="" path="" used="">◦IP Protocol Type=UDP, UDP Port Number=4500 <- by="" control="" ec="" ikev1="" nbsp="" p="" path="" used="">◦IP Protocol Type=UDP, UDP Port Number=1701  <- by="" control="" data="" l2tp="" nbsp="" p="" path="" used="">◦IP Protocol Type=50  <- by="" data="" p="" path="" used="">•For SSTP:
◦IP Protocol=TCP, TCP Port number=443   <- and="" by="" control="" data="" nbsp="" p="" path="" sstp="" used="">•For IKEv2:
◦IP Protocol Type=UDP, UDP Port Number=500   <- by="" control="" ec="" ikev2="" nbsp="" p="" path="" used="">◦IP Protocol Type=UDP, UDP Port Number=4500 <- by="" control="" ec="" ikev2="" nbsp="" p="" path="" used="">◦IP Protocol Type=UDP, UDP Port Number=1701  <- by="" control="" data="" l2tp="" nbsp="" p="" path="" used="">◦IP Protocol Type=50 <- by="" data="" p="" path="" used="">
remote route 서비스가 든 role을 추가하고 서비스는 켜지 않고 연결해 보면
(IKEv2로)
ERROR 809 가 나온다. 방화벽이나 VPN, NAT에 막혔다고

일단 방화벽은 advanced mode에서 다 끄고 서비스 켜고 해본다.
(NAT는 테스트 해 보니 켜지 않으면 따로 매핑을 하지 않는다)

그러면 이제 13819 잘못된 인증서 오류로 바뀐다.

로컬에 신뢰된 ... 뭐시기에 있는 애들을 다 지워도

잘못된 인증서 종류로 나온다.

서버에서 인증서가 오긴 하는게 그게 잘 못 된 것 같다.

http://social.technet.microsoft.com/wiki/contents/articles/12039.active-directory-certificate-services-ad-cs-error-in-order-to-complete-certificate-enrollment-the-web-site-for-the-ca-must-be-configured-to-use-https-authentication.aspx

Enterprise 인증서는 포기하고... 일전에는 SSL까지 되더니...

중간에 role을 지우고 다시 설치하는 과정에서 뭔가가 꼬이는 것 같다.

다시 certsrv 웹에서 실행해도 https 아니면 안된다고 하는 경우는

익스플로러 보안 설정에서

Active X 관련 설정 중 diabled 된 애들을 Enable로 바꿔주면 된다.

2013년 1월 25일 금요일

육아일기 쓰기를 시작하면서..

맘잡고 육아일기란걸 써야지 했던게 우리 소율이 퇴원하면서 였는데 작심삼일은 커녕 시작도 못했다.. 왜?
요 어린것을 어떻게 키워야 할지 그저 난감하기만 했던 퇴원날.. 그날부터 오늘까지 오빠랑 같이 이것저것 궁리하며 수많은 시행착오와 멘붕을 경험하며 한달이 후딱 지나간거 같다..
그래서 라는 핑계를 대고 있다..ㅋ
우리 귀여운 천사 초짜 엄마 아빠의 어설픈 키움에도 잘 자라주어 그저 고맙다..
이론은 이론일뿐..간호학에서 배운 아동간호학은 아이의 키움에 있어서 많은 도움은 되지만 그것만으론 부족해도 너무 부족하단 말씀..선배들의 경험에서 우러난 요령만이 살길..ㅋㅋ
폭풍 네이버 검색과 지인들에게 카톡질로 많은 도움을 받았다.. 
지나간 날들의 일기는 초등학교 방학숙제인 일기 쓰기를 개학 전날 다 썼던 6년동안의 경험으로 적어나가 보려한다..몇일이 걸리겠지만..
당일 하루의 일을 쓰는 그날까지 숙제 시작~^^ㅋ

네이버 라인

이벤트 하던데...

이미 많은 무료 스티커 들이 종료 되었다.

ㅡㅡ; 

안써야 겠다.

다른 사람들은 무료 스티커 있는데 난 돈 주고 사야 될거니까 ㅠㅠ

모유수유

모유수유는 참 힘들고 마음대로 되지 않는거 같다..  알고는 있었지만 실제로 경험하고 또 완모의 꿈이 깨지고 나니 더욱더 깊게 느껴지는거 같다..
아기가 직접 젖을 물고 적응해가면서 젖 양도 그때그때에 맞게 늘어가고 엄마와의 깊은 애착관계도 형성된단다.. 이론상으론 그렇다..
내가 경험해보지 않은터라 모르겠다..ㅠㅠ
3주 좀 넘는 기간의 신생아 집중치료실 입원으로 아기는 젖병에 익숙해져버렸고 게다가 정시정량을 먹여야 성장에 도움이 되고 탈수를 예방할 수 있다는 의사의 조언(?)에 의해 난 젖한번 제대로 물리지 못하고 유축기에 의해서 모유를 짜내 먹여야 했고 미숙아 분유를 모유와  번갈아가며 먹여야 해서 많은양의 모유를 짜지 않아도 되는 상황이었다..먹이고 남은 모유는 냉동실에서 보관..
지금은 3.7kg으로 건강하지만 모유를 직수하고 미숙아분유를 먹이지 않아도 되는 권고 기준이 '4kg일때까지 성장한후'여서 많이 고민했었는데..
사실 몸무게 3kg넘어서부터는 분유 안먹이고 유축으로 짠 모유수유만 해왔다..
분유만 섭취하면 끙끙거리는 딸을 참아 볼 수 없었기에..게다가 아무리 좋은 분유도 모유의 좋음을 따라갈수 없다는 신랑의 확고한 신념 내지는 고집(?)으로..ㅋㅋ
걱정과는 달리 아주 정상적으로 잘 자라주었다..
그런데 그 좋은 모유가 아가의 성장에 필요한 양만큼 늘지 않았다는게 안타깝다..
전모의 꿈은 저 멀리..
그저 자주 몽땅 비워내는게 내가 젖양을 늘릴수 있는 방법..
아기가 직접 물어주면 좋으련만 누구 말처럼 퉤하고 밷지나 않으니 다행~  몇번 물고 으앙 몇번 물고 으앙을 반복한다..얼마나 서럽게 우는지..안본 사람은 모를꺼다...
그럼에도 물려야 한다고 젖병으로 아예 주지도 말라고..건강한 막 태어난 아기들한테나 해당하는 말이다..
어떻게 찌운 살인데..3~40g 몸무게 증감에 하루하루 노심초사하던 이른둥이 엄마에게는 그저 울어도 독하게 해보란 말은 불가능한 일..
그 불가능한 일을 하루에 몇번의 시도로 위로하고 유축한다.. 제발..부족해도 분유와 병행할 수 있게 안나오지만 말아라..딱 6개월만 먹일 수 있게..물 두유 미역국 완전 마니머꼬 화장실 달토록 들락날락 거려줄테니...plz...
지금도 짜낸 모유 젖병 수유시키고 이 새벽에 담 수유시간에 줄 모유를 유축하고 있는 난 진정 엄마..나는 가수다 후속 나는 엄마다..홧팅~~!!.

2013년 1월 24일 목요일

selinux 005 둘러보기

소스는 쉬어 가는 페이지 인가...

SELinux에서 SEAndroid가 나왔다.

둘다 NSA 프로젝트이고.

이미 여러 패키지에 흩어져서 사용되고 있다.

policycoreutils는 tresys에서 만든 것으로 보인다.

www.tresys.com에 가면 좋은 자료들이 많다. 

포팅은 이미 안드로이드 메인브랜치에 되고 있고

정책은 트레시스에서 나오는 자료들을 참고하면 된다.

ⓒ 2002 - 2005 Tresys Technology, LLC (www.tresys.com/selinux, selinux@tresys.com) 7
.. SELinux defines 41 kernel object classes
.. Each with their own fine-grained permissions
.. For example, file object class has 20 permissions:
ioctl read write
create getattr setattr
lock relabelfrom relabelto
append unlink link
rename execute swapon
quotaon mounton execute_no_trans
entrypoint execmod
.. Documentation available at www.tresys.com/selinux
Object Classes and Permissions
key_socket
ipc netlink_nflog_socket rawip_socket unix_stream_socket
filesystem netlink_kobject_uevent_socket process unix_dgram_socket
file netlink_ip6fw_socket passwd udp_socket
fifo_file netlink_firewall_socket packet_socket tcp_socket
fd netlink_dnrt_socket node system
dir netlink_audit_socket netlink_xfrm_socket socket
chr_file netif netlink_tcpdiag_socket sock_file
capability msgq netlink_socket shm
blk_file msg netlink_selinux_socket sem
association lnk_file netlink_route_socket security

트레시스 사이트 들어가면 PDF가 있는데 그 안에 내용이다.

SELINUX에서는 41개의 커널 오브젝트 클레스를 정의해 놓고

동작은 20개를 정의해 놓았다. 2005년도 자료라 지금은 또 달라졌겠지.

믓튼,

시스템콜을 막는다고 하면 얼추맞는 표현일 것 같다.

일반적으로 리눅스 시스템에서

rwxrwxrwx 로 구성된 보안에서 한단계 업글된 보안이라고 봐도 되겠다.

root 권한을 획득하면 아무 파일에나 접근할 수 있었지만 root도 하나의 context로

분류되어서 다른 context로의 권한이 없으면 접근하지 못한다.

rwx를 dac, selinux를 mac 타입이라고 한다. 영어는 어렵다.

mac는 멘데터리 액세스 컨트롤 mandatory Access Control 이다.

법에 정해진대로 한다는 거지. root가 맘대로 바꿀 수 있는게 아니라.

즉, 더 이상의 super user는 없다는 이야기.(뭐 해킹 안되는 시스템이야 있겠냐만은)

자잘한 해킹 빼고 지금까지 root를 획득하는게 linux 해킹의 전부 였다고 해도 과언이 아닌데

root도 할 수 있는게 제한되어 있다고 보면 되겠다.

그럼 UID, GID, file permission처럼 또 하나의 네임 텍이 붙어야 할텐데

이미 소스에서 얼핏 보았던

con

이란 녀석

context의 줄임이고 SELinux에서는

security context로 통한다.

명명 규칙은 ... 

--> 나도 SEAndroid를 하다보니 감으로 때려 맞추는게 많아서 정확하진 않다. 그러나 ~ 같은데 라는 표현을 쓰기도 하지만 읽기 너무 불편한 감도 있어서 단언체로 말하는 경우도 있다. 의심해 보길 바란다. <나도 나중에 복습할 때 의심해야 하므로 적어둠> 


context의 경우
user:role:type
으로 가는데...

user가 u면
u:u_r:u_t

로 나가는 것이다.
_r은 role
_t는 type으로 보면 된다.

트레시스의 PDF 보면 [:s0:c0.c128]로 mls  identifier 로 되어 있는 부분은
multi lavel system 즉, 멀티 유저 상황에서 정의하는 부분으로 지식이 없으니 누가 댓글로 좀 알려 줬으면 지식이 탄탄해 질 것 같다.


SEAndroid를 직접 포팅할게 아니면 정책 부분밖에 할게 없는데

정책 조정을 하려면 용어를 알아야 한다.

오브젝트는 위에서 말한 41개 를 말하는 것이고
서브젝트는 프로세스를 말한다.

프로세스 타입은 도메인이라고 불린다.

도메인이란 녀석은 어디 빠지는 곳이 없구먼 ㅡㅡ;

통상 메모리에 올라가서 실행되고 있는 프로그램을 프로세스라고 하는데

소켓 같은 애들은 프로세스가 아니니까. 이런 놈들도 컨트롤을 하려면

object라는 이름으로 묶어서 프로세스(서브젝트), 기타 오브젝트(오브젝트)를 

타입으로 관리하는게 SELINUX 되시겠다.

프로세스(서브젝트)든 파일(오브젝트)던

user:rold:type 이라는 context가 붙는데

ls -Z
ps -eZ

로 볼 수 있다. Z만 붙여주면 된다는 뜻.

-r-------- root root system_u:object_r:shadow_t /etc/shadow

뭐 이런 식으로 보이는거지.

system 유저는 object 롤이고 shdow 타입을 가지고 있다는...

중요한 건 타입인데(정책을 정해야 하니까)

우리 패스워드가 저장되는 /etc/passwd의 본체 파일인 /etc/shadow는

shadow_t 이란 것이다.

요새는 대세가 우분투라 대부분 우분투를 쓸 것인데

/etc/selinux/default/users/system.users를 열어 보면

user system_u roles { system_r } level s0 range s0 - s0:c0.c1023;
user user_u roles { user_r } level s0 range s0;
user staff_u roles { staff_r sysadm_r  } level s0 range s0 - s0:c0.c1023;
user sysadm_u roles { sysadm_r } level s0 range s0 - s0:c0.c1023;
user unconfined_u roles { unconfined_r system_r } level s0 range s0 - s0:c0.c1023;
user root roles { sysadm_r staff_r  system_r } level s0 range s0 - s0:c0.c1023;

라고 되어 있다.

root의 role은 sysadm, staff, system 이란 거다. 
root는 uid 롤은 gid 정도로 생각하면 이해가 빠르다.

DAC랑 MAC 둘 다 통과해야 유저는 보안을 넘어 뭔가를 할 수 있고 

리눅스 유저들은 대부분 리눅스 기본 보안은 이해하니까 그걸로 설명해 놓았다.

누가? 트레시스가 
어디에? PDF에

덧붙이면 이렇다.

유저는 set uid를 이용해서 root권한을 잠깐 획득해서 비번을 바꾼다는 건 사람들이 다 아는 사실... 사족으로 잠시 root uid를 얻었을 때 중간에 빠져나오는 방법으로 root권한을 획득하는 방법도 있었지.


그러나 selinux에서는 allow 룰도 필요하다. 기본적으로는 다 막혀 있으니


allow user_t passwd_exec_t : file { getattr execute };

passwd 명령어로 파일을 실행하니까 user 타입이 passwd실행타입에
파일 속성을 읽고 실행할 수 있는 권한이 필요하다.

allow passwd_t passwd_exec_t : file entrypoint
allow user_t passwd_t : process transition
type_transition user_t passwd_exec_t : process passwd_t;

이런 역할을 하는데... 왜 설명이 없냐면 알 수 없기 때문.
dmesg 로 denied 되는 로그를 찍어봐야 아... 어떤 타입이 필요한 지 알 수 있다.

트레시스에서 만든 유틸인 audit2allow를 하면 쉽다.

dmesg | audit2allow

해버리면 denied 된 것을 풀어주는 allow 룰을 생성해 준다.

policy 파일은 .te 로 확장자가 붙는데

type enforce 약자다. enforcement인가?

믓튼...

간단히 allow만 추가하면 될 것 같지만 호락호락 하지만은 않다.

C처럼 assert.te 파일이 있어서 allow 못하게 하는 룰도 정의할  수 있다.
neverallow { appdomain -system_app } system_data_file:dir_file_class_set write;
요렇게 되어 있으면
allow platform_app system_data_file:sock_file { create unlink write setattr };
이럴 룰이 안 먹는다.

매크로도 있고.

냠... 공부할거 많네.

암튼, 너무 강력해서.... 사실 정책 정의만 잘해도 백신이 필요없을 정도다.

뭐.. 앱단에서는 그리 강력하지는 않다.

마켓에 seandroid 로 검색되는 앱을 하나 올렸는데

폰 터치를 다 막아서 폰을 먹통 만드는 프로그램이다.

seandroid로 막을 수 있긴 한데 그걸 막으면 서비스에서 폰 터치로 좋은 기능을 하는 앱들도 같이 막히게 된다.

SELinux(Android)의 강력함과 정책으로 막는 것과 푸는 것의 경계를 알리고자 만든건데.

쇠귀에 경읽기가 되어버렸지 모.

암튼 잘 사용되길 바란다.

SELINUX 파이팅.

그러나 난 안쓴다.

selinux 004 둘러보기

core init을 살펴보자.

수정파일 부터

android/system/core/init/

Android.mk
builtins.c
devices.c / h
init.c / h
init_parser.c
keywords.h
property_service.c
util.c / h

우선 Android.mk를 보면 libselinux 피처를 넣는다.
얜(libselinux) 실재로 수행되는 녀석들 집합이라 뭘하던 들어간다.



context 관련 함수 처리 부분이 들어가 있는데

int selabel_lookup(struct selabel_handle *rec, security_context_t *con,
                   const char *key, int type)
{
        struct selabel_lookup_rec *lr;
    
        lr = selabel_lookup_common(rec, 1, key, type);
        if (!lr)
                return -1;
        
        *con = strdup(lr->ctx_raw);
        return *con ? 0 : -1;
}   
가 자주 보인다. 물론 이런 본체는 libselinux에 있다.

struct selabel_handle {
        /* arguments that were passed to selabel_open */
        unsigned int backend;
        int validating;

        /* labeling operations */
        struct selabel_lookup_rec *(*func_lookup) (struct selabel_handle *h,
                                                   const char *key, int type);
        void (*func_close) (struct selabel_handle *h);
        void (*func_stats) (struct selabel_handle *h);

        /* supports backend-specific state information */
        void *data;

        /* substitution support */
        struct selabel_sub *subs;
};

에서 

struct selabel_sub {
        char *src;
        int slen;  
        char *dst;
        struct selabel_sub *next; 
};          

요 녀석이 context에 뭔가 하는 녀석으로 보인다. oneway linked list 형태가 보여 뭔가 찜찜하지만, grep으로 찾아 보기엔 시간이 걸리고 분석 내용이 많으니 가설만 세우고 넘어가자. 

util.c에 보면 restorecon 본체도 보인다.

int restorecon(const char *pathname)
{
#ifdef HAVE_SELINUX
    char *secontext = NULL;
    struct stat sb;
    int i;

    if (is_selinux_enabled() <= 0 || !sehandle)
        return 0;

    if (lstat(pathname, &sb) < 0)
        return -errno;
    if (selabel_lookup(sehandle, &secontext, pathname, sb.st_mode) < 0)
        return -errno;
    if (lsetfilecon(pathname, secontext) < 0) {
        freecon(secontext);
        return -errno;
    }
    freecon(secontext);
#endif
    return 0;
}

흐름상, 레이블 찾아보고 file context를 적용한다. 제대로 안되면 context 해제하면서 -1을  던진다.

init.c를 보면

#ifdef HAVE_SELINUX
static const struct selinux_opt seopts_prop[] = {
        { SELABEL_OPT_PATH, "/data/system/property_contexts" },
        { SELABEL_OPT_PATH, "/property_contexts" },
        { 0, NULL }
};

저런 폴더가 사용되고

void selinux_init_all_handles(void)
{
    sehandle = selinux_android_file_context_handle();
    sehandle_prop = selinux_android_prop_context_handle();
}

핸들은 2종류고

int selinux_reload_policy(void)
{
    if (!selinux_enabled) {
        return -1;
    }

    INFO("SELinux: Attempting to reload policy files\n");

    if (selinux_android_reload_policy() == -1) {
        return -1;
    }

    if (sehandle)
        selabel_close(sehandle);

    if (sehandle_prop)
        selabel_close(sehandle_prop);

    selinux_init_all_handles();
    return 0;
}

reload 한다는건 핸들 2종류는 init한다는 것.


keywords.c에는

restorecon, setcon, setenforce, setsebool이 추가되었다.

요렇게 코어 부분 업뎃~


2013년 1월 23일 수요일

selinux 003 둘러보기

이번엔 구글 안드로이드 4.2.1_r1에서 rootdir쪽을 살펴본다.

init.rc를 보면




    # Set the security context for the init process.
    # This should occur before anything else (e.g. ueventd) is started.
    setcon u:r:init:s0

.
.
.
service ueventd /sbin/ueventd
    class core
    critical
    seclabel u:r:ueventd:s0
.
.
.
# adbd is controlled via property triggers in init..usb.rc
service adbd /sbin/adbd
    class core
    socket adbd stream 660 system system
    disabled
    seclabel u:r:adbd:s0


뭐 setcon이나 setlabel이나 

context를 정의해 주는 것인데....

https://android.googlesource.com/platform/system/core/+/e46f9d510db9351682cf17c49115110870147335

에 보면 


init:
- Load policy at boot.
- Set the security context for service daemons and their sockets.
- New built-in commands: setcon, setenforce, restorecon, setsebool.
- New option for services: seclabel.


서비스를 위한 옵션이라고 되어 있다.

음... 좋아 서비스에는 쟬 써야해...


selinux에서처럼 
# setsebool -P httpd_can_network_connect_db on
bool값의 종류들을 알아두면 관련 서비스가 안 먹을 때 setsebool로 해결이 가능할 것도 같다.
다시 소스로 돌아가서 rootdir 아래쪽에
init.goldfish.rc를 보면
on boot setsebool in_qemu=1 restorecon /sys/qemu_trace/process_name restorecon /sys/qemu_trace/state restorecon /sys/qemu_trace/symbol
이런 부분도 패치가 되었다.
골드피쉬가 붙는 것들은 에뮬레이터를 위한 녀석이다.
http://fedoraproject.org/wiki/SELinux/restorecon
보면 설명이 있는데
역시나 context 설정을 위한 친구다.
restorecon(8)                                                    restorecon(8)

NAME
restorecon - set file security contexts.


This manual page describes the restorecon program.

This  program  is  primarily used to set the security context (extended
attributes) on one or more files.

It can be run at any time to correct errors, to  add  support  for  new
policy,  or  with the -n option it can just check whether the file con-
texts are all as you expect.


에러 잡을 때 쓴다는데 그럼 어떤 에러들이 있는 것일까?


-----------------------------------------------
You don't have permission to access /...../... on this server. 이란 403 퍼미션 에러가 났을 경우.
# restorecon -R -v /documentroot
http://allegrett0.tistory.com/entry/restorecon
-----------------------------------------------
Forbidden You don't have permission to access / on this server.
/var/log/audit/audit.log 에 다음과 같이 에러가 뜹니다. type=AVC msg=audit(1177139220.333:330): avc: denied { getattr } for pid=4337 comm="httpd" name="phpMyAdmin-2.9.1.1-all-languages" dev=dm-0 ino=6418532 scontext=root:system_r:httpd_t:s0 tcontext=root:object_r:user_home_t:s0 tclass=dir type=SYSCALL msg=audit(1177139220.333:330): arch=40000003 syscall=196 success=no exit=-13 a0=91d5f38 a1=bf90d63c a2=265ff4 a3=2008171 items=0 ppid=4332 pid=4337 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) comm="httpd" exe="/usr/sbin/httpd" subj=root:system_r:httpd_t:s0 key=(null) type=AVC_PATH msg=audit(1177139220.333:330): path="/var/www/html/somedir"
# restorecon -rv /home
http://syynice.egloos.com/8747468
-----------------------------------------------
인터넷에서 찾은 두 가지 경우를 볼 때
CONTEXT 정보가 제대로 붙지 않은 경우(TYPE이라고 할 수도 있을까..)
문제가 발생하는데 이 때 해당 디렉토리에 제대로된 context 값을 붙여주는 엯할을 한다.
그게 file context에 있는 값을 기준으로 하는 건지 그냥 그 디렉토리 이름을
변형해서 해 주는 것인지는 소스를 까봐야 알 듯.
변경파일
android/system/core/rootdir/init.rc
android/system/core/rootdir/etc/init.goldfish.rc

selinux 002 둘러보기

android/system/core/toolsbox/Android.mk를 보면

ifeq ($(HAVE_SELINUX),true)

TOOLS += \
        getenforce \
        setenforce \
        chcon \
        restorecon \
        runcon \
        getsebool \
        setsebool \
        load_policy

endif

요렇게 되어 있다.

측, 요놈들이 selinux를 위해서 추가된 파일들이다.

중요한 놈은

setenforce라는 친구인데

selinux의 enfocing, permissive를 결정짓는 중요한 유틸리티이다.

이 친구는 결국

android/external/libselinux/src/setenforce.c 를 호출해서
enforcing을 하는데 

security_setenforce(1);

요놈으로 본체를 보면

int security_setenforce(int value) 
{
        int fd, ret;
        char path[PATH_MAX];
        char buf[20];
    
        if (!selinux_mnt) {
                errno = ENOENT; 
                return -1;
        }
    
        snprintf(path, sizeof path, "%s/enforce", selinux_mnt);
        fd = open(path, O_RDWR);
        if (fd < 0)
                return -1;
            
        snprintf(buf, sizeof buf, "%d", value);
        ret = write(fd, buf, strlen(buf));
        close(fd);
        if (ret < 0)
                return -1;
    
        return 0;
}             

selinux mounting point안에 enforce라는 친구에게 20바이트로 된
1이나 0을 써버린다(쓰는 숫자는 하난데 왜케 공간이 큰거야...)



가 중요한 친구임.

http://www.linux.co.kr/home/lecture/index.php?cateNo=&secNo=&theNo=&leccode=10638
에 보면

관련 유틸리티 설명이 되어 있다.

오~ 좋은 내용들. 역시 우리나라 리눅스 유저들에게 큰 도움된 슈퍼유저코리아다.
일전에 공개소프트웨어 발표했었을 때 스카웃 제의도 하셨었는데...
대표이사님이 부산분이시라 순간 흔들렸었지만.
할일이 많았기에...

다시 그 때로 돌아간다면 리눅스의 길을 선택했었을까...




차례(전체목차)

1. SELInux(Security-Enhanced Linux) 란? 2. SELinux 정책이란 무엇인가?
3. SELinux 설치여부 확인
4. SELinux 기본설정 - /etc/sysconfig/selinux
5. SELinux 서비스 설정 - setenforce
6. SELinux 서비스 설정 - chcon
7. SELinux 서비스 설정 - setsebool
8. 사용중인 정책을 교체하는 방법은?
9. SELinux LOG
10. Audit2allow
11. avc : denied
12. 참고문헌 또는 URL
5. SELinux 서비스 설정 - setenforce top

SELinux의 서비스 상태를 변경해야 하는 필요가 있을때는 직접 /etc/sysconfig/selinux 파일에서 SELINUX=enforcing , 또는 SELINUX=permissive 처럼 수정해서 변경하는 방법도 있지만 setenforce 라는 명령어를 이용할수 있다.
"setenforce 0" 이라고 명령을 내리는것은 SELINUX=permissive 와 동일한 결과이며, "setenforce 1" 은 enforcing 모드를 의미한다. 시스템에서 SELinux 를 완전히 사용하지 않으려면 /etc/sysconfig/selinux 파일에서 SELINUX=disabled 처럼 설정하거나 시스템 부팅시에 부트로더의 파라미터로 selinux=0 이라고 주고 부팅하면 된다. (grub 을 사용하는 경우라면 grub 화면에서 e 를 누르고 편집모드로 들어간뒤에 kernel 줄의 맨 뒤에 selinux=0 을 적어주고 ESC, 그리고 b 를 눌러서 부팅하면 된다.)

sentenforce 명령은 sysadm_r 권한을 갖고 수행해야 한다; 그러기 위해, newrole 명령을 사용하거나, 아니면, su -를 사용하여 root 로 사용자 전환을 하면, 자동으로 sysadm_r 권한을 얻을 수 있다.
6. SELinux 서비스 설정 - chcon top

SELinux 의 보안문맥을 변경해야 하는 경우에는 chcon 이라는 명령을 사용할수 있다.
아파치를 사용중에 분명히 디렉토리를 생성했는데도 에러가 난다면 아래처럼 http_user_content_t 를 해당 DocumentRoot 에 적용해줌으로 해결해 줄수있다.
chcon -R -t httpd_user_content_t /home/사용자계정/public_html
7. SELinux 서비스 설정 - setsebool top

S[root@ns ~]# cat /etc/selinux/targeted/booleans
allow_ypbind=1
dhcpd_disable_trans=0
httpd_disable_trans=1
httpd_enable_cgi=1
httpd_enable_homedirs=1
httpd_ssi_exec=1
httpd_tty_comm=0
httpd_unified=1
mysqld_disable_trans=0
named_disable_trans=1
named_write_master_zones=1
nscd_disable_trans=1
ntpd_disable_trans=0
portmap_disable_trans=0
postgresql_disable_trans=0
snmpd_disable_trans=0
squid_disable_trans=0
syslogd_disable_trans=0
winbind_disable_trans=0
ypbind_disable_trans=0

RHEL4의 경우 전환가능한 시스템의 SELinux 설정값들을 나타내는 파일은 /etc/selinux/targeted/booleans 파일이다. 파일안의 각 항목은 system-config-securitylevel 이라는 어플리케이션이나 setsebool 이라는 명령을 이용해서 변경시킬수 있으며 setsebools 을 이용하는 경우 -P 옵션을 사용하지 않으면 설정파일은 변경되지 않고 현재의 설정만 바뀌지만 -P 옵션을 같이 사용하면 /etc/selinux/targeted/booleans 파일의 내용까지 같이 변경되어 시스템 리부팅후에도 적용된다.
8. 사용중인 정책을 교체하는 방법은? top

배정책 교체는 가볍게 취할 사안이 아니다.
연구 목적으로 시험 장비(test machine)에서 새 정책을 시도하는 이외, 생산 시스템(production system)에서는 다른 정책으로 교체하기 전에 현황을 심각하게 고려해야 한다.

교체 작업은 간단하다. 이는 매우 안전한 방법이지만, 우선 시험 시스템에서 일차 시도해 보는 것이 바람직하다.
한 가지 방법은 system-config-securitylevel을 사용하여 정책을 바꾸고 재명명(relabel)하도록 파일 시스템을 설정하는 것이다.

수작업 절차는 다음과 같다:
1. /etc/selinux/config을 편집하고 SELINUXTYPE=policyname으로 정책 유형을 바꾼다.
2. 재부팅하여 돌아올 수 있는 지 확인하기위해, SELINUX=permissive모드로 설정한다. 이렇게 하면, SELinux는 정확한 정책하에서 가동될 것이지만, 만일 부정확한 파일 문맥 명명(labeling)과 같은 문제가 있으면 로그인하도록 할 것이다.
3. sysadm_r 역할을 갖춘 root로 파일 시스템을 재명명한다(relabel):
id -Z
root:sysadm_r:sysadm_t
fixfiles relabel

옵션 -l /path/to/logfile을 사용하여 표준 출력으로 로그를 볼 수 있고, 옵션 -o /path/to/file을 사용하여 검토(checked)되거나 재명명(relabel ed)된 모든 파일 리스트를 저장할 수 있다.

4. 시스템을 재부팅한다. 새 정책하에서의 재시작은 모든 시스템 프로세스가 적절한 문맥에서 시작되고 정책 변경으로 인한 모든 문제가 드러나게 한다.
5. sestatus -v 명령으로 발효된 변경사항을 확인한다. Permissive 모드로 가동된 새 시스템에서, avc: denied 메시지를 /var/log/messages에서 확인한다. 이들은 새 정책하에 문제없이 시스템이 가동되도록 해결해야 할 문제들을 표시해 준다.

6. 새 정책하에서 시스템이 만족스럽게 돌아갈 때, SELINUX=enforcing 으로 바꿔 실행 권한을 부여한다. 실시간에 enforcing을 활성화 시키기 위해 재부팅하거나 setenforce 1 을 실행한다.
9. SELinux LOG top

SSELinux 의 로그는 /var/log/messages 파일에 아래처럼 나타난다.

kernel: audit(1114070701.193:0): avc: denied { read } for pid=24216
exe=/usr/libexec/mysqld name=mysql dev=cciss/c0d0p6 ino=16408
scontext=user_u:system_r:mysqld_t tcontext=root:object_r:var_lib_t
tclass=dir

이 로그는 아래와 같이 해석할수 있다.

- 읽기 요청이 거부되었다.
- PID 24216을 가진 프로세스가 read를 시도한다
- 해당프로세스는 /usr/libexec/mysqld 이다
- /dev/cciss/c0d0p6 에서 작동되고 있다
- inode 는 16408이다.
- 프로세스의 SELinux 문맥은 user_u:system_r:mysqld_t 이다.
- tcontext=root:object_r:var_lib_t : 이파일이 읽기를 시도하는 파일은 var_lib_t 타입의 root 소유파일이다.

SELinux LOG 각 항목의 의미

audit(timestamp) - This field states that it's an audit message from SELinux and that it was logged at timestamp time (in seconds since Jan. 1st, 1970).

avc - This message was from the SELinux access vector cache. Pretty much every message you are likely to see is from this cache.

denied | accepted - This field indicates whether the action was denied or accepted. You may see logs of accepted messages in some cases (like reloading the policy).

{ read | write | unlink | ... } - This field shows the type of action that was attempted, such as reading a file, writing, unlinking, loading policy, etc.

for pid= - This is the process ID that attempted the action.

exe=- This is the path to the executable that started the process.

name= - This is the name of the target on which the action was attempted.

dev= - This is the device on which the target file is located.

ino= - This is the inode of the target of the action.

scontext= - This is the process's security context. This contains user, role, and type.

tcontext= - This is the security context of the target of this action, for example, the file, directory, etc.

tclass= - This is the class of the target object, such as directory, file, device node, or something else.
10. Audit2allow top

정책 작성자에게 유용한 도구는 /usr/bin/audit2allow 인데 이것은 /var/log/messages의 avc 메시지를 SELinux에 의해 사용될 수 있는 규칙으로 번역해준다. 사용이 불가능하다면 policycoreutils 패키지에 속해있으므로 yum install policycoreutils 처럼 설치 가능하다.
audit2allow명령은 세가지 방법으로 입력을 받을 수 있다. 기본은 표준입력 (stdin)이다. -i 옵션을 사용하면 /var/log/messages 로부터 입력을 읽을 수 있고 -d옵션을 사용하면 dmesg 출력으로부터 입력을 읽을 수 있다.
11. avc: denied top

이 메시지는 현재 실행된 SELinux 정책이 그 응용프로그램의 동작을 허락하지 않기 때문이다. 이러한 일에는 여러 가지 사유가 존재한다.

첫째, 응용프로그램이 접근하려는 파일중 하나가 잘못 명명되어있을 수 있다. 만일 AVC 메시지가 특정 파일을 참조한다면, ls -alZ /path/to/file 을 수행하여 현재 참조하는 파일명(current label)을 조사해 보라. 만일 그것이 잘못되어 보이면, restorecon -v /path/to/file 을 시도해보라. 만일 파일과 관련된 매우 많 은 거부(denials) 상황이 존재하면, fixfiles relabel 을 수행하거나, 반복적으로 디렉토리 경로를 재명명하기 위해서 -R옵션과 함께 restorecon 을 수행하고 싶을 수 있다.

다른 때에는, 거부(denials) 현상은 정책에 의해 거부되도록 프로그램에 설정을 바꿔서 발생될 수 있다. 예를 들면, 만일 Apache를 8800포트로 바꾸면, 보안 정책, apache.te,도 관련하여 바꿔야 할 필요가 생긴다. 정책 작성에 관한 상세한 정보가 필요하면, 외부연결 리스트(External Link List)를 보라.
12. 참고문헌 또는 URL top

Home of the SELinux project - http://www.nsa.gov/selinux/
The Un-Official SELinux FAQ - http://www.crypt.gen.nz/selinux/faq.html
SELinux link zoo - http://www.crypt.gen.nz/selinux/links.html
Ubuntu Linux SELinux pages - https://www.ubuntulinux.org/wiki/SELinux
2005.8 Sys Admin Magazine - http://www.samag.com/documents/s=9820/sam0508a/0508a.htm
NSA SELinux FAQ - http://www.nsa.gov/selinux/info/faq.cfm
SELinux community page - http://selinux.sourceforge.net
UnOfficial FAQ - http://www.crypt.gen.nz/selinux/faq.html
Writing SE Linux policy HOWTO - https://sourceforge.net/docman/display_doc.php?docid=21959&group_id=21266
Getting Started with SE Linux HOWTO: the new SE Linux (Debian) - https://sourceforge.net/docman/display_doc.php?docid=20372&group_id=21266


toolsbox 변경 파일

android/system/core/toolsbox/

Android.mk
chcon.c
getenforce.c
getsebool.c
id.c
load_policy.c
ls.c
ps.c
restorecon.c
runcon.c
setenforce.c
setsebool.c

selinux 001 둘러보기

구글에서 공개된 현재 최신 버전인 안드로이드(android 4.2.1_r1)에서 SELINUX 부분만 떼서 분석을 해 보려고 한다.

그 첫번째... extras 패치 내용... (이K님 감사합니다.)

extras는 말 그대로 엑스트라들을 모아놓은 폴더이다.

어디 넣기 애매한 것들...

android/system/extras/ext4_utils를 보면

ext4 파일 시스템을 만들어 주는 유틸리티가 있다.

int wipe_block_device(int fd, s64 len)
{
        u64 range[2];
        int ret;

        range[0] = 0;
        range[1] = len;
        ret = ioctl(fd, BLKSECDISCARD, &range);
        if (ret < 0) {
                range[0] = 0;
                range[1] = len;
                ret = ioctl(fd, BLKDISCARD, &range);
                if (ret < 0) {
                        warn("Discard failed\n");
                        return 1;
                } else {
                        warn("Wipe via secure discard failed, used discard instead\
n");
                        return 0;
                }
        }

        return 0;
}

파일 시스템 wipe out 해주는 부분도 여기 있다.
시스템 레벨에 있어서 그런지 icotl 명령어가 있다.
여기다가 먼 코딩을 해 놓으면 wipe out 할 때 시스템 명령어를 써서 뭔짓을 할 수 있겠군.

암튼, 대충 이런 용도로 쓰는 이곳에 SELINUX를 어떻게 포팅하였는지 알아보자.


소스를 보면

ifeq ($(HAVE_SELINUX), true)
LOCAL_C_INCLUDES += external/libselinux/include
LOCAL_SHARED_LIBRARIES += libselinux
LOCAL_CFLAGS += -DHAVE_SELINUX
endif # HAVE_SELINUX

이런 친구들이 잔뜩있다.

보면

다 같은 구문

include $(CLEAR_VARS)는 android/build/core/clear_vars.mk를 인클루드 해서
VARIABLES를 다 지운다. 새출발을 위한 준비.

HAVE_SELINUX가 있는지 다 체킹해서 있으면 selinux library를 넣어준다.

얜 Buildconfigration file에 지정되어 있으면 같이 빌드가 되는 것이겄지.


content.c를 보면

int inode_set_selinux(u32 inode_num, const char *secon)
{
        struct ext4_inode *inode = get_inode(inode_num);
        u32 *hdr;
        struct ext4_xattr_entry *entry;
        size_t name_len = strlen(XATTR_SELINUX_SUFFIX);
        size_t value_len;
        size_t size, min_offs;
        char *val;

        if (!secon)
                return 0;

        if (!inode)
                return -1;

        hdr = (u32 *) (inode + 1);
        *hdr = cpu_to_le32(EXT4_XATTR_MAGIC);
        entry = (struct ext4_xattr_entry *) (hdr+1);
        memset(entry, 0, EXT4_XATTR_LEN(name_len));
        entry->e_name_index = EXT4_XATTR_INDEX_SECURITY;
        entry->e_name_len = name_len;
        memcpy(entry->e_name, XATTR_SELINUX_SUFFIX, name_len);
        value_len = strlen(secon)+1;
        entry->e_value_size = cpu_to_le32(value_len);
        min_offs = (char *)inode + info.inode_size - (char*) entry;
        size = EXT4_XATTR_SIZE(value_len);
        val = (char *)entry + min_offs - size;
        entry->e_value_offs = cpu_to_le16(min_offs - size);
        memset(val + size - EXT4_XATTR_PAD, 0, EXT4_XATTR_PAD);
        memcpy(val, secon, value_len);
        inode->i_extra_isize = cpu_to_le16(sizeof(struct ext4_inode) - EXT4_GOOD_OL
D_INODE_SIZE);

        return 0;
}

요렇게 되어 있다.

https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
보면


Extended attributes (xattrs) are typically stored in a separate data block on the disk and referenced from inodes via inode.i_file_acl*. The first use of extended attributes seems to have been for storing file ACLs and other security data (selinux)

 selinux를 xattr 영역에 넣는거다.

같은 폴더의

make_ext4fs.c를 보면

ret = inode_set_selinux(entry_inode, dentries[i].secon);
if (ret)
error("failed to set SELinux context on %s\n", dentries[i].path);

해당 함수를 쓰는 부분이 나온다.

int make_ext4fs(const char *filename, s64 len,
                const char *mountpoint, struct selabel_handle *sehnd)
함수 인자로도 들어가 있다.

여기까지만 봐도 ext4 파일 시스템을 만들 때 selinux를 위한 정보가 들어가는 것을 알 수 있다.

if (directory)
root_inode_num = build_directory_structure(directory, mountpoint, 0, android, sehnd);
else
디렉토리 구조 만들때에도...


struct ext4_xattr_entry {
    __u8 e_name_len;
    __u8 e_name_index;
    __le16 e_value_offs;
    __le32 e_value_block;
    __le32 e_value_size;
    __le32 e_hash;
    char e_name[0];
};
라는 xattr.h가 추가되었다.

위키보면

Offset Type Name Description
0x0 __u8 e_name_len Length of name.
0x1 __u8 e_name_index Attribute name index.
0x2 __le16 e_value_offs Location of this attribute's value on the disk block where it is stored. Multiple attributes can share the same value.
0x4 __le32 e_value_block The disk block where the value is stored. Zero indicates the value is in the same block as this entry.
0x8 __le32 e_value_size Length of attribute value.
0xC __le32 e_hash Hash value of name and value.
0x10 char e_name[e_name_len] Attribute name. Does not include trailing NULL. 

더 자세한건 소스레벨 공부~ ext4 파일 시스템도 알아야 겠지만 리눅스쪽 공부는 더이상 하기 싫다. PE 파일 배웠던 거나 완전히 내것으로 만들고 싶은데..


extras 에 selinux 관련 파일

android/system/extras/ext4_utils/

Android.mk
contents.c
contents.h
make_ext4fs.c
make_ext4fs.h
make_ext4fs_main.c
mkuserimg.sh
xattr.h


결론 seandoird는 ext4 파일시스템에 xattr에다가 secon{security context(?)}정보를 써 넣는다.

bootcamp 지우기

맥북 프로 레티나 터치바 diskutility 에서 bootcamp 파티션 삭제하면 검은색에서 회색으로 바뀐다(APFS로 지정) 파틴션 아이콘 클릭하여 - 버튼을 이용하여 삭제하면 끝.