使用者识别码:UID与GID
使用者ID:UID
群组ID:GID
#查看系统里面有没有名为dmtsai的用户
id dmtsai
/etc/passwd档案结构:记录账号信息
每一行都代表一个账号,有几行就代表有几个账号在你的系统中。不过需要特别留意的是,
里头很多账号本来就是系统正常运作所必须要的。我们可以简称他为系统账号,例如bin,
daemon,adm,nobody…
head -n 4 /etc/passwd

content | |
---|---|
root | 账号名称 |
x | 密码 |
UID;系统管理员UID是0,1-999UID系统账号,1000~60000给一般使用者 | |
GID,与/etc/group有关 | |
root | 使用者资讯说明栏 |
/root | 家目录 |
/bin/bash | shell目录 |
/etc/shadow档案结构:记录账号密码
head -n 4 /etc/shadow
content | |
---|---|
root | 账号名称 |
$ 6$tbCCce… | 经过编码的密码 |
16559 | 最近更改密码的日期 |
密码不可被改动的天数 | |
99999 | 密码需要变更的天数,你必须要这个天数内重新设置密码 |
7 | 密码需要变更期限前的警告天数;密码到期前7天之内,系统会警告用户 |
- | 密码过期后账号宽限时间;密码过期账号还能工作 |
- | 账号失效日期 |
- | 保留 |
这里Linxu的日期是以1970年1月1日作为1而累加的,1971年1月1日则为366。
计算累积日期:
(1)你想要计算的日期 (2)一天的秒数 (3)+1:补齐1970/01/01当天
/etc/group档案结构:记录群组信息
head -n 4 /etc/group
content | |
---|---|
root | 群组名称 |
x | 群组密码 |
GID | |
- | 此群组内的账号名称。例如将dmtsai和alex加入群组root,这里写成 dmtsai,alex |
Q:假如我同时加入多个群组,那么我在作业时,到底是以那个群组为准?
有效群组(effective group)与初始群组(initial group)
初始群组:使用者/etc/passwd中第四栏GID所对应的组
我们该如何知道所有支援群组呢?
groups
我们如何切换有效群组?
newgrp 切换组名
切换后输入exit返回原来的群组
/etc/gshadow
head -n 4 /etc/gshadow
content | |
---|---|
root | 群组名称 |
- | 密码栏,如果开头为!表示无合法密码,所有无群组管理员 |
- | 群组管理员的账号 |
- | 加入该群组支援的所属账号 |
账号管理
useradd:新增使用者
useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d homedictory ] [-s shell] 使用者账号名
option | mean |
---|---|
-u | 后面接UID,指定一个特定UID给这个账号 |
-g | 指定initial group,/etc/passwd的第四个栏目 |
-G | 指定次要群组,/etc/group |
-d | 指定某个目录做家目录,用绝对路径表达 |
-s | 预设/bin/bash |
-c | /etc/passwd第五栏的说明内容 |
-m | 强制,建立使用者的家目录 |
-M | 强制,不建立使用者的节目录 |
-r | 建立一个系统账号 |
#完成参考预设值建立一个使用者,名称为vbird1
useradd vbird1
grep vbird1 /etc/passwd /etc/shadow /etc/group
#以users为初始群组,uid为1500建立一个名为vbird2的账号
useradd -g users -u 1500 vbird2
#建立一个系统账号,名称为vbird3
useradd -r vbird3
所有系统账号不会主动建立家目录
useradd参考档
呼叫出useradd的预设值
useradd -D
title | mean |
---|---|
GROUP=100 | 新建账号的初始群组使用的GID为100,在CentOS上面预设的群组为与账号名相同的群组 |
HOME=/home | 使用者家目录的basedir |
INACTIVE=-1 | 密码过期后是否会失效的设定值。0代表密码过期立刻失效;-1代表永远不会失效;数字n代表过期n天后会失效 |
EXPIRE=:账号失效日期 | |
SHELL=/bin/bash | 预设使用的shell程式档名 |
SKEL=/etc/skel | 使用者家目录参考基准目录 |
CREATE_MAIL_SPOOL=yes | 建立使用者的mailbox |
UID/GID密码参数参考
/etc/login.defs
passwd
所有人均可使用来改自己的密码:passwd [–stdin] 账号名称
root功能:passwd [-l] [-u] [–stdin] [-S] [-n day] [-x day] [-w day] [-i day] 账号
option | mean |
---|---|
–stdin | 可以通过来自前一个管线的资料,作为密码输入 |
-l | lock,/etc/shadow第二栏最前面加上!使密码失效 |
-u | unlock |
-S | 列出密码的相关参数 |
-n | 多久可以修改密码的天数 |
-x | 多久内必须修改密码 |
-w | 密码过期前的警告天数 |
-i | 密码时效天数 |
要帮一般账号建立密码需要使用 “passwd 账号” 格式,使用“passwd”是修改自己的密码
#root给予vbird2密码
passwd vbird2
#用vbird2登入后,修改VBird2自己的密码
passwd
设定密码的要求
(1)密码不能与账号相同
(2)需要超过8个字元
(3)密码不要使用个人信息
(4)密码不要使用简单关系式
(5)密码尽量使用大小写字元、数字和特殊字元组合
#使用standard input建立用户密码
echo "abc543CC" | passwd --stdin vbird2
#管理vbird2密码具有60天变更,密码过期10天后失效的设定
passwd -x 60 -i 10 vbird2
passwd -S vbird2
#让vbird2的账号失效并观察 再生效
passwd -l vbird2
passwd -S vbird2
passwd -u vbird2
chage
如何显示更详细的密码参数显示功能?
passwd -S
chage
chage [-ldElmMW] 账号名
option | mean |
---|---|
-l | 列出该账号的详细密码参数 |
-d | 修改shadow第三栏目(最近一次更改密码的日期)后面接日期,格式为YYYY-MM-DD |
-E | 后接日期,修改shadow第八栏目(账号失效日) |
-l | 后接天数,修改密码失效日期 |
-m | 后接天数,修改密码最短保留天数 |
-M | 后接天数,修改密码多久需要进行变更 |
-W | 后接天数,修改密码过期前警告日 |
#列出vbird2的详细密码参数
chage -l vbird2
#建立一个agetest的账号,该账号第一次登入后使用预设密码,但必须要更改密码后才能够登入系统使用bash环境
useradd agetest
echo "agetest" | passwd -stdin agetest
chage -d 0 agetest 密码建立时间被改为1970/1/1
usermod
usermod [-cdegGlsuLU] username
option | mean |
---|---|
-c | 修改账号的说明 |
-d | 修改家目录 |
-e | 修改失效日期,格式YYYY-MM-DD |
-g | 修改初始群组 |
-G | 修改次要群组 |
-l | 修改账号名称 |
-s | 修改shell |
-u | 修改UID |
-L | 冻结密码 |
- U | 解冻密码 |
#修改使用者vbird2的说明栏,加上 VBird's test
usermod -c "VBird's test" vbird2
#使用者vbird2在2015/12/31失效
usermod -e "2015-12-31" vbird2
#建立vbird3这个系统账号时没有给予家目录,请建立他的家目录
ll -d ~vbird3 确认家目录不存在
cp -a /etc/skel /home/vbird3
chown -R vbird3:vbird3 /home/vbird3 连同家目录底下的一起变更
chmod 700 /home/vbird3
ll -a ~vbird3
userdel
userdel [-r] username
-r:连同使用者家目录一并删除
一般使用者功能(非root)
id:查询某人或自己相关UID/GID资讯
id username
#查阅root自己的相关id资讯
id
#查阅vbird1
id vbird1
finger:查阅使用者相关资讯
finger [-s] username
-s:仅列出使用者的账号、全名、终端代号与登入时间等
#观察vbird1的使用者相关账号属性
finger vbird1
title | content |
---|---|
Login | 使用者账号(/etc/passwd 第一栏目) |
Name | 全名(/etc/passwd 第五栏目的注解) |
Directory | 家目录 |
Shell | shell档案所在 |
Never logged in | 使用者登入主机的情况 |
No mail | 调查/var/spool/mail当中的信箱资料 |
No plan | 调查~username/.plan档案,并读取其中说明 |
#利用vbird1建立自己的计划档
echo "i will study Linux during this year." > ~/.plan
finger vbird1
#找出目前在系统上面登入的使用者与登入时间
finger
chfn:change finger
chfn [-foph] username
option | mean |
---|---|
-f | fullname,后面接完整大名 |
-o | office,办公室的房间号码 |
-p | phone,办公室的电话号码 |
-h | homephone,家里的电话号码 |
#vbird1更改一下自己的相关资讯 chfn
chsh:change shell
chsh [-ls]
option | mean |
---|---|
-l | 列出目前系统上面可用的shell |
-s | 设定修改自己的shell |
#用vbid1的身份列出系统上所有合法的shell,并且制定csh为自己的shell
chsh -l
chsh -s /bin/csh ; grep vbird1 /etc/passwd
chsh -s /bin/bash
新增与移除群组
groupadd:增加群组
groupadd [-g gid] [-r] 群组名称
option | mean |
---|---|
-g | 给予群组一个GID |
-r | 建立系统群组 |
groupmod:修改group相关参数
groupmod [-g gid] [-n group_name] 群组名
option | mean |
---|---|
-g | 修改GID |
-n | 修改群组名称 |
将group1的名称改为mygroup,GID为201
groupmod -g 201 -n mygroup group1
groupdel:删除群组
groupdel groupname
gpasswd:群组管理员功能
关于root做的动作:
gpasswd groupname
gpasswd [-A user1] [-M user3] groupname
gpasswd [-rR] groupname
option | mean |
---|---|
-A | 将groupname的主控权交由user1管理 |
-M | 将某些账号加入这个群组中 |
-r | 将groupname的密码移除 |
-R | 将groupname的密码栏失效 |
- | 若没有参数,表示给予groupname一个密码 |
关于群组管理员做的动作:
gpasswd [-ad] user groupname
option | mean |
---|---|
-a | add, 将使用者加入到groupname这个群组当中 |
-d | del,将使用者移除groupname这个群组当中 |
建立一个新群则,名称为testgroup,且群组交由vbird1管理
groupadd testgroup 建立群组
gpasswd testgroup 设置密码
gpasswd -A vbird1 testgroup
su:身份切换指令
su [-lm] [-c command] username
option | mean |
---|---|
- | su - 代表切换root身份 |
-l | 后接username |
-m | 使用目前环境设定 |
-c | 仅进行一次指令,后面接指令 |
#切换root身份 观察变数
su -
env|grep root
exit
# 执行命令
su --c "head -n 3 /etc/shadow"
#切换身份vbird1
su -l vbird1
sudo:相比su需要知道新切换使用者的密码,sudo执行仅需要自己的密码即可
sudo [-b] [-u username]
option | mean |
---|---|
-b | 将后续的指令方到背景中让系统自动执行 |
-u | 后面接欲切换的用户,默认为root |
#以sshd身份在/tmp底下建立一个mysshd文档
su -u sshd touch /tmp/mysshd