웹사이트 검색

사용자 및 그룹, 파일 권한 및 속성 관리, 계정에 대한 sudo 액세스 활성화 - 8부


지난 8월, Linux Foundation은 LFCS 인증(Linux Foundation Certified Sysadmin)을 시작했습니다. 이 프로그램의 목적은 개인이 언제 어디서나 시험에 응시할 수 있도록 하는 것입니다. 전체 모니터링 및 분석과 함께 실행 중인 시스템 및 서비스 지원, 그리고 더 높은 수준의 지원 팀에 문제를 에스컬레이션해야 하는 시기를 결정할 수 있는 지능적인 의사 결정이 포함된 Linux 시스템에 대한 기본에서 중급 운영 지원 인증을 받습니다.

Linux Foundation 인증 프로그램에 대한 소개를 설명하는 다음 비디오를 간략히 살펴보십시오.

이 문서는 10개의 튜토리얼로 구성된 긴 시리즈 중 8부입니다. 이 섹션에서는 LFCS 인증 시험에 필요한 Linux 시스템의 사용자 및 그룹 권한을 관리하는 방법을 안내합니다.

Linux는 다중 사용자 운영 체제이기 때문에(다른 컴퓨터나 터미널의 여러 사용자가 단일 시스템에 액세스할 수 있다는 점에서) 효과적인 사용자 관리를 수행하는 방법(추가, 편집, 일시 중지 또는 삭제 방법)을 알아야 합니다. 사용자 계정에 할당된 작업을 수행하는 데 필요한 권한을 부여합니다.

사용자 계정 추가

새 사용자 계정을 추가하려면 다음 두 명령 중 하나를 루트로 실행할 수 있습니다.

adduser [new_account]
useradd [new_account]

새로운 사용자 계정이 시스템에 추가되면 다음 작업이 수행됩니다.

1. 홈 디렉토리가 생성됩니다(기본적으로 /home/username).

2. 다음 숨겨진 파일이 사용자의 홈 디렉토리에 복사되며 사용자 세션에 대한 환경 변수를 제공하는 데 사용됩니다.

.bash_logout
.bash_profile
.bashrc

3. /var/spool/mail/username에 해당 사용자에 대한 메일 스풀이 생성됩니다.

4. 그룹이 생성되고 새 사용자 계정과 동일한 이름이 지정됩니다.

/etc/passwd 이해

전체 계정 정보는 /etc/passwd 파일에 저장됩니다. 이 파일은 시스템 사용자 계정별 레코드를 포함하며 다음과 같은 형식을 갖습니다(필드는 콜론으로 구분됩니다).

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
  1. [username][Comment] 필드는 설명이 필요합니다.
  2. 두 번째 필드의 x는 계정이 [username]으로 로그온하는 데 필요한 숨겨진 비밀번호(/etc/shadow에 있음)로 보호된다는 것을 나타냅니다. .
  3. [UID][GID] 필드는 각각 [username]이 속한 사용자 ID와 기본 그룹 ID를 나타내는 정수입니다. .
  4. [홈 디렉터리][사용자 이름]의 홈 디렉터리에 대한 절대 경로를 나타내며,
  5. [기본 쉘]은 사용자가 시스템에 로그인할 때 사용할 수 있는 쉘입니다.
/etc/group 이해

그룹 정보는 /etc/group 파일에 저장됩니다. 각 레코드의 형식은 다음과 같습니다.

[Group name]:[Group password]:[GID]:[Group members]
  1. [그룹 이름]은 그룹의 이름입니다.
  2. [그룹 비밀번호]x는 그룹 비밀번호가 사용되지 않음을 나타냅니다.
  3. [GID]: /etc/passwd와 동일합니다.
  4. [그룹 구성원]: [그룹 이름]의 구성원인 사용자를 쉼표로 구분한 목록입니다.

계정을 추가한 후 usermod 명령을 사용하여 다음 정보(몇 가지 필드 이름 지정)를 편집할 수 있습니다. usermod의 기본 구문은 다음과 같습니다.

usermod [options] [username]
계정 만료일 설정

–expiredate 플래그와 YYYY-MM-DD 형식의 날짜를 사용하세요.

usermod --expiredate 2014-10-30 tecmint
보조 그룹에 사용자 추가

결합된 -aG 또는 –append –groups 옵션을 사용하고 그 뒤에 쉼표로 구분된 그룹 목록을 사용하세요.

