IT HOW

무엇이는 물어보세요

컨텐츠로 건너뛰기
  • 프로그래밍
  • 파이썬
  • 자바
  • 자바스크립트
  • 리눅스
  • c#

로그인 및 su 내부 다음 Init은 시작

Linux에서 사용자 권한이 어떻게 작동하는지 이해하려고합니다. 커널이 부팅되고 init루트로 시작 됩니다. 그런 다음 Init은 시작 스크립트를 실행 하고 다시 루트로 getty( agetty)를 실행 합니다. Agetty는 단지 사용자 이름을 읽고 login여전히 루트로 실행 한다고 생각합니다. 아직 흥미로운 것은 없습니다. 그러나 로그인 은 무엇을합니까? “로그인 시도”보다 더 나은 것을 찾을 수 없었습니다. 로그인에서 비밀번호가 일치하고 일반 사용자로 로그인하려고한다고 가정하면 사용자 ID는 어떻게 변경됩니까? 시스템 호출이 필요하다고 생각했지만 찾을 수 없었습니다.


또한 약 su. su‘setuid’비트가 설정되어 있으므로 실행할 때 항상 루트로 실행됩니다. 그러나 일반적인 사용자로 로그인하라는 메시지가 표시되면 다시 사용자 ID를 변경해야합니다. 동일한 “마법”이 발생 su하거나 login사용자를 변경해야 할 때 올바르게 이해하고 있습니까? 그렇다면 왜 두 개의 다른 프로그램이 있습니까? 로그인을 실행할 때 추가로 심각한 비즈니스가 발생합니까?



답변

로그인 프로그램의 기능에는 여러 부분이 있습니다. 로그인 프로그램은 로그인하려는 사용자와 상호 작용하는 방식이 다릅니다. 다음은 몇 가지 예입니다.

  • login: 텍스트 터미널에서 입력을 읽습니다.
  • su: 이미 로그인 한 사용자가 호출하고 명령 줄 인수에서 대부분의 데이터와 터미널에서 인증 데이터 (암호)를 얻습니다.
  • gksu:와 비슷 su하지만 X에서 인증 데이터를 읽습니다.
  • rlogind: rlogin 프로토콜을 통해 TCP 연결을 통해 입력을 얻습니다.
  • sshd: SSH 프로토콜을 통해 TCP 연결을 통해 입력을 얻습니다.
  • X 디스플레이 관리자 (xdm, gdm, kdm,…) :와 비슷 login하지만 X 디스플레이에서 입력 읽기

이 프로그램들은 비슷한 방식으로 작동합니다.

  1. 첫 번째 부분은 인증입니다 . 프로그램은 사용자의 입력을 읽고 사용자에게 로그인 권한이 있는지 여부를 결정합니다. 기존의 방법은 사용자 이름과 암호를 읽고 사용자가 시스템의 사용자 데이터베이스에 언급되어 있는지 확인합니다. 사용자가 입력 한 비밀번호는 데이터베이스의 비밀번호입니다. 그러나 다른 많은 가능성이 있습니다 (일회성 비밀번호, 생체 인증, 인증 전송 등).

  2. 사용자에게 로그인 권한과 계정이 설정되면 로그인 프로그램은 사용자의 권한을 설정합니다 (예 :이 세션에서 사용자가 속한 그룹).

  3. 로그인 프로그램은 계정 제한을 확인할 수도 있습니다. 예를 들어, 로그인 시간 또는 최대 로그인 사용자 수를 강제하거나 특정 연결에서 특정 사용자를 거부 할 수 있습니다.

  4. 마지막으로 로그인 프로그램은 사용자 세션을 설정합니다. 몇 가지 하위 단계가 있습니다.

    1. 프로세스 권한을 권한 부여에서 결정된 사용자, 그룹, 한계 등으로 설정 하십시오. 여기에서이 하위 단계의 간단한 예를 볼 수 있습니다 (사용자 및 그룹 만 처리 함). 기본적으로 로그인 프로그램은 여전히 ​​루트로 실행 중이므로 최대 권한을 갖습니다. 먼저 루트 사용자 이외의 모든 권한을 제거하고 마지막으로 setuid최소 권한을 삭제하도록 호출 합니다.
    2. 사용자의 홈 디렉토리를 마운트하고 “메일이 있습니다”메시지 등을 표시합니다.
    3. 사용자로서 일부 프로그램을 호출하십시오 (일반적으로 사용자의 쉘 ​​( login및 명령 su또는 sshd명령이 지정되지 않은 경우 X 디스플레이 관리자가 X 세션 관리자 또는 창 관리자를 호출 함)).

