Linux是多用户、多任务操作系统
一般来说,一个服务分配一个用户,这个用户只拥有这个服务相关文件的相关权限,如果用户不需要登陆,连密码都可以不分配,一般来说,非法分子都是获取当前进程的的权限来攻击服务器,而不是取得某个用户的用户名和密码。
vim /etc/passwd
man 5 /etc/passwd // 查看配置文件帮助
每一行对应一个用户,7个字段含义如下
1 用户名称
2 密码标志 // 早期密码在这里,后来改到/etc/shadow里,这里就只有一个标记了,x表示用户有密码
3 UID(用户ID)
0:超级用户,可以把普通用户的UID修改为0就成为了管理员,可以重叠
1-499:系统用户(伪用户),这些用户不能删除,
500-65535:普通用户
4 GID(用户初始组ID),建立用户是会同时建立一个初始组,一个用户只能属于一个初始组,但是可以挂在其他的附加组。
5 用户说明
6 家目录
7 登陆之后的Shell,命令解释器,标准的/bin/bash,还有/sbin/nologin伪用户
vim /etc/shadow
每个用户一行,shadow文件的权限为000
1 用户名
2 加密密码
3 设置密码的时间,单位是天,1970年1月1日开始
4 两次修改密码的间隔,单位天,设置天数内不许修改
5 密码有效期
6 密码到期前几天开始警告
7 密码过期后的宽限天数,0:过期后立即失效,-1:密码永远不会失效
8 账号失效时间,要用时间戳表示
9 保留位
换算时间戳
没添加一个用户,就会生成一个和用户名一样的组,作为用户的初始组
1 组名
2 组密码标志,组密码并不常见
3 GID
4 组中附加用户
1 组名
2 组密码,不推荐使用
3 组管理员用户名,如果设置了
4 组中附加用户
添加用户时如果不指定组,就会生成一个和用户名相同的组。
用户的家目录
普通用户:/home/用户名,自动建立,权限为700
超级用户:/root/,权限是550,权限形同虚设,
用户的邮箱
/var/spool/mail/用户名/
用户模板目录
新建用户的家目录里会从这里拷贝文件,/home/wang/
/etc/skel/
Linux下用户分为三种:
@ 超级用户
@ 普通用户
@ 虚拟用户/伪用户 // 不能登陆系统,满足系统进程对文件属主的要求。
组的出现是为了让权限可批量分配给用户
一个用户可以属于多个组,他将拥有多个组的权限集合
一个用户至少属于一个组
adduser bob1 // 添加用户,没有指定组
产生的影响有:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/bob1 // 生成bob1家目录
/var/spool/mail/bob1 // 生成bob1邮箱目录
选项
-u UID // 手动指定用户UID,不建议手动设定
-d 家目录 // 不建议手动设定
-c 用户说明 //
-g 组名 // 初始组,不建议设定
-G // 附加组,用逗号分隔多个组
-s shell // 制定shell
useradd -u 666 -G root,bin -c "test user" -d /liming -s /bin/bash liming
添加用户默认值文件
/etc/default/useradd // 添加用户时默认的参数
GROUP=100 // 现在已经不是这样,直接新建了同名组
HOME=/home
INACTIVE // 密码过期宽限天数
EXPIRE= // 密码失效时间(8)
SHELL=/bin/bash // shell
SKEL=/etc/skel // 模板目录
CREATE_MAIL_SPOLL=yes // 是否建立邮箱
用户登陆配置默认配置
/etc/login.defs
PASS_MAX_DAYS 999999 // 密码有效期
...
passwd bob1 // root给用户bob1设置/修改密码,不需要提供旧密码
passwd // 普通用户给自己修改密码,需要提供旧密码
passwd -S bob1 // root常看普通用户的密码状态
passwd -l bob1 // 管理员锁定普通用户,实际将shadow文件里的密文串修改了
passwd -u bob1 // 管理员解锁普通用户
echo "123" | passwd --stdin bob1 //设置密码为123
usermod和useradd的选项一样,只是一个是添加用户一个是修改已存在的用户
usermod -c "test user" bob1 // 添加用户说明
usermod -G root bob1 // 加入到附加root组
usermod -L bob1 // 锁定用户的另一种方法
usermod -U bob1 // 解锁用户
直接修改shadow文件更加直观
chage -l bob1 // 列出用户的详细密码状态
chage -d // 修改密码最后一次更改日期(shadow 第3字段)
chage -m // 两次密码修改间隔(4)
chage -M // 密码有效期(5)
chage -W // 密码过期前警告天数(6字段)
chage -I // 密码过期后宽限天数(7)
chage -E // 账号失效时间(8)
chage -d 0 bob1 // 将密码修改日期归0,这样用户一登陆就必须修改密码
userdel -r bob1 // 删除用户的同时删除家目录,-r删家目录
手工删除用户
vi etc/passwd
vi etc/shadow
vi etc/group
vi etc/gshadow
rm -rf /var/spool/mail/bob1
rm -rf /home/bob1/
su - root // 一定连同环境变量一起切换,杠没有就没有切换环境变量,会引发不可预测错误
env // 查看当前用户环境变量
su - bob1 // 超级用户切换普通用户,不需要输入密码
su - root -c "useradd user" // 不切换root,但是使用一次root身份来执行命令
id // 查看当前用户信息
whoami // 查看当前有效用户(su 切换的用户)
who am i // 查看当前实际用户(登陆用户)揭穿马甲
groupadd -g 500 // 手动指定GID,一般直接groupadd room401
groupmod -n room501 room401 // 修改组名401为501
groupmod -g 555 // 修改GID
groupdel room401 // 直接删,组没有家目录
一个组是一个用户的初始组,那么这个组是不可以被删除的,除非先删除用户
gpasswd -a user1 root // 将user1加入到root组,是附加组
gpasswd -d user1 root // 将user1从root组删除
groupadd -r mysql // 添加一个系统组,没有家目录,ID号小于500
chown -R bob1:mygroup /etc/test // 递归修改目录的所有者和所属组
chown -R bob1.mygroup /etc/test // 也可以用点