>  기사  >  운영 및 유지보수  >  Linux 시스템의 계정 파일은 무엇으로 구성됩니까?

Linux 시스템의 계정 파일은 무엇으로 구성됩니까?

青灯夜游
青灯夜游원래의
2022-05-13 16:25:039555검색

계정 파일은 5개 부분으로 구성됩니다. 1. 시스템 내 모든 사용자의 기본 정보를 저장하는 시스템 사용자 구성 파일인 "/etc/passwd" 2. 비밀번호를 저장하는 "/etc/shadow" 3. 사용자 그룹 구성 파일인 "/ect/group"에는 사용자 그룹의 모든 정보 등이 저장됩니다.

Linux 시스템의 계정 파일은 무엇으로 구성됩니까?

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

Linux 시스템의 계정 파일에는 5가지 구성 요소가 있습니다.

  • /etc/passwd 파일

  • /etc/shadow 파일

  • /ect/group 파일

  • /etc/gshadow 파일

  • /etc/login.defs 파일

1, /etc/passwd 파일

/etc/passwd 파일은 모든 사용자의 기본 정보를 저장하는 시스템 사용자 구성 파일입니다. 시스템 및 모든 사용자는 이 파일에 대해 읽기 작업을 수행할 수 있습니다.

먼저 이 파일을 열어서 내용을 살펴보겠습니다. 다음과 같이 명령을 실행합니다.

[root@localhost ~]# vi /etc/passwd
#查看一下文件内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...省略部分输出...

/etc/passwd 파일의 내용이 매우 규칙적이고 각 레코드 줄이 사용자에 해당하는 것을 볼 수 있습니다.

독자들은 Linux 시스템에 기본적으로 왜 그렇게 많은 사용자가 있는지 묻습니다. 이러한 사용자의 대다수는 시스템이나 서비스의 정상적인 운영에 필요한 사용자입니다. 이러한 사용자를 종종 시스템 사용자 또는 의사 사용자라고 합니다. 시스템 사용자는 시스템에 로그인하는 데 사용할 수 없지만 삭제할 수는 없습니다. 삭제하면 이러한 사용자에 의존하는 서비스나 프로그램이 정상적으로 실행될 수 없어 시스템 문제가 발생하기 때문입니다.

그뿐만 아니라, 사용자 정보의 각 줄은 ":"을 구분 기호로 사용하여 7개의 필드로 구분됩니다. 각 필드의 의미는 다음과 같습니다.

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

다음으로 해당 필드를 하나씩 소개하겠습니다.

Username

Username은 사용자의 신원을 나타내는 문자열입니다.

앞서 언급했듯이 사용자 이름은 사용자 메모리의 편의만을 위한 것입니다. Linux 시스템은 UID를 사용하여 사용자 ID를 식별하고 사용자 권한을 할당합니다. 사용자 이름과 UID 간의 해당 관계는 /etc/passwd 파일에 정의되어 있습니다.

Password

"x"는 이 사용자가 비밀번호를 가지고 있지만 실제 비밀번호는 아니라는 의미입니다. 실제 비밀번호는 /etc/shadow 파일에 저장됩니다(자세한 소개는 다음 섹션에서 설명).

초기 UNIX에서는 여기에 저장된 것이 실제 암호화된 비밀번호 문자열이었습니다. 그러나 모든 프로그램이 이 파일을 읽을 수 있기 때문에 사용자 데이터가 도난당하기 매우 쉽습니다.

비밀번호는 암호화되어 있지만 무차별 대입 크래킹을 사용하여 해독할 수도 있습니다.

따라서 Linux 시스템은 이제 실제 암호화된 비밀번호 문자열을 /etc/shadow 파일에 배치합니다. 이 파일은 루트 사용자만 탐색하고 조작할 수 있으므로 비밀번호의 보안이 최대한 보장됩니다.

