相关命令:
useradd、usermod、userdel;
groupadd、groupmod、groupdel;
passwd、gpasswd、chage;
id、whoami、groups、newgrp;
注:关于私有组、标准组、初始用户组、有效用户组、附加组和相关文件权限设置及概念临时小结:
私有组与标准组只是一个不专业的概念,私有组指这个组中只有一个用户,且用户名与该组名相同。标准组指私有组以外的其他组。
初始用户组指当前用户登录时设定所属的组,即/etc/passwd中第4个gid所对应的组;
有效用户组指创建文件时文件的访问权限计算依据的组名,可以用newgrp临时更改有效用户组,也可以更改/etc/passwd中的GID来永久更改,因为默认登陆时有效用户组即为初始用户组(注意已经创建的文件访问权限依据的组不会因为主组的改变而改变。)
附加组指当前用户所属组(groups username)除有效用户组外的其他组。
而一个文件对某个用户有没有权限对于用户组来说,不管这个组是该用户的主组还是附加组,其判定方式都是一样的。
1. 添加用户组
使用groupadd命令添加用户组:
groupadd <group_name>此操作需由系统管理员进行。
2. 删除用户组
使用groupdel命令删除用户组:
groupdel <group_name>此操作需由系统管理员进行。
3. 定义组管理员
使用gpasswd命令指定组管理员:
gpasswd -A <user> <group_name>此操作需由系统管理员进行。
4. 设定组密码
使用gpasswd命令设定组密码:
gpasswd <group_name>此操作由组管理员进行。
5. 取消组密码
使用gpasswd命令取消组密码:
gpasswd -r <group_name>此操作由组管理员进行。
说明:取消密组码后,只有成员才可以通过newgrp命令切换入该组。
6. 添加组成员
使用gpasswd命令向指定组添加成员用户:
gpasswd -a <user> <group_name>此操作由组管理员进行。 (usermod也可以;)
7. 删除组成员
使用gpasswd命令从指定组中删除成员用户:
gpasswd -d <user> <group_name>此操作由组管理员进行。
概述
一、帐户概述
1、帐户实质
Linux 操作系统是一个多用户的操作系统,它允许多个用户同时登陆到系统上,使用系统资源。系统根据帐户来区分每个用户的文件、进程、任务,给每个用户提供特定的工作环境(如用户的工作目录、SHELL 版本以及 X-Window 环境的配置等),使每个用户的工作都能独立不受干扰地进行。
2、用户和组
从广义上讲,Linux 帐户包括用户帐户和组帐户。
用户帐户
Linux 上的用户帐户有两种:普通用户帐户和超级用户帐户(root)。
普通用户帐户---普通用户帐户在系统上的任务是进行普通工作,
超级用户帐户---管理员在系统上的任务是对普通用户和整个系统进行管理。管理员帐户对系统具有绝对的控制权,能够对系统进行一切操作。
组帐户
组是用户的集合,在系统中组有两种:私有组和标准组,当创建用户的时候,没有为其制定属于哪个组,Linux 就会建立一个和用户同名的私有组,此私有组中只含有该用户。若使用标准组,在创建
新用户时,为其制定属于哪个组。当一个用户属于多个组时,其登陆后所属的组称为主组,其他的组称为附加组。
二、Linux 环境下的帐户系统文件
Linux 环 境 下 的 帐 户 系 统 文 件 主 要 有 /etc/passwd 、 /etc/shadow 、/etc/group、/etc/gshadow 四个文件。
1、/etc/passwd
/etc/passwd 每行定义一个用户帐户,此文件对所有用户可读。一行又划分为多个字段定义用户帐号的不同属性,名字段间用“:”分隔。
/etc/passwd 文件中各字段的含义
用户名 用户登陆系统时使用的用户名,在系统中是唯一的
口令 存放加密的口令,口令是 x,这表明用户的口令是被/etc/shadow 文件保护的
用户标识号 系统内部用它来标识用户,每个用户的 UID 都是唯一的root 用户的 UID 号是 0,普通
用户从500 开始,从1-499是系统的标准帐户。
组标识号 系统内部用它来标识用户所属的组
注释性描述 例如存放用户全名等信息
宿主目录 用户登陆系统后所进入的目录
命令解释 指示该用户使用的 Shell,Linux 默认的是 bash器
2、/etc/shadow
/etc/passwd 文件对任何用户均可读,为了增加系统的安全性,用户的口令通常用 shadow passwords 保护。/etc/shadow 只对 root 用户可读。
/etc/shadow 文件中各字段的含义
用户名 用户的帐户名
口令 用户的口令,是加过密的
最后一次修改的时间 从 1970 年 1 月 1 日起,到用户最后一次更改口令的天数
最小时间间隔 从 1970 年 1 月 1 日起,到用户可以更改口令的天数
最大时间间隔 从 1970 年 1 月 1 日起,到必须更改口令的天数
警告时间 在口令过期之前多少天提醒用户更新
不活动时间 在用户口令过期之后到禁用帐户的天数
失效时间 从 1970 年 1 月 1 日起,到帐户被禁用的天数
标志 保留位
3、/etc/group
将用户进行分组是 Linux 对用户进行管理及控制访问权限的一种手段。一个组中可以有多个用户,一个用户也可以属于多个组。该文件对所有用户可读。
/etc/group 文件中各字段的含义
组名 组的名称
组口令 用户组的口令,用 x 表示
GID 组的识别号,
组成员 该组的成员
4、/etc/gshadow
该文件用于定义用户组口令、组管理员等信息,该文件只有 root用户可读。
/etc/gshadow 文件中各字段的含义
组名 组的名称
组口令 用户组的口令,保存已加密的口令
组的管理员帐号 组的管理员帐号,管理员有权对该组添加、删除帐号
组成员 该组的成员,多个用户用‘,’分开
useradd:建立用户账号
语 法:useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号] 或 useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]
补充说明:useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
参 数:
-c<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
-d<登入目录> 指定用户登入时的启始目录。
-D 变更预设值.
-e<有效期限> 指定帐号的有效期限。
-f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
-g<群组> 指定用户所属的群组。
-G<群组> 指定用户所属的附加群组。
-m 自动建立用户的登入目录。
-M 不要自动建立用户的登入目录。
-n 取消建立以用户名称为名的群组.
-r 建立系统帐号。
-s<shell> 指定用户登入后所使用的shell。
-u<uid> 指定用户ID。
如:
useradd (用户名) 创建默认新用户
useradd –g(组名)(用户名) 创建用户帐户时加入某个组
useradd -s(shell 名)(用户名) 创建用户帐户时指定 shell
useradd -d(用户目录)(用户名) 创建用户帐户时指定用户目录
useradd -u(UID 号)(用户名) 创建用户帐户时指定UID号
useradd -p(口令)(用户名) 创建用户帐户时指定口令
usermod:修改用户相关信息
usermod –g(组名)(用户名) 修改用户加入某个组
usermod -s(shell 名)(用户名) 修改用户 shell
usermod -d(用户目录)(用户名) 修改用户目录
usermod -u(新 UID 号)(用户名) 修改用户 UID 号
usermod -p(口令)(用户名) 修改用户口令
usermod -l(新登陆名)(旧登陆名) 修改用户登陆名
usermod -L(用户名) 锁定用户帐号
usermod -U(用户名) 解锁用户帐号
userdel:删除使用者账号及相关档案
userdel [-r] 用户名
-r 删除用户帐号时删除用户目录。
警告
userdel不允许你移除正在线上的使用者帐号。你必须砍掉此帐号现在在系统上执行
的程序才能进行帐号删除。不能在NISclient端移除NIS属性的东西。这动做须在NIS
server端上执行
groupadd:建立新群组
groupadd [-g gid] group 指定gid
groupadd(组帐户名) 创建新组帐户
groupadd -r(系统组帐户名) 创建系统组帐户
groupmod:更改组信息
groupmod -g(新 GID)(组帐户名) 更改组的 GID 号
groupmod -n(新的组名)(旧的组名) 更改组帐户名
groupdel:删除群组
删除群组时,必须先删除与群组相关的所有用户
passwd:更新用户的密码
passwd [-dklS][-u <-f>] [--stdin] [用户名称]
-d 删除密码。本参数仅有系统管理者才能使用。
-k 设置只有在密码过期失效后,方能更新。
-l 锁住密码。
-S 列出密码的相关信息。本参数仅有系统管理者才能使用。
-u 解开已上锁的帐号。
-f 强制执行。
--stdin 从标准输入读入密码
gpasswd:管理用户与用户组的交互
gpasswd -a(用户帐户名)(组帐户名) 将用户添加到指定组
gpasswd -d(用户帐户名)(组帐户名) 将用户从指定组中删除
gpasswd -A(用户帐户名)(组帐户名) 将用户指定为组的管理员
chage:查询更改/etc/shadow文件相关参数
chage [-l] 账号名
参数:
-l:列出该账号的详细密码参数
id:查询用户的uid,gid
id [OPTION]... [USERNAME]
详解:
参 数:
-g或--group 显示用户所属主组的ID。
-G或--groups 显示用户所属附加群组的ID。
-n或--name 显示用户,所属群组或附加群组的名称。
-r或--real 显示实际ID。
-u或--user 显示用户ID
补充说明:id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
whoami 显示当前用户的名称
groups(用户名) 显示用户所属的组
groups相当于
pcbank)/home/pcbank>id -gn pcbank
pcbank
groups pcbank相当于
pcbank)/home/pcbank>id -Gn pcbank
pcbank froadbank
newgrp(用户所属的组帐号) 转换用户的当前组到制定的组(会产生一个新的bash进程)
pcbank)/home/pcbank>newgrp froadbank
临时更改pcbank的主组ID为froadbank,此时在创建文件,文件的访问权限依据froadbank计算。已创建的文件不会变,重新登录时又会恢复成原样。
例子:
1、批量创建账号
假设我的5个朋友账号为vbirduser{1,2,3,4,5},且这5个朋友未来想要共享一个目录,因此想要加入同一个用户组,假设这个用户组为vbirdgroup,且这5个账号的密码均为password,则应如何创建。
#/bin/sh
groupadd vbirdgroup
for username in vbirduser{1,2,3,4,5}
do
useradd -G vbirdgroup $username
echo "password" | passwd --stdin $username
done
2、查询一个组vbirdgroup中包含的用户:
root)/root>cat /etc/group | grep "^vbirdgroup:" | awk 'BEGIN {FS=":"} {print $4}'
vbirduser1,vbirduser2,vbirduser3,vbirduser4,vbirduser5
root)/root>groups vbirdgroup
id: vbirdgroup:无此用户
所以有5个用户:
vbirduser1,vbirduser2,vbirduser3,vbirduser4,vbirduser5
另外:
创建一个用户时,系统会更改/etc/passwd /etc/shadow /etc/group /etc/gshadow及用户主文件,相关默认的设置值是/etc/default/useradd文件中内容,可以useradd -D查看,那个/etc/skel/*内的文件内容为创建了用户主目录后的目录中的内容。
还会参考/etc/login.defs文件