오늘날 대부분의 유니스는 PAM (Pluggable Authentication Modules) 을 사용하여 로그인 서비스를 균일하게 관리합니다. PAM은 기능을 4 가지 부분 으로 나눕니다 . “auth”는 인증 (위의 1)과 인증 (위의 2)을 모두 포함합니다. “계정”과 “세션”은 위의 3과 4와 같습니다. 로그인에는 사용되지 않고 인증 토큰 (예 : 비밀번호)을 업데이트하는 데 사용되는“비밀번호”도 있습니다.


답변

찾고자하는 시스템 호출을 비슷한 것으로 setuid하고, seteuid실제로 변경하려는 사용자 ID의 변형에 따라 전체 헴 패밀리가 있지만.

setgid프로세스가 실행되는 그룹을 변경하는 것과 같은 병렬 호출도 있습니다 .


답변

login필요한 경우 루트 권한을 삭제합니다. 처음에 루트 권한이 필요한 많은 프로그램은 루트로 시작하여 필요한 작업을 수행 한 다음 일반 사용자 계정으로 드롭하여 누군가 바이너리에 버그를 사용하여 액세스 할 수 있다는 걱정을하지 않아도됩니다. 루트 쉘. login당연히 특권을 더 오래 보유하지만 원칙은 같습니다.

실제로 루트 권한을 삭제하는 것은 매우 간단합니다. POSIX는 사용자 및 그룹 ID를 각각 변경하는 정의 setuid()및 setgid()기능을 제공합니다 (루트로 시작하는 경우 실제적이고 효과적 임). login이 두뿐만 아니라, 호출 initgroups()(이후 당신이 가질 수있는 추가 그룹 설정에 setgid단지 기본 그룹 ID를 설정)

물론 프로세스의 UID / GID 변경을 실제로 처리하는 것은 커널입니다. Linux 커널 시스템 호출 구현을 어떻게 찾을 수 있습니까? syscall에 대해 많이 설명합니다. 내 커널 소스에는 다음이 있습니다.

#define __NR_setgid 144
__SYSCALL(__NR_setgid, sys_setgid)
#define __NR_setuid 146
__SYSCALL(__NR_setuid, sys_setuid)

144와 146은 내 컴퓨터의 해당 기능에 대한 시스템 호출 번호입니다


su소스를 검사하여 그 기능 을 확인하지는 않았지만 exec()동일한 방법을 사용하여 쉘을 호출 하기 직전에 루트 권한도 삭제한다고 생각합니다.


답변


이 글은 리눅스 카테고리에 분류되었고 architecture, authentication, login 태그가 있으며 [호호] 야야님에 의해 2022년 3월 08일에 작성되었습니다.

글 네비게이션

← PDF에서 단어로 변환 소프트웨어? 변환 할 수있는 무료 소프트웨어가 있습니까? 여러 줄의 문장을 통해 Sed 대체 줄에 있으면 전체 문장을 수정하기 위해 →

태그

  • android
  • apt
  • backup
  • bash
  • boot
  • c#
  • c++
  • command-line
  • css
  • debian
  • email
  • firefox
  • git
  • google-chrome
  • hard-drive
  • html
  • ios
  • iphone
  • java
  • javascript
  • keyboard
  • linux
  • mac
  • macbook
  • macos
  • microsoft-excel
  • mysql
  • networking
  • performance
  • php
  • python
  • security
  • shell
  • ssh
  • terminal
  • ubuntu
  • unix
  • usb
  • vim
  • virtualbox
  • windows
  • windows-7
  • windows-8
  • windows-10
  • wireless-networking

최신 글

  • 디스크 정리에 많은 시간과 CPU가 필요한 이유는 무엇입니까? 많은 시간을 소비하는 것 같습니다. 파일을
  • Vim에서 일반 모드와 삽입 모드 사이에서 커서를 어떻게 변경합니까? 모양 등)를 변경하는 방법을 알고
  • 집계 대 구성 무엇인지 이해하지만 집계가 무엇인지에 대한 명확한
  • Python 생성기 패턴에 해당하는 C ++
  • 소프트웨어 일반인의 경력 경로는 무엇입니까? [닫은] 전문에 대한 질문 이 질문에 영감을. 소프트웨어 전문가가

카테고리

  • c#
  • c++
  • git
  • html
  • 리눅스
  • 서버
  • 소프트웨어
  • 슈퍼유저
  • 안드로이드
  • 애플
  • 우분투
  • 자바
  • 자바스크립트
  • 파이썬
  • 프로그래밍
apthow.com powered by hoya
Exit mobile version