"x"는 실제 비밀번호는 아니지만 삭제할 수 없습니다. "x"를 삭제하면 시스템에서는 사용자가 비밀번호가 없는 것으로 간주하여 비밀번호 없이 사용자 이름만 입력하게 된다는 점에 유의하세요. 비밀번호를 입력하면 로그인이 가능합니다(원격 로그인은 불가능하고 비밀번호 없이만 로그인 가능). 물론 불가능한 특수한 상황(예: 사용자 비밀번호 크래킹)이 있는 경우는 예외입니다.

UID

UID는 사용자 ID입니다. 각 사용자는 고유한 UID를 가지며 Linux 시스템은 UID를 사용하여 다른 사용자를 식별합니다.

실제로 UID는 0~65535 사이의 숫자입니다. 서로 다른 범위의 숫자는 서로 다른 사용자 ID를 나타냅니다.

GID

전체 이름은 "그룹 ID"이며, "그룹 ID"라고도 하며 이는 사용자의 초기 그룹의 그룹 ID 번호를 나타냅니다. 여기서는 초기 그룹과 추가 그룹의 개념을 설명해야 합니다.

초기 그룹은 사용자가 로그인 시 이 사용자 그룹과 관련된 권한을 가지고 있음을 의미합니다. 각 사용자는 하나의 초기 그룹만 가질 수 있습니다. 일반적으로 사용자의 사용자 이름과 동일한 그룹 이름이 사용자의 초기 그룹으로 사용됩니다. 예를 들어 사용자 램프를 수동으로 추가하는 경우 사용자 램프를 생성할 때 램프 그룹은 램프 사용자의 초기 그룹으로 생성됩니다.

추가 그룹은 사용자가 여러 다른 사용자 그룹에 가입하고 이러한 그룹의 권한을 가질 수 있음을 의미합니다. 각 사용자는 초기 그룹을 하나만 가질 수 있습니다. 이 사용자 그룹은 이 사용자에 대한 추가 그룹입니다. 여러 개의 추가 그룹이 있을 수 있으며 사용자는 이러한 추가 그룹에 대한 권한을 가질 수 있습니다.

예를 들어 초기 그룹 램프 외에 램프 사용자를 사용자 그룹에 추가한 다음 램프 사용자는 램프 그룹과 사용자 그룹 모두에 속합니다. 여기서 램프는 초기 그룹이고 사용자는 추가 그룹입니다. .

물론, 초기 그룹과 추가 그룹의 아이덴티티는 수정이 가능하지만, 작업에서는 초기 그룹을 수정하지 않고 추가 그룹만 수정합니다. 초기 그룹을 수정하면 관리자의 논리가 혼란스러울 때가 있기 때문입니다.

/etc/passwd 파일의 네 번째 필드에 표시된 ID는 이 사용자의 초기 그룹이라는 점에 유의해야 합니다.

설명 정보

이 필드는 중요한 목적이 없으며 단지 이 사용자의 의미를 설명하는 데 사용됩니다.

홈 디렉토리

也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。

例如,root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/yourIDname,即在 /home/ 目录下建立和用户名相同的目录作为主目录,如 lamp 用户的主目录就是 /home/lamp/ 目录。

默认的Shell

Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。

我们知道,用户登陆 Linux 系统后,通过使用 Linux 命令完成操作任务,但系统只认识类似 0101 的机器语言,这里就需要使用命令解释器。也就是说,Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。

通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。

2、/etc/shadow 文件

/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。

前面介绍了 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。

介绍此文件之前,我们先打开看看,执行如下命令:

[root@localhost ~]#vim /etc/shadow
root: $6$9w5Td6lg
$bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoom ff9isV1 PzdcXmixzhnMVhMxbvO:15775:0:99999:7:::
bin:*:15513:0:99999:7:::
daemon:*:15513:0:99999:7:::
…省略部分输出…

同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 ":" 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

接下来,给大家分别介绍这 9 个字段。

用户名

同 /etc/passwd 文件的用户名有相同的含义。

加密密码

这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。