usermod --append --groups root,users tecmint
사용자 홈 디렉토리의 기본 위치 변경

-d 또는 –home 옵션을 사용하고 그 뒤에 새 홈 디렉터리의 절대 경로를 입력하세요.

usermod --home /tmp tecmint
사용자가 기본적으로 사용할 쉘 변경

–shell을 사용하고 그 뒤에 새 셸의 경로를 입력하세요.

usermod --shell /bin/sh tecmint
사용자가 속한 그룹 표시
groups tecmint
id tecmint

이제 위의 모든 명령을 한 번에 실행해 보겠습니다.

usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

위의 예에서는 tecmint 사용자 계정의 만료 날짜를 2014년 10월 30일로 설정합니다. 또한 루트 및 사용자 그룹에 계정을 추가합니다. 마지막으로 sh를 기본 셸로 설정하고 홈 디렉터리 위치를 /tmp로 변경합니다.

또한 읽어보세요:

  1. 15 Linux의 useradd 명령 예
  2. 15 Linux의 usermod 명령 예

기존 계정의 경우 다음 작업도 수행할 수 있습니다.

비밀번호를 잠궈 계정 비활성화

사용자 비밀번호를 잠그려면 -L(대문자 L) 또는 –lock 옵션을 사용하세요.

usermod --lock tecmint
사용자 비밀번호 잠금 해제

이전에 차단된 사용자 비밀번호를 잠금 해제하려면 –u 또는 –unlock 옵션을 사용하세요.

usermod --unlock tecmint

여러 사용자가 액세스해야 하는 파일에 대한 읽기 및 쓰기 액세스를 위한 새 그룹 만들기

목표를 달성하려면 다음 일련의 명령을 실행하십시오.

groupadd common_group # Add a new group
chown :common_group common.txt # Change the group owner of common.txt to common_group
usermod -aG common_group user1 # Add user1 to common_group
usermod -aG common_group user2 # Add user2 to common_group
usermod -aG common_group user3 # Add user3 to common_group
그룹 삭제

다음 명령을 사용하여 그룹을 삭제할 수 있습니다.

groupdel [group_name]

group_name이 소유한 파일이 있는 경우 해당 파일은 삭제되지 않지만, 그룹 소유자는 삭제된 그룹의 GID로 설정됩니다.

Linux 파일 권한

이 시리즈의 보관 도구 및 파일 속성 설정 - 3부에서 논의한 기본 읽기, 쓰기 및 실행 권한 외에도 "특수"라고도 하는 덜 사용되는(그러나 덜 중요한) 다른 권한 설정이 있습니다. 권한”.

앞서 설명한 기본 권한과 마찬가지로 8진수 파일을 사용하거나 권한 유형을 나타내는 문자(기호 표기법)를 통해 설정됩니다.

사용자 계정 삭제

–remove와 함께 userdel 명령을 사용하여 계정을 삭제할 수 있습니다(사용자가 소유한 경우 홈 디렉토리, 그 안에 있는 모든 파일 및 메일 스풀도 포함). 옵션.

userdel --remove [username]

그룹 관리

새로운 사용자 계정이 시스템에 추가될 때마다 사용자 이름이 유일한 구성원인 동일한 이름의 그룹이 생성됩니다. 나중에 다른 사용자를 그룹에 추가할 수 있습니다. 그룹의 목적 중 하나는 해당 리소스에 대한 올바른 권한을 설정하여 파일 및 기타 시스템 리소스에 대한 간단한 액세스 제어를 구현하는 것입니다.

예를 들어 다음과 같은 사용자가 있다고 가정합니다.

  1. user1(기본 그룹: user1)
  2. user2(기본 그룹: user2)
  3. user3(기본 그룹: user3)

이들 모두에는 로컬 시스템 어딘가에 있거나 네트워크 공유에 있는 common.txt라는 파일에 대한 읽기쓰기 액세스 권한이 필요합니다. user1이(가) 생성되었습니다. 다음과 같은 유혹을 받을 수도 있습니다.

chmod 660 common.txt
OR
chmod u=rw,g=rw,o= common.txt [notice the space between the last equal sign and the file name]

그러나 이는 파일 소유자와 파일 그룹 소유자(user1<)의 구성원인 사용자에게만 읽기쓰기 액세스 권한을 제공합니다. 이 경우). 다시 한번 말씀드리지만, user1 그룹에 user2user3을 추가하고 싶을 수도 있지만 이렇게 하면 해당 사용자가 소유한 나머지 파일에도 액세스할 수 있게 됩니다. 사용자 user1 및 그룹 user1.

