etc/passwd
[root@iz2zeczv3xrnm2jx6aayhxz ~]# head -n 4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin 账号名称:密码:UID:GID用户信息说明栏:家目录:shell
其中shell栏位, bin/bash是能登陆, sbin/nologin 是不能登陆
etc/passwd 保存了用户信息, 有几条说明就有几个账号
注意,一台机子上不见得就只有一个root,把别的用户的GID改成0,它也便成了root
etc/shadow
保存了用户的密码, 各个程序需要对etc/shado 有-rw-r--r--权限
root:$6$z...UZlm1ytLew.:18113:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
root:$6$z...UZlm1ytLew.:18113:0:99999:7:::
用户名:密码:最近修改密码日期:密码不可修改天数:密码需要重新修改的天数:密码需要修改期限前的警告天数:密码过期后的账号宽限时间:账号时效日期:保留
- root 用户名
- 密码 加密的密码
- 18113 最近修改密码的天数, 是距离1970.1.1 的天数
- 0 密码不可修改的天数, 0为可以随时修改,如3 , 就是3天不能再次修改密码
- 99999 密码要重新修改的天数,例如3 如果在3天内不修改密码,密码就会过期
- 7 密码修改期限前几天开始警告,
- 空, 密码过期后的宽限时间,如设置了3, 密码过期了,就是上面的5, 在规定日期前, 还没修改密码, 密码就过期了。密码过期了, 其实还可以登陆系统, 不过系统会强制你改密码。这个宽限时间就是,你密码过期3天内,登陆并改密就可以了, 如果过了3天,你的密码就是失效了,不能再登陆系统了。
- 空 账号失效日期。 还是距1970.1.1 的天数, 如果过了这个数, 即使你的账号没过期, 就是5没过期, 密码也是失效的,无法在登陆了。
- 保留, 可以加新功能
- 密码过期和失效的区别, 过期就是你还可以登陆系统, 系统强制让你改密码, 改完就可以正常登陆了;失效就是你根本不能用这个账号和密码登陆系统了。
/etc/group
记录的是GID于组命对应的记录
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
root:x:0: 组名:用户密码:GID:此用户支持的账号名称
此用户支持的账号名称: 说的就是哪些用户可以加到这个组里, root:x:0:aki,desky 就把这两个用户加到这个用户组里了, 注意aki,desky没空格。
有效用户和初始组用户
/etc/group下
1 users:x:100:aki
2 aki:x:1000: 对于用户组aki来时2是它的初始用户组, users是它的次要用户组
对已有文件的读取, 写入,执行时, 只要是用户users和aki有的权限, aki都有
但对于新建的文件来说,新的文件的用户组是哪个?一般情况肯定是aki 这个初始用户了。
groups
查看有效的用户
groups
aki users
第一个值是它的有效用户。所以aki属组的账号新建的文件的属组一定是它自己了
newgrp
切换有效用户组, 注意是切换, 切换成的只能是groups 返回的属组。
newgrp users
groups
users aki
exit
这个根bash类似, 都是开启个子进程执行, 所以最后要exit, 回到主进程。
/etc/gshadow
[root@ ~]# head -n 4 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
bin::: 组命:密码栏:用户组管理员账号:有加入该用户组的所属账号
关于useradd, usermod, userdel, passwd
①useradd 新建用户
-c 说明栏
-u 指定uid
-g 指定初始用户组
-G 可加入的用户组
-M 强制, 不要建立家目录
-m 强制建立家目录
-d 指定目录成为家目录
-r 建立系统账号
-s 后面加shell, 默认是 /bin/bash 可登陆的。 可以设置成 /sbin/nologin 不可登陆的
-e 设置shadow的失效日期
-f 设置shadow的密码是否会实失效, 0立刻失效, -1永不失效
[root@ ~]# useradd fuckit
[root@ ~]# grep fuckit /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:fuckit:x:1004:1004::/home/fuckit:/bin/bash
/etc/shadow:fuckit:!!:18175:0:99999:7:::
/etc/group:fuckit:x:1004:
/etc/gshadow:fuckit:!::
这说明useradd xxx:
- 会在 /etc/passwd 下新建个于账号有关的数据
- 会在/etc/shadow 建立密码相关的参数, 密码默认是空的
- 会在/etc/group 新建一个同名的用户组
- 会在/etc/gshadow 新建
- 会在/home 新建个家目录, 且权限是700
当然也可以指定参数
useradd -u 1500 -g users aki
系统中有个users的用户组,uid为1500的组不存在。 这个命令就是指定uid, 并把这个用户加到users组里。
建立系统账号
useradd -r xxx
系统账号的uid和gid都小于1000, 而且不会主动建立家目录
② passwd
用useradd新建的用户, 是暂时被锁定的, 因为没密码。
所以要用passwd 设置密码
--stdin 可以接收管道来的数据, 作为密码
-l lock, 会在/etc/shadow 的密码栏 加 ! 让密码失效
-u 解锁, 拿掉!
-S 列出密码相关参数
-n 多久不可修改密码的天数
-x 多级内必须修改密码的天数
-w 密码过期前警告的天数
-i 密码失效的日期的天数
passwd xxx 更改xxx 用户的密码, 只用root 才可以
passwd 该当前登陆者自己密码
echo "123456" | passwd --stdin xxx
也可以这样改密码, 缺点是可以 看命令历史记录查到密码
passwd -S xxx 查看详情
passwd -x 60 -i 10 xxx
passwd -l xxx 锁住这个用户, 让他不能登陆
passwd -u xxx 解锁
③ chage 查看密码参数详情
-l 列出密码参数的详情 YYYY-MM-DD
-d 最近修改密码的日期 YYYY-MM-DD
-E 失效日期
-I 密码过期后的宽限时间 大写的i
-m 密码不可修改的天数
-M 密码多久要改的天数
-W 过期前警告的天数
它还有功能: 让用户第一登陆时, 强制他们改密码
useradd aki
echo "aki" | passwd --stdin aki 给用户aki 的密码设置成aki
chage -d 0 aki 将最后修改密码的天数设置成0. 这样第一次登陆会强制改密
④ usermod 修改useradd 增加用户的数据
-c 修改/etc/passwd的说明
-d 修改家目录
-e shadow 的失效日期, 格式 YYYY-MM-DD
-f 密码过期后的宽限时间 天数
-g 设置初始用户组
-G 设置次要用户组
-a 于-G合用, 增加次要用户组
-l 设置passed 的第一栏, 就是账号名称
-s 设置shell, /bin/bash /sbin/nologin
-u 修改uid
-L 锁住用户xx
-U 解锁
usermod -c "dsfasdfs" xxx
usermod -e "2020-04-01" xxx
⑤ userdel
-r 连同使用者的家目录都删除
userdel -r xxx
关于groupadd, groupmod, groupdel, groupwd
① groupadd
-g 指定gid
-r 指定是系统用户组 (gid小于1000, 不建立家目录)
②groupmod
-g 修改gid
-n 修改用户组的名字
③groupdel
用户组里有用户时, 是不能删除的。所以可以想修改用户的gid, 在删除用户组。
④gpasswd 用户组管理员功能
不加任何参数表示,设置groupname的密码
-A 将groupname的管理权交给后面的使用者
-M 将某些账号加入到这个用户组中
-r 将groupname的密码删除
-R 让groupname密码栏失效
-a 将某位使用者加入到groupname
-d 将某位使用者删除出groupname
groupadd testgroup 增加个用户组
gpasswd testgroup 给用户组设置个密码, 会有加密码的提示弹出
gpasswd -A xx testgroup 把xx用户加到testgroup中, 使它成为组管理员
gpasswd -a xxx testgroup 把xxx用户加入到testgroup中, 让它成为组员
用户组管理员可以管理哪些账号可以移除加入该组