与用户账号管理有关的系统文件
- 内容摘要
- 1./etc/passwd文件
- 2./etc/shadow文件
- 3./etc/group文件
用户在登录linux的时候,login登录进程会去/etc/passwd文件查找和正在登录用户匹配的用户信息,包括UID、GID、用户家目录、登录shell等;
然后将用户输入的口令密码和/etc/shadow文件中记录的用户口令密码进行比较,如果密码匹配正确,就会开启登录shell进程,将登录shell提供给用户。
上面就是简单的登录过程描述,涉及到两个重要的系统账号文件,一个是记录用户账号信息的/etc/passwd文件, 一个则是记录用户账号密码信息的/etc/shadow文件!
在Linux系统中,默认情况下,系统上包括超级用户root在内的所有用户账号信息都记录在/etc/passwd文件中。 每个账号的口令密码记录在/etc/shadow文件中。所有的用户组信息都纪录在/etc/group文件内! 下面即将要介绍的账号管理命令,包括用户和用户组的添加、修改、删除,其实就是通过修改这三个文件而实现的。 这三个文件都是系统的重要文件,不能随便修改和删除。 文件中的每个字段都有对应的修改命令,所以不要随便用vim等文本编辑器编辑这些文件,而是应该用对应的命令进行编辑。
1./etc/passwd文件
回到顶部peter@initroot:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin syslog:x:102:106::/home/syslog:/usr/sbin/nologin messagebus:x:103:107::/nonexistent:/usr/sbin/nologin _apt:x:104:65534::/nonexistent:/usr/sbin/nologin uuidd:x:105:111::/run/uuidd:/usr/sbin/nologin cups-pk-helper:x:106:112:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin kernoops:x:107:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin avahi-autoipd:x:109:114:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin usbmux:x:110:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin systemd-coredump:x:111:117:systemd core dump processing,,,:/run/systemd:/usr/sbin/nologin lightdm:x:112:118:Light Display Manager:/var/lib/lightdm:/bin/false dnsmasq:x:113:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin saned:x:114:121::/var/lib/saned:/usr/sbin/nologin nm-openvpn:x:115:122:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin avahi:x:116:123:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin colord:x:117:124:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin speech-dispatcher:x:118:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false pulse:x:119:125:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin hplip:x:120:7:HPLIP system user,,,:/var/run/hplip:/bin/false geoclue:x:121:127::/var/lib/geoclue:/usr/sbin/nologin peter:x:1000:1000:peter,,,:/home/peter:/bin/bash vboxadd:x:999:1::/var/run/vboxadd:/bin/false test:x:1001:1001::/home/test:/bin/sh从上面的输出可以看出/etc/passwd文件中每一行记录对应着一个用户账号,每行记录又分为7个字段,各字段被冒号(:)分隔,各字段含义表示如下:
用户名:口令密码:用户ID号:用户组ID号:注释性描述:用户主目录:登录Shell
1.用户名 该字段为代表用户账号的字符串。一般用户名长度不超过8个字符,并且由大小写字母和数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。 为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
2.口令密码 该字段存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。 因此,现代Linux系统(如SVR4)都使用了shadow技术,把真正加密后的用户口令字存放到/etc/shadow文件中, 而/etc/passwd文件中的口令字段只存放一个特殊的字符,例如“x”或者“*”。
3.用户ID号UID 虽然在登录Linux的时候,输入的是用户账号名,但是其实在Linux内部是使用ID来标识一个用户的.至于账号只是为了让人们容易记忆而已。 UID是一个整数,在系统内部用来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户, 但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
通常用户ID号的取值范围是0~65535。超级用户root的ID号为0,1~999由系统保留,作为管理账号,普通用户的标识号从1000开始。在Linux系统中,这个界限是500。
4.用户组ID号GID 该字段记录的是用户所属的用户组ID。对应着/etc/group文件中的一条记录。
5.注释性描述 该字段记录着用户的一些个人情况。
例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。 在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
6.用户主目录 用户登录后的起始工作目录,又称家目录.超级用户root的家目录为/root.在大多数系统中,普通用户的主目录都被组织在同一个特定的目录下, 一般都是/home/loginname目录下,用户主目录的名称就是该用户的登录名。比如登录用户是peter,那么peter的主目录就是/home/peter. 各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
7.登录shell 用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。
关于shell的更多内容参考:
什么是linux shell
什么是linux命令
系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。 用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。 有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
系统中有一类用户称为伪用户(pseudo users)。
这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
伪 用 户 含 义
bin 拥有可执行的用户命令文件
sys 拥有系统文件
adm 拥有帐户文件
uucp UUCP使用
lp lp或lpd子系统使用
nobody NFS使用
拥有帐户文件
除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。
2./etc/shadow文件
回到顶部/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生.
通过cat命令查看该文件的内容如下:
peter@initroot:/home/wwwroot/default/kblog$ sudo cat /etc/shadow root:!:18218:0:99999:7::: daemon:*:18106:0:99999:7::: bin:*:18106:0:99999:7::: sys:*:18106:0:99999:7::: sync:*:18106:0:99999:7::: games:*:18106:0:99999:7::: man:*:18106:0:99999:7::: lp:*:18106:0:99999:7::: mail:*:18106:0:99999:7::: news:*:18106:0:99999:7::: uucp:*:18106:0:99999:7::: proxy:*:18106:0:99999:7::: www-data:*:18106:0:99999:7::: backup:*:18106:0:99999:7::: list:*:18106:0:99999:7::: irc:*:18106:0:99999:7::: gnats:*:18106:0:99999:7::: nobody:*:18106:0:99999:7::: systemd-network:*:18106:0:99999:7::: systemd-resolve:*:18106:0:99999:7::: syslog:*:18106:0:99999:7::: messagebus:*:18106:0:99999:7::: _apt:*:18106:0:99999:7::: uuidd:*:18106:0:99999:7::: cups-pk-helper:*:18106:0:99999:7::: kernoops:*:18106:0:99999:7::: rtkit:*:18106:0:99999:7::: avahi-autoipd:*:18106:0:99999:7::: usbmux:*:18106:0:99999:7::: systemd-coredump:*:18106:0:99999:7::: lightdm:*:18106:0:99999:7::: dnsmasq:*:18106:0:99999:7::: saned:*:18106:0:99999:7::: nm-openvpn:*:18106:0:99999:7::: avahi:*:18106:0:99999:7::: colord:*:18106:0:99999:7::: speech-dispatcher:!:18106:0:99999:7::: pulse:*:18106:0:99999:7::: hplip:*:18106:0:99999:7::: geoclue:*:18106:0:99999:7::: peter:$6$UijNFQxM$WngK/M6zBGigopeCaqZoV.seytIU70WQU6VKtfmxvdxUjzAZkooW0F/xslozTjfAtUVa5hydsynOoiWb8YHib1:18218:0:99999:7::: vboxadd:!:18218:::::: test:$6$2wD0/fkz$QkwBGuE1C1UTRAhAeaYmd2C8hmO43mbbqtoNJJqBwX2O/xIulUhExvfFN/ar7PzCf67mAp3rXO2yWoYJulZ7M/:18239:0:99999:7:::/etc/shadow的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开。这些字段的含义解释如下:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1."登录名"是与/etc/passwd文件中的登录名相一致的用户账号
2."口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令; 如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
3."最后一次修改时间"表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。 例如在SCO Linux 中,这个时间起点是1970年1月1日。
4."最小时间间隔"指的是两次修改口令之间所需的最小天数。
5."最大时间间隔"指的是口令保持有效的最大天数。
6."警告时间"字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7."不活动时间"表示的是用户没有登录活动但账号仍能保持有效的最大天数。
8."失效时间"字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。 期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
3./etc/group文件
回到顶部将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段。
每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
通过cat命令查看该文件的内容如下:
peter@initroot:/home/wwwroot/default/kblog$ cat /etc/group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,peter tty:x:5: disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10: man:x:12: proxy:x:13: kmem:x:15: dialout:x:20: fax:x:21: voice:x:22: cdrom:x:24:peter floppy:x:25: tape:x:26: sudo:x:27:peter audio:x:29:pulse dip:x:30:peter www-data:x:33: backup:x:34: operator:x:37: list:x:38: irc:x:39: src:x:40: gnats:x:41: shadow:x:42: utmp:x:43: video:x:44: sasl:x:45: plugdev:x:46:peter staff:x:50: games:x:60: users:x:100: nogroup:x:65534: systemd-journal:x:101: systemd-network:x:102: systemd-resolve:x:103: input:x:104: crontab:x:105: syslog:x:106: messagebus:x:107: netdev:x:108: mlocate:x:109: ssl-cert:x:110: uuidd:x:111: lpadmin:x:112:peter rtkit:x:113: avahi-autoipd:x:114: ssh:x:115: bluetooth:x:116: systemd-coredump:x:117: lightdm:x:118: nopasswdlogin:x:119: scanner:x:120:saned saned:x:121: nm-openvpn:x:122: avahi:x:123: colord:x:124: pulse:x:125: pulse-access:x:126: geoclue:x:127: peter:x:1000: sambashare:x:128:peter vboxsf:x:999:peter test:x:1001:/etc/group的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
1."组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
2."口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
3."组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。
4."组内用户列表"是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读