Linux中的用户配置文件(passwd、shadow、group、gshadow) |
您所在的位置:网站首页 › linux配置文件是什么意思 › Linux中的用户配置文件(passwd、shadow、group、gshadow) |
一、用户信息文件 : /etc/passwd
首先我们可以使用命令man 5 passwd查看以下 passwd 文件的格式 我们看出 passwd 文件的格式是由七个字段组成,每个字段通过冒号分隔,并且每一行代表一个用户。下面我们将通过我个人的passwd文件作为模板,详细介绍每一个字段的含义。 第一字段 :用户名称(account) 这个字段没什么可说的,就是用户个人的用户名,不过,需要注意的是用户在起名时要遵守相应规范。 第二字段 :密码标识(password) 该字段若是 x ,则代表这个用户设有密码。x 不能省略,如果省略,系统在登录时就不会去 /etc/shadow 中搜索真正的密码,从而认为这个用户没有密码,于是直接登录,很不安全。 真正的密码并不存在于 passwd 文件,而是保存在/etc/shadow中,这里保存的只是一个密码标识。 第三字段 :UID 0 :表示该账户是超级用户 1~499 : 表示该账户是系统用户(伪用户)。专门用来为系统的启动服务或启动命令服务,一旦删除这些伪用户,系统会崩溃。 这些用户不能登录,其原因在于最后一个字段的 /sbin/nologin ,我们之后再谈。 500及以上 : 普通用户 当我们想把一个普通用户变为超级用户,只需把该用户的这个字段改为 0 ,这样,该用户便拥有了超级用户的权限。 注意 : 改变的只是该用户的权限,其家目录还是原来的位置。 第四字段 : GID(用户初始组ID) 初始组:指用户一登录就立刻拥有这个用户组的相关权限,每个用户都必须有一个初始组,并且初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。 附加组: 指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个 在 passwd 该字段下看到的 GID 是这个用户的初始组 GID,那么这个组到底指的是哪一个组呢?这时就需要匹配 /etc/group 文件,才能看到。我们不建议更改初始组,如果需要把用户添加到其他组中,请使用附加组。 第五字段 : 用户说明 该字段只是对本用户的一个备注说明,用户可以把一些重要信息保存在这里,方便日后的查看。 第六字段 : 家目录 普通户 : /home/用户名/ 管理员 : /root/ 第七字段 :登录之后的 shell shell :命令解释器。我们需要通过 shell 才能与系统内核进行交流,shell有很多种,Linux 中的默认 shell 是 bash。 我们发现所有伪用户在这个字段是 /sbin/nologin , 我们知道 log in 是登录的意思,那么no log in就是禁止登陆,所以,所有的伪用户才无法登录。 也就是说,如果我把某一普通用户的这一字段由 /bin/bash 改为 /sbin/nologin ,该用户就会被禁用,无法登陆。 当然,如果粗心大意把这个字段的 shell 名字写错了,也会造成无法登陆的情况。 二 、影子文件 /etc/shadow 这个文件也是每一行代表一个用户,而且它与 passwd 文件的内容是对应的。shadow 下的每一行由冒号分隔的九个字段组成。 我们依然进行详细介绍。 第一字段 : 用户名 不赘述。 第二字段 : 加密密码 真正的密码就是保存在这一字段,这里是显示的加密后的密码。虽然经过加密,但我们还是不要轻易把这个文件传给别人,因为完全可以通过暴力破解来从加密密码中得到真正的密码。 如果这一字段是两个感叹号 !!或者一个星号 * ,表示该用户没有设置密码,无法登录。 第三字段 : 密码最后一次的修改日期 该字段是用时间戳表示的。(以1970年1月1日为起始时间,每过一天加一,得出来的数字称为时间戳。) 如果我们想通过命令行对时间戳进行换算,可以用以下命令: 时间戳换算日期 date -d “1970-01-01 17066 days” 日期换算时间戳 echo $(($(date --date=”2018/01/01”+%s)/86400+1)) 第四字段 : 两次密码的修改时间间隔 该字段所谓的间隔是与上一字段相比较的。 如果该字段是 0,则可在任意时刻修改该用户的密码。 假如该字段是 10 ,则要求 10 天内不允许用户修改密码。 第五字段 : 密码有效期 比如设置为30,则每隔30天必须改密码。如果到期,根据后面第六、第七字段来行动。 我这里的这一字段显示的是99999,是个相当长的时间,等同永远不会失效。 第六字段 :修改密码警告天数 n 当距离密码有效期(第五字段)还剩 n 天时,系统每天都会提醒你修改密码。 第七字段 :密码到期后的宽限天数 0:代表密码过期后立即失效 -1:代表密码永远不会失效 n :往后宽限 n 天 第八字段 :账号失效时间 要用时间戳表示。该账号到期立即失效。 第九字段 : 保留 三、组信息文件 /etc/group 该文件显示的是用户组的内容,有四个字段,每个字段的特性与前面的 passwd 和 shadow 的一些字段是相似的,所以这里简单介绍一下。 第一字段:组名 第二字段:组密码标志 与 passwd 中的第二字段特性相同,只是一个密码标志,真正的密码在 /etc/gshadow 中。只是我们通常不给组设置密码。 第三字段:GID 第四字段:组中附加用户 我们发现这个字段是空的,说明我们没有向其中添加其他用户。并且在这一字段,我们是看不到初始用户的,要想查看该组的初始用户,则要通过 GID 来与 passwd 文件对照查看。也许有人疑惑用户名和用户组名不是一样吗,何必特意去查看呢?因为这只是一般情况,有时候也会有人故意设置成不同的名字。 四、组密码文件 /etc/gshadow该文件每行也是四个字段,group 和 gshadow 是两个对应的文件,但因为我们也很少用到它,所以这里也只是简述。 第一字段 : 组名 第二字段 : 组密码 第三字段 :组管理员的用户名 第四字段 : 组中附加用户 这四个字段我们从名字就可以了解其功能和特性,不在赘述。 五、用户管理的相关文件 关于用户,除了以上比较重要的四个配置文件,我们还需要了解一些其他相关文件。 1、家目录 在前文提到过,在这里温习一下。 普通用户: /home/用户名/,所有者和所属组都是此用户,权限是700 超级用户: /root/,所有者和所属组都是root用户,权限是550 2、用户的邮箱 : /var/spool/mail/用户名/ 之后的学习会用到,这里先做一了解。 3、用户模板目录 : /etc/skel 这里解释一下什么叫模板目录。当我们添加一个新用户时,进入其家目录会发现是空的,但其实不然,这里面还有一些隐藏文件(见下图),这些文件自然不会是凭空出现,而是从某个地方复制过来的,这个地方就是模板目录。 所以,我们可以进入这个模板目录中,创建一个名为new的文件,这样,每次当我们添加新用户时,这个文件就会自动复制到该用户的家目录中。一般我们可以写一些警告或者注意事项在里面。 六、用户管理命令及探究 1、添加用户 useradd [选项] 用户名 -u UID : 手工指定用户的UID号 -d 家目录 : 手工指定用户的家目录 -c 用户说明 : 手工指定用户的说明 -g 组名 : 手工指定用户的初始组 -G 组名 : 指定用户的附加组 -s shell : 手工指定用户登录的shell,默认是 /bin/bash
接下来我们思考一下,在添加一个新用户时,系统都做了哪些操作呢? 由前面的配置文件我们知道,首先,它在passwd、shadow、group、gshadow中都添加了一行该用户及其用户组的信息,然后在 /home 下创建自己的家目录,并且从模板目录 /etc/skel 中复制文件到其家目录,在 /var/spool/mail 中建立自己的邮箱。 我们其实可以通过手动更改这些文件达到添加用户的目的,不过有点繁琐罢了。 另外在我们创建新用户时,许多值都是系统默认的,这些值大多被保存在以下两个配置文件中。 第一个是 /etc/default/useradd GROUP=100 用户默认组(公有模式,我们用的是私人模式,所以不同) HOME=/home 用户家目录 INACTIVE=-1 密码过期宽限天数 EXPIRE= 密码失效时间 SHELL=/bin/bash 默认shell SKEL=/etc/skel 模板目录 CREATE_MAIL_SPOLL=yes 是否建立邮箱
第二个是 /etc/login.defs PASS_MAX_DAYS 99999 密码有效期 PASS_MIN_DAYS 0 密码修改间隔 PASS_MIN_LEN 5 密码最小位数(由于太简单了,所以这里未生效,真正的位数定义在别的地方) PASS_WARN_AGE 7 密码到期时间 UID MIN 500 最小和最大UID范围 UID_MAX 60000 GID MIN 500 最小和最大GID范围 GID_MAX 60000
2、更改密码 passwd [选项] 用户名 -S 查询用户的密码状态 (root权限) -l (小写 L) 锁定用户(实际上是在shadow中的加密密码字段前加了两个感叹号, root权限) -u 解锁用户 (root权限) --stdin 可通过管道符输出的数据作为用户的密码(echo “123” | passwd -–stdin 用户名) 我们之前在介绍shadow配置文件时,曾说过其第二字段加密密码,如果密码位是 !! 或 * 代表没有密码,不能登录。现在把这句更新一下,如果在该字段的加密密码前有感叹号,其效果也是一样的。这样用户无法登陆,也就达到了锁定用户的结果。这就是 passwd -l 锁定用户和 passwd -u 解锁用户的原理。(详见下图)
3、修改用户信息(针对已存在的用户) usermod [选项] 用户名 -u 修改UID -c 修改说明信息 -G 修改附加组 -L 锁定用户 (实际上是在 shadow 中的加密密码字段前加了一个感叹号,通过passwd锁定用户是加两个感叹号,其实作用都一样) -U 解锁用户
4、更改用户密码状态 chage [选项] 用户名 -l (小写L) : 列出用户详细的密码状态 -d 日期 : 修改密码的最后一次的修改日期 -m 天数 : 两次密码修改间隔(shadow字段4) -M 天数 :密码有效期(shadow字段5) -w 天数 :密码过期前警告天数(shadow字段6) -I 天数 : 密码过期后宽限天数(shadow字段7) -E 日期 : 账号失效时间(shadow字段8) 实际上,这些命令都可以通过修改配置文件 shadow 来达到,其实这个命令中最常用的一条命令为 chage -d 0 用户名 这个命令其实是把密码修改日期归零了,这样用户在一登录就需要修改密码,修改过后,shadow第三字段发生改变,该用户以后就可以正常使用了。这条命令的作用常见于批量添加用户后设置了一个极为简单的密码,当某人使用其中的一个用户第一次登录时,就可以创建属于自己的密码。 5、删除用户 userdel [选项] 用户名 -r 删除用户同时删除用户家目录 相当于手动删除这些文件: /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/var/spool/mail/用户名、/home/用户名
6、切换用户身份 su [选项] 用户名 - : 连带用户的环境变量一起切换 -c :仅执行一次命令,而不切换用户身份 如果我们只用用 su root 命令切换用户身份,通过 env 命令查看环境变量时,发现一些信息根本没变(见下图)。既然已经切换了root,为什么有些地方还是看起来还是之前的普通用户?这一问题通常会导致一些常见的错误发生。所以我们在切换用户时,一定要使用 “-” 选项 su – root -c “useradd test_3” 不切换成root,只是利用root身份执行一个命令。 7、添加组 groupadd [选项] 组名 -g GID : 指定组id 8、修改组 groupmod [选项] 组名 -g GID : 修改组id -n 新组名 :修改组名 例:group -n group2 group1 把组名从group1修改为group2
9、删除用户组 groupdel 组名 如果该组中有初始用户,该组是删除不了的 如果该组中只有附加用户,可以删除
10、向组中添加用户 gpasswd [选项] 组名 -a 用户名 :把用户加入组 -d 用户名 : 把用户从组中删除 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |