Linux用户管理
用户管理
在 Linux 系统中各种会存在着多个用户。我们的使用者靠用户名来区分各自登陆的账
号。如果我们的用户想要使用系统资源,就必须在系统中拥有合法的账号。在系统多个文
件中都保存了用户身份相关信息。
系统靠ID号区分用户(ls -n)
使用者靠用户名来区分各自登录的账号#lastlog 查看所有
用户相关配置文件:
1. /etc/passwd:
root : x : 0 : 0 : root : /root : /bin/bash
用户名 密码占位符 用户UID 初始组ID 注释信息 用户家目录 shell类型
在/etc/passwd 文件中用:当做分隔符,一共有 7 列。每列的内容分别是:
第一列:用户名
第二列:密码占位符(真正的密码文件在/etc/shadow)。
但是如果如果取消密码占位符。就可以实现本地免密码登录
(第二列如果为空则不能进行远程登录)。
第三列:用户 ID(UID)
0 是root用户(超级用户)
1-499 500-65535 #c6
1-999 1000-65535 #c7
系统或服务用户 普通用户
当创建一个新用户时 UID 从 1000 开始,最大到 60000。2.6.x 内核
(uname -r 查看内核版本)以后的 Linux 系统 UID 可以支持 2^32的
UID 了(修改最大 UID 范围/etc/login.defs)。
第四列:初始组 ID(GID)
组:拥有相同权限的用户的集合。
初始组:用户创建时默认加入的组。
附加组:用户为了获取权限而加入的组。
当前组(当前生效的组):默认情况下,用户登录系统使用初始组为当前组。可以通过newgrp进行切换当前组。当前组会决定我们新建文件目录的所属组。只要加到组里,就拥有组的权限,无论它是不是当前组。
创建用户时如果不指定用户的初始组,则会自动创建和用户名相同的组,初始组只能
有一个。也就是说用户登陆系统,立刻就拥有初始组的相关权限/身份。
第五列:用户描述信息(类似于“注释”,不建议更改))。
第六列:用户家目录
第七列:用户的 shell 类型:
用户会取得一个 shell 与系统的内核通信以进行用户的操作任务。
/bin/bash:能正常登陆系统 ,shell 类型为 bash。
/sbin/nologin:不能登陆系统,可以使用系统资源。服务用户shell类型 ngnix
#cat -n /etc/passwd 可查看创建用户,rpm包默认帮助把服务用户创建,直接使用即可。源码包需要自行创建服务用户 ①可以login ②uid在1000内
2. /etc/shadow:
bin : * : 17834 : 0 : 99999 : 到期前 : 密码过期后 : :
用户名 用户密码 最近更改时间 不可更改时间 有效期 警告天数 宽限天数 失效日期 保留
第一列:用户名。
第二列:经过加密编码的密码,$6$开头的表明是使用 SHA-512 加密。
“!!”或“*”代表没有密码,不能登录(在第二列用户的密码前面加入一个“!”或“*”,加入后都不能登录)(新建用户时,如果不设置密码,那么第二列为“!!”)
第三列:密码最近更改时间
此段记录了改动密码的日期,日期是由 1970 年 1 月 1 日作为标准时间来计算的。
时间戳转日期:
日期转时间戳:(86400 为每一天的秒数)
第四列:密码不可被更改的天数(与第三列相比)
账号的密码在最近一次修改过之后需要经过几天才可以再次修改。
0 ,表示密码随时可以被修改。
5, 5 天之后才能更改密码。
第五列:密码最长有效期(与第三列相比)
而默认的 99999(273 年)表示为 近似永久。
第六列:密码到期前的警告天数(与第五字段相比)
当账号的密码有效期快到的时候,系统会依据这个字段的设置发出“警告”给这个账
号,提醒他过 N 天后你的密码即将过期。
第七列:密码过期后的宽限天数(密码失效日,与第五字段相比)
密码过期后预留几天给账户修改密码,此时已无法使用旧密码登陆系统。
0,代表密码过去就马上失效。
5,代表密码会在 5 天后失效。
-1,代表密码永远不会失效。
第八列:账号失效日期
这里同样要写时间戳,用 1970 年 1 月 1 日进行时间换算,如果超过了失效时间,用户
也就失效无法使用了。
第九列:保留。
#passwd -l 用户名 锁定用户 -u解锁
3. /etc/group:
root : x : 0 : user1
用户组名称 组密码占位符 组GID 组内成员
第一列:组名称(默认组成员)。
第二列:组密码占位符。
第三列:组 ID 号(GID)
第四列:组内成员列表
管理命令:
新建组:groupadd 组名
-g #指定新建用户组的GID
-o #表示新建用户组的GID可以和系统已有的GID相同
设置组密码:gpasswd 组名 如何临时添加?如何永久添加?
永久添加组员:gpasswd -a 用户名 组名
修改/etc/group配置文件,将成员名加入最后一列
设置组管理员:gpasswd -A 用户名 组名(root用户才可以执行此命令)
临时添加组员:newgrp 组名
#临时添加当前用户到某个组(重新登录失效) #exit退出
#需要先给组设置密码;添加时需要输入密码;不会写入配置文件。
删除组成员:gpasswd -d 用户名 组名
#newgrp A 会切换当前用户的当前组为A
4. /etc/gshadow:
root : : :
用户组 组密码 管理员 组成员
第一列:组名称第二列:经过加密的组密码,这个段可以为空或!,如果是空或!表示没有密码。
第三列:用户管理员,这个字段也可以为空,如果有多个用户组管理者,用,分隔。
第四列:组成员,如果有多个成员,用,分隔。
通过 gpasswd 组名的方式来为组设置密码(需要 root 用户设置)。
组密码的作用:用户可以通过输入组密码的方式临时切换到组中,获取相应的组权限。
如果没有设置组密码,则只有属于本用户组的用户能够切换到本用户组的身份。
通过 gpasswd -A 账户名 组名 来为组添加管理员(拥有添加或移除组员的权限,只有
root 有权限添加管理员,即使是默认初始组,也没有组管理员权限)。
通过 gpasswd -a/-d 用户名 组名 来添加/移除组成员
5. /etc/login.defs:
一般不修改
#当用户创建时,同时在目录/var/spool/mail 中创建一个用户 mail 文件
#指定密码保持有效最大天数。
#表示修改密码的间隔时间。
#指定密码的最小长度。
#表示密码到期前多少天系统提示用户密码到期。
#指定 UID 最小为 1000,也就是说创建新用户时用户的 UID 从 1000 开始。
#指定最大 UID 为 60000。
#系统用户最小 201
#系统用户最大 999
#最小 GID 为 1000。
#最大 GID 为 60000。
#系统组 ID 最小 201#系统组 ID 最大 999
#指定是否创建用户家目录,yes 为创建,no 表示不创建。
#创建用户时默认创建用户家目录。
#创建用户家目录权限默认掩码值。
#表示 userdel 删除用户时,如果该用户初始组没有成员存在,则会删除组。
#使用 SHA512 加密方式。
6. /etc/default/useradd:
一般不修改
#创建用户的默认文件
#新创建用户时默认初始组的 GID 号(公共组),现在使用的都是私有组机制(根据创建用
户名称创建组)
#/home 表示用户家目录的位置
#表示是否启用账号过期禁用,-1 表示不启用。
#表示账号过期,不设置表示不启用。
#指定了新建用户的默认 shell 类型。
#指定用户家目录中默认文件的来源,新建用户家目录下的文件都是从这个目录中复制的。
#表示是否创建邮箱缓存 yes 表示创建
7. /etc/skel/: 家目录模板
[root@localhost ~]# ls -a /home/user1
. .. .bash_logout .bash_profile .bashrc .mozilla
[root@localhost ~]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc .mozilla
在创建新用户后,会在新用户家目录下看到类似.bash_profile .bashrc .bash_logout等文件。
/etc/skel 目录定义了新建用户在主目录下默认的配置文件,
例:需要创建N个用户,且N个用户的家目录都需要,test.1文件
先创建文件再创建用户
#touch test.1 /etc/skel/
#useradd 用户1
#useradd 用户2
#ls -a /home/1
#ls -a /home/2
用户管理相关命令:
useradd 创建用户过程:useradd 不加任何参数(选项)创建时,系统首先读取用于添加用
户的配置文件/etc/login.defs 和/etc/default/useradd 根据这两个配置文件中定义的规
则添加用户。然后向/etc/passwd 和/etc/group 文件添加用户和用户组记录,同时
/etc/passwd 和/etc/group 对应的加密文件也会自动生成记录。接着系统会自动在
/etc/default/useradd 文件设定的目录下建立用户家目录。最后复制/etc/skel 目录中的
所有文件到新用户的家目录中,新用户建立完成。
1.useradd 【选项】 用户名
-u:uid 用户标识号,此标识必须唯一。 手动创建 多为1000以内
-g:group 指定新用户的初始组(组名称)。
#groupadd -g 100 g01 提前创建组名称,再创建用户
#useradd -g g01 -u 100 u01
-G:指定新用户的附加组,必须是已经存在的组。附加组对于默认组而言,当一个用户同
时是多个组中的成员时,登录时默认组称为主组,其他组称为附加组。
#useradd -G root hf05 = #useradd hf05 #gpasswd -a hf05 root
相当于先创建hf05用户,再把它指定用户分到已存在的组root中
-d:home 指定新建用户的默认家目录,如果不指定系统会在/etc/default/useradd 文件指
定的目录下创建用户主目录。
-s : shell 指 定 新 建 用 户 使 用 默 认 的 shell 类 型 , 如 果 不 指 定 , 会 在
/etc/default/useradd 文件中定义的 shell 作为新用户的默认 shell。
-c:comment 对新建用户添加说明信息。
-f:inactive 指定账号过期多长时间后会永久停用。当值为 0 时账号立刻停用。当值为-1
时则关闭此功能。
-M:创建时不生成用户家目录。
-r:自动将用户 UID 和 GID 指定到 1000 以内,不在/home 下创建用户家目录。
# useradd -r -s /sbin/nologin hf01()
①# useradd -r -s /sbin/nologin 创建服务用户nginx
②nginx解压后#cd ./nginx补全
③#./configure --user=nginx --prefix=/usr/local/nginx 指定安装服务用户安装
④#make $$make install
2.usermod [选项] 用户名 useradd取代了
-u UID #修改用户的指定 UID
-g 组名 #修改用户的指定初始组(尽量不修改)
-G 组名 #修改用户的附加组(不管之前设置了多少附加组,都替换掉)(加上-a 选项可
不替换)
-c 说明 #修改用户的描述信息
-d 目录 #结合 -m 选项直接对源家目录进行改名实现修改家目录
usermod –m –d /home/u4 user4 (用户 user 的原家目录是/home/user4)
-s shell 类型 #修改用户的登录 shell 类型
-L(大) 用户名 #锁定用户的密码
-U(大) 用户名 #解锁用户密码
-l 新用户名 旧用户名 #修改用户名
3.userdel 【选项】 用户名
-r 删除用户时,连带家目录一起删除
4.passwd 【选项】 用户名
-l 用户名 #锁定用户的密码,使之无法登录系统。
-u 用户名 #解锁用户密码。
-S 用户名 #查看用户账号状态。
第一次对一个用户使用时是为此用户创建密码,第二次使用时是修改密码。
当普通用户没有密码时,自己是修改不了密码的。
密码明文!!!有泄露风险
多在shell脚本使用
非交互式密码设置:
echo "123123" | passwd --stdin user1
用非交互式的方式设置 user1 的密码为 123123
5.groupadd 【选项】 GID 组名
-g:指定新建用户组的 GID,该 GID 必须唯一,不能和其他用户组的 GID 重复。
-o:表示新用户组的 GID 可以与系统中已有的用户组的 GID 相同。
6.gpasswd 【选项】 用户名 组名
-A:指定组管理员 # gpasswd -A "" root 取消组管理员
-a:向指定组内添加一个成员
-d:把指定用户从组内删除
-M:定义组内成员列表,用户之间用,分隔(覆盖式)
7.newgrp 组名
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户
权限,newgrp 主要用于在多个用户组之间进行切换,可使用 exit 退出。
8.groupdel 组名
groupdel 用于删除用户组,如果该用户组中扔包括某些用户,则应确认组成员正常权限的
前提下进行删除。
9.groups
查询用户所属哪些组。
其他相关命令
10. id 用户名
#显示用户的 UID、初始组、附加组列表
11. su 用户名 newgrp 切换组
su - 用户名 完全切换用户身份
su 用户名 #切换用户身份,但是当前所在位置不变
su - 用户名 #完全切换用户身份,当前所在位置也会随之改变
用 echo $PATH 命令看一下 su 和 su -以后的环境变量有何不同。
以此类推,①要从当前用户切换到其它用户也一样,应该使用 su -命令。
②或者重新ssh登录输入用户名密码,,,切换用户身份
(也可以分别用 env 命令查看区别)
12.finger:查看用户详细信息。
[root@localhost ~]# finger username
实验:
切换 root 用户把/etc/passwd 文件中 user1 的 shell 类型改成/bin/csh。
退出 root 用户,分别用 su 和 su-切换用户用 useradd 命令看效果(切换后 pwd 看到的目
录有区别)。