이것이 바로 그룹이 유용한 곳이며, 이와 같은 경우에 수행해야 할 작업은 다음과 같습니다.

Setuid 이해

실행 파일에 setuid 권한이 적용되면 프로그램을 실행하는 사용자는 프로그램 소유자의 유효 권한을 상속받습니다. 이 접근 방식은 보안 문제를 합리적으로 유발할 수 있으므로 setuid 권한이 있는 파일 수를 최소한으로 유지해야 합니다. 시스템 사용자가 루트가 소유한 파일에 액세스해야 할 때 이 권한 집합이 있는 프로그램을 찾을 수 있습니다.

요약하면 사용자가 바이너리 파일을 실행할 수 있을 뿐만 아니라 루트 권한으로도 실행할 수 있다는 것입니다. 예를 들어 /bin/passwd의 권한을 확인해 보겠습니다. 이 바이너리는 계정의 비밀번호를 변경하는 데 사용되며 /etc/shadow 파일을 수정합니다. 수퍼유저는 다른 사람의 비밀번호를 변경할 수 있지만 다른 모든 사용자는 자신의 비밀번호만 변경할 수 있어야 합니다.

따라서 모든 사용자는 /bin/passwd를 실행할 수 있는 권한을 가져야 하지만 루트만 계정을 지정할 수 있습니다. 다른 사용자는 해당 비밀번호만 변경할 수 있습니다.

Setgid 이해

setgid 비트가 설정되면 실제 사용자의 유효한 GID는 그룹 소유자의 것이 됩니다. 따라서 모든 사용자는 해당 파일의 그룹 소유자에게 부여된 권한으로 파일에 액세스할 수 있습니다. 또한 setgid 비트가 디렉터리에 설정되면 새로 생성된 파일은 디렉터리와 동일한 그룹을 상속하고 새로 생성된 하위 디렉터리도 상위 디렉터리의 setgid 비트를 상속합니다. 파일 소유자의 기본 그룹에 관계없이 특정 그룹의 구성원이 디렉터리의 모든 파일에 액세스해야 할 때마다 이 접근 방식을 사용할 가능성이 높습니다.

chmod g+s [filename]

setgid를 8진수 형식으로 설정하려면 현재(또는 원하는) 기본 권한 앞에 숫자 2를 추가하세요.

chmod 2755 [directory]
디렉토리에 SETGID 설정

고정 비트 이해

파일에 "고정 비트"가 설정되면 Linux는 이를 무시하는 반면, 디렉토리의 경우 사용자가 디렉토리를 소유하지 않는 한 포함된 파일을 삭제하거나 이름을 바꾸는 것을 방지하는 효과가 있습니다. 파일이거나 루트입니다.

chmod o+t [directory]

고정 비트를 8진수 형식으로 설정하려면 현재(또는 원하는) 기본 권한 앞에 숫자 1을 추가하세요.

chmod 1755 [directory]

고정 비트가 없으면 디렉터리에 쓸 수 있는 사람은 누구나 파일을 삭제하거나 이름을 바꿀 수 있습니다. 이러한 이유로 고정 비트는 일반적으로 /tmp와 같이 누구나 쓸 수 있는 디렉터리에서 발견됩니다.

특수 Linux 파일 속성

파일에 허용되는 작업을 추가로 제한할 수 있는 다른 속성이 있습니다. 예를 들어, 파일 이름 변경, 이동, 삭제 또는 수정을 방지합니다. chattr 명령으로 설정되며 다음과 같이 lsattr 도구를 사용하여 볼 수 있습니다.

chattr +i file1
chattr +a file2

이 두 명령을 실행한 후 file1은 변경할 수 없게 됩니다(즉, 이동, 이름 변경, 수정 또는 삭제할 수 없음). 반면 file2는 추가 전용 모드로 전환됩니다(만 가능함). 쓰기를 위해 추가 모드로 엽니다.)

루트 계정에 액세스하고 sudo 사용

사용자가 루트 계정에 액세스할 수 있는 방법 중 하나는 입력하는 것입니다.

su

그런 다음 루트의 비밀번호를 입력하십시오.