注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。

所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。

最后一次修改时间

此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 15775 呢?

这是因为,Linux 计算日期的时间是以  1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。

那么,到底 15775 代表的是哪一天呢?可以使用如下命令进行换算:

[root@localhost ~]# date -d "1970-01-01 15775 days"
2013年03月11日 星期一 00:00:00 CST

可以看到,通过以上命令,即可将其换算为我们习惯的系统日期。

最小修改时间间隔

最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。

此字段是为了针对某些人频繁更改账户密码而设计的。

密码有效期

经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。

该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

密码需要变更前的警告天数

与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。

该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。

密码过期后的宽限天数

也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

账号失效时间

同第 3 个字段一样,使用自  1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!

该字段通常被使用在具有收费服务的系统中。

保留

这个字段目前没有使用,等待新功能的加入。

3、/ect/group 文件

/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。

此文件是记录组 ID(GID)和组名相对应的文件。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group 文件中查找。

/etc/group 文件的内容可以通过 Vim 看到:

[root@localhost ~]#vim /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
…省略部分输出…
lamp:x:502:

可以看到,此文件中每一行各代表一个用户组。在前面章节中,我们曾创建 lamp 用户,系统默认生成一个 lamp 用户组,在此可以看到,此用户组的 GID 为 502,目前它仅作为 lamp 用户的初始组。

各用户组中,还是以 ":" 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:

组名:密码:GID:该用户组中的用户列表

接下来,分别介绍各个字段具体的含义。

组名

也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。

组密码

和 /etc/passwd 文件一样,这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。

不过,用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。

组ID (GID)

就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。

这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。

组中的用户

此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。

举个例子,lamp 组的组信息为 "lamp:x:502:",可以看到,第四个字段没有写入 lamp 用户,因为 lamp 组是 lamp 用户的初始组。如果要查询这些用户的初始组,则需要先到 /etc/passwd 文件中查看 GID(第四个字段),然后到 /etc/group 文件中比对组名。

每个用户都可以加入多个附加组,但是只能属于一个初始组。所以我们在实际工作中,如果需要把用户加入其他组,则需要以附加组的形式添加。例如,我们想让 lamp 也加入 root 这个群组,那么只需要在第一行的最后一个字段加入 lamp,即 root:x:0:lamp 就可以了。

一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。

4、/etc/gshadow文件

组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。

首先,我们借助 Vim 命令查看一下此文件中的内容:

[root@localhost ~]#vim /etc/gshadow
root:::
bin:::bin, daemon
daemon:::bin, daemon
...省略部分输出...
lamp:!::

文件中,每行代表一个组用户的密码信息,各行信息用 ":" 作为分隔符分为 4 个字段,每个字段的含义如下:

组名:加密密码:组管理员:组附加用户列表

组名

同 /etc/group 文件中的组名相对应。

组密码

대부분의 사용자는 대개 그룹 비밀번호가 설정되어 있지 않아 이 필드가 비어 있는 경우가 많지만, 가끔 "!"으로 표시되는 경우도 있는데, 이는 그룹에 그룹 비밀번호가 없고 그룹 관리자가 없다는 의미입니다.

그룹 관리자

시스템 관리자의 입장에서 볼 때 이 파일의 가장 큰 기능은 그룹 관리자를 생성하는 것입니다. 그렇다면 그룹 관리자란 무엇입니까?

리눅스 시스템에 계정이 너무 많고, 최고 관리자 루트가 바쁠 수 있다는 점을 고려하면, 사용자가 그룹에 가입하려고 할 때 루트가 제때 응답하지 못할 수도 있습니다. 이 경우 그룹 관리자가 있으면 자신이 관리하는 그룹에 사용자를 추가할 수 있어 루트의 수고를 덜 수 있습니다.

그러나 현재 sudo 등의 도구로 인해 이 그룹 관리자 기능은 거의 사용되지 않습니다.

그룹의 추가 사용자

