Linux常用命令(用户及用户组相关操作)
用户及用户组基础知识请参考《Linux常用命令(用户及用户组基础知识)》
相关文件结构
/etc/passwd文件结构
例:root:x:0:0:root:/root:/bin/bash |
||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
root |
X |
0 |
0 |
root |
/root |
/bin/bash |
账号名称 |
密码 |
UID |
GID |
用户信息说明 |
主文件夹 |
Shell |
/etc/shadow文件结构
例:root:$6$yMuqjFCP$p6z3v3bTa842XU/HRjmWALrXv723ZTepEgwT1G2M3kSI2M7hyGak6api1LhJu8smwz5K8r8MER1O..5hjWM7R1:18340:0:99999:7::: |
||||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
root |
$6$yMuqjFCP$p6z3v3bTa842XU /HRjmWALrXv723ZTepE gwT1G2M3kSI2M7hyGak6api1LhJu8 smwz5K8r8MER1O..5hjWM7R1 |
18340 |
0 |
99999 |
7 |
空 |
空 |
空 |
账号名称 |
密码(加密后) |
最近修改密码的日期 |
密码不可修改的日期 |
密码需要重新修改的日期 |
密码需要修改前的警告天数 |
密码过期后的宽限时间 |
账号失效日期 |
保留 |
/etc/group文件结构
例:adm:x:4:syslog,kehan |
|||
1 |
2 |
3 |
4 |
adm |
x |
4 |
syslog,kehan |
用户组名称 |
用户组密码 |
GID |
用户组支持的账号名称 |
用户组的查看和切换
初始用户组(effective group)
每个用户在他的/etc/passwd里面的第四列有所谓的GID,那个GID就是所谓的“初始用户组”。当用户登录系统时,立刻就拥有这个用户组的相关权限。初始用户组是不需要在/etc/group的第四个字段写入该账号的。
有效用户组(initial group)
在/etc/group的第四个字段中配置了账号,该账号就加入了这个用户组,这个用户组就是该账号的有效用户组。
有效与支持用户组的查看:groups
groups命令显示的第一个用户组就是root的有效用户组,这时候root用户创建的文件或目录,所属的用户组就是root的有效用户组,也就是root。
切换有效用户组:newgrp
为root添加一个用户组后,groups命令查询结果如下:
用newgrp命令切换有效用户组:
此时有效用户组变更为dbgroup,此时创建的文件或目录,所属用户组就是dbgroup了。
新增用户:useradd
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名
参数:
-u:后面接的是UID,是一组数字。直接指定一个特定的UID给这个账号。
-g:后面接的用户组名就是前面提到的初始用户组,该用户组的GID会被放置到/etc/passwd的第四个字段内。
-G:后面接的组名则是这个账号还可以加入的用户组,这个参数会修改/etc/group内的相关数据。
-M:不要创建用户主文件夹(系统账号默认值)。
-m:创建用户主文件夹(一般账号默认值)。
-c:这个是/etc/passwd的第五列说明内容,可以随便设置。
-d:指定某个目录成为主文件夹,而不要使用默认值,要求使用绝对路径。
-r:创建一个系统的账号,这个账号的UID会有限制(参考/etc/login.defs)。
-s:后面接一个shell,若没有指定则默认是/bin/bash。
-e:后面接一个日期,格式为“YYYY-MM-DD”,此选项可写入shadow第八字段,即账号失效日的设置选项。
-f:后面接shadow的第七字段选项,指定密码是否会失效。0为立刻失效,-1为永不失效(密码只会过期而强制于登录时重新设置而已)。
不加参数地创建一个用户看系统做了哪些事情:
1、在/etc/passwd里面创建一行与账号相关的数据,包括创建UID/GID/主文件夹等。
2、在/etc/shadow里面将此账号的密码相关参数填入,但是尚未有密码。默认情况下账号密码永不过期。
3、在/etc/group里面加入一个与账号同名的目录作为用户的主文件夹,且权限为700.
还需要执行“passwd 用户名”命令设置用户密码后创建用户才算结束。可以看到此时密码字段是!,此时conan这个新账号是不能登录的,但是可以从root用户切换过去。
useradd默认参数
useradd参考文件(useradd默认参数来源):/etc/default/useradd
用useradd -D也可以调出默认配置。
1、GROUP=100:新建账号的初始用户组使用GID为100
系统上面GID为100即是users这个用户组,这个设置意思是让新用户账号的初始用户组为users。但是不同的Linux表现不一样,有的Linux版本默认的用户组名为与账号名相同的用户组。这是因为针对用户组的角度有两种不同的机制:
1、私有用户组机制:系统会创建一个与账号一样的用户组给用户作为初始用户组。这种用户组的设置机制会比较有保密性,这是因为用户都有自己的用户组,而且主文件夹权限将会设置为700(仅有自己可进入自己的主文件夹之故。使用这种机制将不会参考GROUP=100这个配置。
2、公共用户组机制:就是以GROUP=100这个设置值作为新建账号的初始用户组,因此每个账号都属于users这个用户组,且默认主文件夹通常的权限会是“drwxr-xr-x”,由于每个账号都属于users用户组,因此大家可以互相分享主文件夹内的数据。
2、HOME=/home:用户主文件夹的基准目录(basedir)
用户的主文件夹通常是与账号同名的目录,这个目录将会放在此设置值的目录后面。所以conan的主文件夹就是/home/conan。
3、INACTIVE=-1:密码过期后是否会失效的设置
0代表过期后立刻失效,-1代表密码永不失效,30代表过期后30天失效。
4、EXPIRE=:账号失效日期
就是/etc/shadow文件内的第八字段,可以直接设置账号在哪个日期后直接失效,而不理会密码的问题,通常不会设置此选项。
5、SHELL=/bin/sh:默认使用的shell程序文件名
6、SKEL=/etc/skel:用户主文件夹参考基准目录
指定用户主文件夹参考基准目录,新用户主文件夹的内容都是从/etc/skel中拷贝过去的。
7、CREATE_MAIL_SPOOL=no:是否创建用户的mailbox
UID/GID默认密码参数
UID/GID密码参数的参考文件/etc/login.defs
mailbox所在目录
MAIL_DIR /var/mail:用户默认邮件信箱放置目录。
shadow密码第4,5,6字段内容
PASS_MAX_DAYS 99999:/etc/shadow的第5列,更改密码后需要再次更改密码的天数
PASS_MIN_DAYS 0:/etc/shadow的第4列,更改密码后不可更改密码的天数
PASS_WARN_AGE 7:/etc/shadow的第6列,密码过期前会警告的天数
UID/GID指定数值
UID_MIN 1000:一般账号最小UID
UID_MAX 60000:一般账号最大UID
GID_MIN 1000:一般用户组最小GID
GID_MAX 60000:一般用户组最大GID
系统计算新一般用户账号ID逻辑:先参考UID_MIN取得最小值,由/etc/passwd查找最大的UID数值,将两者相比,找出最大的那个加1就是新账号的UID。如果当前最大UID是2000,那么新UID就是2001,1000~1999就会空出来。
如果是创建系统账号,那么就会找出比500小的最大的那个UID+1.
用户删除与密码设置值
USERGROUPS_ENAB yes:如果使用userdel去删除一个账号,且该账号所属的初始用户组已经没有人隶属于该用户组了,那么就删除掉该用户组。
CREATE_HOME yes:我的系统上没有这个参数,所以没有自动创建新用户的主文件夹,加上这个配置后再创建一般用户,系统会自动创建新用户的主文件夹。
所以在使用useradd创建账号时至少会参考以下三个文件:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
修改密码:passwd
所有用户都可以用passwd修改自己的密码。
只有root用户可以用“passwd 账号”来修改其他账号的密码。
参数:
-l:锁定账号,通过在/etc/shadow第二列最前面加上!使密码失效。
-u:解锁账号,和-l相对。
-S:列出密码相关参数,即shadow文件内的大部分信息。
-n:后面接天数,shadow的第4字段,多久不可修改密码天数。
-x:后面接天数,shadow的第5字段,多久内必须要改动密码。
-w:后面接天数,shadow的第6字段,密码过期前的警告天数。
-i:后面接“日期”,shadow的第7字段,密码失效日期。
root使用passwd命令可以设置各种各样的密码,几乎不会受密码复杂度的限制。
chage -l 账号名可以用来替代passwd -S 账号名,列出的信息更易读。
修改用户参数:usermod
usermod username
参数:
-c:后面接账号的说明,即/etc/passwd第五列的说明,可以加入一些账号的说明。
-d:后面接账号的主文件夹,即修改/etc/passwd的第6列。
-e:后面接日期,格式是YYYY-MM-DD,也就是在/etc/shadow内的第8个字段数据。
-f:后面接天数,为shadow的第7字段,密码过期后的账号宽限时间。
-g:后面接初始用户组,修改/etc/passwd的第四个字段,即是GID的字段。
-G:后面接次要用户组,修改这个用户组能够支持的用户组。
-a:与-G合用可增加次要用户组的支持而非设置(usermod -G dbgroup -a root)。
-l:后面接账号名称,即是修改账号名称,/etc/passwd的第一列。
-s:后面接Shell的实际文件,例如/bin/bash或/bin/sh等。
-u:后面接UID数字,即/etc/passwd第三列的数据。
-L:暂时将用户的密码冻结,让他无法登录,其实仅改/etc/shadow的密码。
-U:将/etc/shadow密码列的!去掉。
删除用户:userdel
userdel [-r] username
参数:
-r:连同用户的主文件夹一起删除。
删除的用户数据有:
用户账号/密码相关参数:/etc/passwd,/etc/shadow
用户组相关参数:/etc/group,/etc/gshadow
用户个人文件数据:/home/username,/var/spool/mail/username
想要完整删除某个用户,最好先用find / -user username查出系统内属于username的文件,删掉这些文件后再执行userdel -r username。
查询用户相关信息:id
查询自己的相关GID/UID等信息:id
查询其他账号的相关GID/UID等信息:id username
新增用户组:groupadd
groupadd 用户组名
参数:
-g:后面接某个特定的GID,用来直接给予某个GID。
-r:新建系统用户组。
修改group相关参数:groupmod
groupmod [-g gid] [-n group_name] 用户组名
参数:
-g:修改既有的GID。
-n:修改既有的组名。
不要随意修改GID,容易造成系统资源的混乱。
删除用户组:groupdel
groupdel groupname
只有没有账号以groupname为初始用户组的情况下才可以删除该用户组。
切换用户:su
su - [username]
不带username代表这切换到root用户。
不带-的情况下shell不会加载目标username的环境变量。
退出切换的用户:exit
参考资料
《鸟哥的Linux私房菜基础学习篇(第三版)》