인증에 성공하면 이전과 동일한 현재 작업 디렉터리를 사용하여 root로 로그온하게 됩니다. 대신 루트의 홈 디렉토리에 배치하려면 다음을 실행하십시오.

su -

그런 다음 루트의 비밀번호를 입력하십시오.

위 절차를 수행하려면 일반 사용자가 루트의 비밀번호를 알아야 하므로 심각한 보안 위험이 있습니다. 이러한 이유로 시스템 관리자는 sudo 명령을 구성하여 일반 사용자가 매우 통제되고 제한된 방식으로 다른 사용자(일반적으로 수퍼유저)로서 명령을 실행할 수 있도록 할 수 있습니다. 따라서 사용자가 하나 이상의 특정 권한 있는 명령을 실행하고 다른 명령은 실행할 수 없도록 제한을 설정할 수 있습니다.

또한 읽어 보세요: su와 sudo 사용자의 차이점

sudo를 사용하여 인증하려면 사용자는 자신의 비밀번호를 사용합니다. 명령을 입력하면 (수퍼유저가 아닌) 비밀번호를 입력하라는 메시지가 표시되며 인증에 성공하면(사용자에게 명령을 실행할 수 있는 권한이 부여된 경우) 지정된 명령이 수행됩니다.

sudo에 대한 액세스 권한을 부여하려면 시스템 관리자가 /etc/sudoers 파일을 편집해야 합니다. 이 파일은 텍스트 편집기로 직접 여는 대신 visudo 명령을 사용하여 편집하는 것이 좋습니다.

visudo

그러면 vim을 사용하여 /etc/sudoers 파일이 열립니다(파일을 편집하려면 vim을 편집기로 설치 및 사용 – 이 시리즈의 2부에서 제공하는 지침을 따를 수 있습니다).

가장 관련성이 높은 라인입니다.

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

좀 더 자세히 살펴보겠습니다.

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

이 줄을 사용하면 sudo에 사용될 디렉토리를 지정할 수 있으며, 시스템에 해를 끼칠 수 있는 사용자별 디렉토리 사용을 방지하는 데 사용됩니다.

다음 줄은 권한을 지정하는 데 사용됩니다.

root        ALL=(ALL) ALL
  1. 첫 번째 ALL 키워드는 이 규칙이 모든 호스트에 적용됨을 나타냅니다.
  2. 두 번째 ALL은 첫 번째 열의 사용자가 모든 사용자의 권한으로 명령을 실행할 수 있음을 나타냅니다.
  3. 세 번째 ALL은 모든 명령을 실행할 수 있음을 의미합니다.
tecmint     ALL=/bin/yum update

= 기호 뒤에 사용자가 지정되지 않으면 sudo는 루트 사용자로 간주합니다. 이 경우 사용자 tecmint는 루트로 yum update를 실행할 수 있습니다.

gacanepa    ALL=NOPASSWD:/bin/updatedb

NOPASSWD 지시문을 사용하면 gacanepa 사용자가 비밀번호를 입력하지 않고도 /bin/updatedb를 실행할 수 있습니다.

%admin      ALL=(ALL) ALL

% 기호는 이 행이 "admin "이라는 그룹에 적용됨을 나타냅니다. 나머지 줄의 의미는 일반 사용자의 의미와 동일합니다. 이는 “admin” 그룹의 구성원이 모든 호스트에서 모든 사용자로서 모든 명령을 실행할 수 있음을 의미합니다.

sudo가 어떤 권한을 부여했는지 확인하려면 “-l” 옵션을 사용하여 나열하세요.

PAM(플러그형 인증 모듈)

플러그형 인증 모듈(PAM)은 모듈을 사용하여 애플리케이션별 및/또는 서비스별로 특정 인증 체계를 설정할 수 있는 유연성을 제공합니다. 모든 최신 Linux 배포판에 있는 이 도구는 인증이 필요한 각 프로그램을 특별히 컴파일하여 필요한 정보를 얻는 방법을 알려야 했던 Linux 초기에 개발자가 자주 직면했던 문제를 극복했습니다.

예를 들어, PAM을 사용하면 비밀번호가 /etc/shadow에 저장되어 있는지 아니면 네트워크 내부의 별도 서버에 저장되어 있는지는 중요하지 않습니다.