이 필드는 이 사용자 그룹에 어떤 추가 사용자가 있는지 표시하며, 이는 /etc/group 파일에 표시되는 추가 그룹과 동일합니다.

5./etc/login.defs 파일

/etc/login.defs 파일은 사용자 생성 시 사용자의 일부 기본 속성에 대한 기본 설정을 지정하는 데 사용됩니다. UID 및 GID 사용자 만료 시간, 최대 비밀번호 길이 등

이 파일의 사용자 기본 구성은 루트 사용자에게는 유효하지 않습니다. 그리고 이 파일의 구성이 /etc/passwd 및 /etc/shadow 파일의 사용자 정보와 충돌하는 경우 시스템은 /etc/passwd 및 /etc/shadow에 적용됩니다.

독자는 vim /etc/login.defs 명령을 사용하여 파일 내용을 볼 수 있습니다. 표 1에서는 파일의 각 옵션에 대한 자세한 설명을 제공합니다.

표 1 /etc/login.defs 파일 내용
              설정 항목               의미
              MAIL_DIR /var/spool/mail             사용자를 생성할 때 시스템은 /var/spool/mail 디렉토리에 사용자 메일함을 생성합니다. 예를 들어, 램프 사용자의 메일함은 /var/spool/mail/lamp입니다.
              PASS_MAX_DAYS 99999               비밀번호 유효기간 99999는 1970년 1월 1일부터 비밀번호가 유효한 일수로 273년에 해당합니다.
              PASS_MIN_DAYS 0             사용자가 비밀번호를 다시 변경할 수 있을 때까지 마지막 비밀번호 변경 이후의 최소 일수를 나타냅니다. 기본값은 0입니다.
              PASS_MIN_LEN 5               비밀번호의 최소 길이를 지정하세요. 기본값은 5자 이상입니다. 그러나 이제 로그인 시 사용자 인증이 PAM 모듈로 대체되었으므로 이 옵션은 적용되지 않습니다.
              PASS_WARN_AGE 7             시스템이 곧 만료될 사용자 비밀번호 전달을 시작하기 전까지의 일 수를 지정하며 기본값은 7일입니다.
              UID_MIN 500               최소 UID를 500으로 지정하십시오. 이는 사용자를 추가할 때 기본 UID가 500에서 시작함을 의미합니다. UID가 550인 사용자를 수동으로 지정하면 500에서 549 사이의 UID가 사용되지 않더라도 다음 생성되는 사용자는 551부터 시작하는 UID를 갖게 됩니다.
              UID_MAX 60000               특정 사용자의 최대 UID는 60000입니다.
              GID_MIN 500               최소 GID를 500으로 지정하세요. 즉, 그룹을 추가할 때 그룹의 GID는 500에서 시작됩니다.
              GID_MAX 60000 ​​​​​​ 최대 사용자 GID는 60000입니다.
              CREATE_HOME 예             사용자를 생성할 때 사용자의 홈 디렉터리를 생성할지 여부를 지정합니다. 예는 생성을 의미하고, 아니요는 생성하지 않음을 의미합니다. 기본값은 예입니다.
              UMASK 077             사용자의 홈 디렉터리에 대한 권한은 기본적으로 077로 설정됩니다.
              USERGROUPS_ENAB 네             사용자 삭제 시 사용자 그룹도 함께 삭제할지 여부를 지정합니다. 준비사항은 해당 사용자의 초기 그룹을 삭제하는 것을 의미합니다. 기본값은 '예'입니다.
              ENCRYPT_METHOD SHA512               사용자 비밀번호에 사용되는 암호화 규칙을 지정합니다. SHA512는 기본적으로 사용되는 새로운 비밀번호 암호화 모드입니다. 원래 Linux에서는 DES 또는 MD5 암호화만 사용할 수 있습니다.

관련 추천: "Linux 비디오 튜토리얼"

위 내용은 Linux 시스템의 계정 파일은 무엇으로 구성됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.