예를 들어, 로그인 프로그램이 사용자를 인증해야 할 때 PAM은 올바른 인증 체계에 대한 기능이 포함된 라이브러리를 동적으로 제공합니다. 따라서 로그인 응용 프로그램(또는 PAM을 사용하는 다른 프로그램)에 대한 인증 체계를 변경하는 것은 구성 파일(대부분 /etc/pam.d에 있는 응용 프로그램 이름을 딴 파일일 가능성이 높음)만 편집하면 되므로 쉽습니다. 이며 /etc/pam.conf에서는 가능성이 낮습니다).

/etc/pam.d 내의 파일은 기본적으로 PAM을 사용하는 애플리케이션을 나타냅니다. 또한 PAM 라이브러리(libpam)가 연결되어 있는지 확인하여 특정 애플리케이션이 PAM을 사용하는지 여부를 알 수 있습니다.


ldd $(which login) | grep libpam # login uses PAM
ldd $(which top) | grep libpam # top does not use PAM

위 이미지에서 libpam이 로그인 애플리케이션과 연결되어 있음을 볼 수 있습니다. 이 애플리케이션은 시스템 사용자 인증 작업에 관여하는 반면 top은 그렇지 않기 때문에 이는 의미가 있습니다.

passwd에 대한 PAM 구성 파일을 살펴보겠습니다. 예, 사용자 비밀번호를 변경하는 잘 알려진 유틸리티입니다. /etc/pam.d/passwd에 있습니다.


cat /etc/passwd

첫 번째 열은 module-path(세 번째 열)와 함께 사용되는 인증의 유형을 나타냅니다. 유형 앞에 하이픈이 나타나면 PAM은 모듈을 시스템에서 찾을 수 없어 로드할 수 없는 경우 시스템 로그에 기록하지 않습니다.

다음 인증 유형을 사용할 수 있습니다.

  1. 계정: 이 모듈 유형은 사용자 또는 서비스가 인증을 위해 유효한 자격 증명을 제공했는지 확인합니다.
  2. auth: 이 모듈 유형은 사용자가 자신이 주장하는 사람인지 확인하고 필요한 권한을 부여합니다.
  3. password: 이 모듈 유형을 사용하면 사용자 또는 서비스가 비밀번호를 업데이트할 수 있습니다.
  4. session: 이 모듈 유형은 인증 성공 전후에 수행해야 할 작업을 나타냅니다.

두 번째 열(control이라고 함)은 이 모듈을 사용한 인증이 실패할 경우 어떤 일이 발생해야 하는지를 나타냅니다.

  1. 필수: 이 모듈을 통한 인증이 실패하면 전체 인증이 즉시 거부됩니다.
  2. required는 requisite와 유사하지만 이 서비스에 대해 나열된 다른 모든 모듈은 인증을 거부하기 전에 호출됩니다.
  3. sufficient: 이 모듈을 통한 인증이 실패하면 PAM은 필수로 표시된 이전 인증이 실패하더라도 계속 인증을 부여합니다.
  4. 선택 사항: 이 모듈을 통한 인증이 실패하거나 성공하면 이 서비스에 대해 정의된 해당 유형의 유일한 모듈이 아닌 한 아무 일도 일어나지 않습니다.
  5. include는 해당 유형의 행을 다른 파일에서 읽어야 함을 의미합니다.
  6. 하위 스택은 포함과 유사하지만 인증 실패 또는 성공으로 인해 전체 모듈이 종료되지 않고 하위 스택만 종료됩니다.

네 번째 열(있는 경우)에는 모듈에 전달될 인수가 표시됩니다.

/etc/pam.d/passwd(위 표시)의 처음 세 줄은 system-auth 모듈을 로드하여 사용자가 유효한 자격 증명(계정)을 제공했는지 확인합니다. . 그렇다면 passwd 사용 권한(auth)을 부여하여 인증 토큰(비밀번호)을 변경할 수 있습니다.

예를 들어, 다음을 추가하면


remember=2

다음 줄로


password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok

/etc/pam.d/system-auth에서:


password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2

각 사용자의 마지막 두 해시 비밀번호는 재사용할 수 없도록 /etc/security/opasswd에 저장됩니다.

요약

효과적인 사용자 및 파일 관리 기술은 모든 시스템 관리자에게 필수적인 도구입니다. 이 기사에서 우리는 기본 사항을 다루었으며 이를 토대로 구축을 위한 좋은 시작점으로 사용할 수 있기를 바랍니다. 아래에 의견이나 질문을 남겨주시면 신속하게 답변해 드리겠습니다.