用户和组权限
在Linux系统上,进程所能够访问资源的权限取决于进程运行者的身份.为了系统资源的安全及易管理,系统中就需要有不同权限的用户.而为了方便用户本身的分类及管理,于是就出现了组的概念.
1.Linux用户
Linux用户有自己的名字,即Username,还有一个和我们×××号码一样的编码UID,它是系统辨识用户的唯一编码.
Linux用户分为两类:管理员和普通用户,普通用户又分为系统用户和登录用户.
管理员 username=root,UID=0
普通用户的UID: 1-65535
系统用户:1-499(centos6),1-999(centos7)用于标识守护进程及其可获得的资
源
登录用户:500+(centos6),1000+(centos7)用于交互式登录
Attention:多个用户可以使用同一个UID,但系统识别用户只是看uid,遇到uid相同
的,系统就认为是同一用户
登录后,现在提示符前显示用户的username,对于同一个uid系统该采用哪个username
呢?系统会去查询/etc/passwd中username和uid的映射关系,找到第一个和当前用户
uid相同的条目就退出,此时这个条目中对应的username就是要显示的username。因此,
排在文件前面的映射会生效。
2.Linux组
Linux组和用户一样也有自己的名字和编号,groupname和gid
Linux组分为:管理员组和普通组,普通组又分为系统组和普通组
管理员组:groupname=root,gid=0
普通组:
系统组:1-499(CentOS6),1-999(CentOS7)
普通组:500+(CentOS6),1000+(CentOS7)
3.Linux用户和组之间的关系:
对于用户而言:
用户必须有且只有一个主要组(primary group),也叫私有组,组名和用户名相同
辅助组(secondary group),一个用户可以有0个或多个辅助组
一个组可以有多个成员,也可以有多个组管理员,组管理员可以改变组密码,添加或删除
组成员
4.跟用户相关的两个配置文件
/etc/passwd /etc/shadow
注意:1):这两个文件一个是存储用户信息,一个是存储密码的,早期是放在一起的,可想而知这种做法并不安全,但使用命令也可以将这两个文件合并:
#pwunconv
将密码填入/etc/passwd的x位置,并重命名/etc/shadow文件为/etc/shadow-,相关的密码策略不会显示在/etc/paaawd中
#pwconv
恢复成两个文件
2):查看/etc/passwd和/etc/shadow中某个特定用户的信息:
#getent passwd 用户名
#getent shadow 用户名
/etc/passwd 用于存储用户的相关信息,此文件以:为分隔符分为7个字段,各个字段的含义如下:
1) login name:登录用户名
2) passwd:密码(x,表示占位符;其内容在/etc/shadow文件中)
3) UID:用户ID
4) GID:基本组ID
5) Comment:用户全名或注释
6) home directory:用户家目录
7) shell:用户的默认shell
/etc/shadow 用于存储用户的密码信息,同样以:为分隔符分为9个字段,各个字段的含义如下:
1) 用户名
2) 加密后的用户密码;现在一般使用sha512加密
3) 上次修改时间:从1970年1月1日起到最近一次被更改的时间
4) 最小使用时间:密码过几天后可以变更(0表示可随时变更)
5) 最大使用时间:密码过期时间(99999表示永不过期)
6) 密码警告时间:密码过期前几天系统提示用户(默认为一周)
7) 密码失效时间:密码过期后多少天账号会被锁定
8) 账号过期时间:从1970年1月1日起,多少天后账号失效
9) 保留字段(reserved field)
5.组相关的两个配置文件
/etc/group和/etc/gshadow
查看/etc/group和/etc/gshadow中某个特定用户的信息:
#getent group 用户名
#getent gshadow 用户名
/etc/group存储的是组的相关信息,以:为分隔符:
1) 组名
2) 组密码;通常不需要设定;密码被记录在/etc/gshadow
3) GID:组ID
4) 以当前组为附加组(辅助组)的用户列表(以逗号分隔)
/etc/gshadow 存储的是组密码的相关信息
1) 组名
2) 组密码;和/etc/shadow的密码构造一样
3) 组管理员;逗号分隔用户列表,这些用户都是组管理员
4) 组成员;逗号分隔用户列表,这些都是组成员
6.专门来修改/etc/passwd和/etc/group的工具:
修改且带有语法检查的:vipw和vigr
只有语法检查功能:pwck和grpck
7.用户管理命令
1) 创建用户
useradd [option] username
-u UID UID的范围在/etc/login.defs中定义
-u -o 不检查UID的唯一性
-g GID 指明要加入的基本组,如果不指定则创建一个与用户名相同的组,并将其作为用户的基本组
-c "Comment" 用户的注释信息
-d HOME_DIR 以指定的路径为家目录 此处指定的路径必须不能是已存在的目录
-s SHELL 指明用户的默认shell
-G GP1[GP2,...] 为用户指明附加组,组必须事先存在
-N 不创建私有组作为,使用users组(Gid=100)作为基本组
-r 创建系统用户
-M 不创建家目录
-D 显示默认配置
-D -s 修改用户的默认shell信息
2)创建用户口令
passwd [options] username
-l 锁定指定用户 (密码前加!!)
-u 解锁指定用户 (删除密码前的!!)
-n mindays: 指定最短使用期限
-x maxdays: 最大使用期限
-w warndays: 提前多少天开始警告
-i inactive-days: 非活动期限
--stdin 从标准输入接收用户密码; eg: echo "123456" | passwd --stdin username
3)批量创建用户和修改用户口令
#newusers files 批量创建用户;file是满足/etc/passwd格式的文件
#chpasswd 从标准输出读入user:passwd的格式的多行文本,以此来批量修改用户口令
vim batchpasswd
user1:明文口令
user2:明文口令
...
cat batchpasswd | chpasswd
4)用户属性修改
#usermod [option] username
-u UID:指定用户新的UID
-g GID:指明用户新的基本组
-G GP1[Gp2...] 指明新的附加组,原来的附加组会被覆盖(若要保留原来的附加组,则要使用-aG)
-G "" 清空附加组
-s SHELL:指明新的默认shell
-c 'COMMENT':新的注释信息
-d HOME: 新的家目录,原来的家目录中的文件不会同时移动至新的家目录中,若要移动,则要同时使用-m选项
-l login_name: 新用户名
-L: 锁定用户 (在/etc/shadow密码前加!)
-U: 解锁用户
-e yyyy-MM-DD:指明用户账号的过期日期
-f INACTIVE:设定非活动期限
-r:删除用户家目录
5)查看用户的相关信息
#id [options] [user] 查看用户相关信息;不指明用户则查看的是当前用户
-u:UID
-g:GID
-G:group 附加组
-n:显示id对应的名字,通常和-u和-g一起使用
id -un [user] 或 is -gn [user]
#finger 打印登录到系统的所有用户的信息
finger user 查看user相关的一些信息,比如家目录,shell类型,邮件等
6) 在/etc/passwd中家目录字段必须不能为空
如果为空,则登录这个用户时,键入用户和密码之后,会不出现提示符,不能输入任何命令,等待超时之后(提示:/usr/bin/xauth: timeout in locking authority file /.Xauthority),进入/
若su - user完全切换或不完全切换 su user, 则会显示su: user user does not exist
如果不空,但目录不存在,则登录这个用户时,会直接进入/,
若su - user完全切换 会直接进入/
若不完全切换 su user 会进入执行 su user的目录
7) 切换用户或以其它用户身份执行命令
su [options] [-] [user [args...]]
切换用户的方式:
su user:非登录式切换,不会读取目标用户的配置文件,不改变当前工作目录,也称之为不完全切换
su - user 登录式切换,会读取目标用户的配置文件,切换至其家目录,也称之为完全切换
Attention:root执行su至其他用户无需密码,非root用户切换时需要密码
切换身份执行命令
su [-] user -c 'cmd'
选项 -l --login
su -l user 相当于 su - user
8)修改用户相关信息的其他命令
chfn 指定个人信息
chsh 指定shell
9)修改用户密码策略
chage [option] user
-d last_day 修改最后修改时间 对应于/etc/shadow的第3个字段
-m --mindays Min_days 修改最小使用时间 对应于/etc/shadow的第4个字段 过多少时间可以修改
-M --maxdays Max_days 修改最大使用时间 对应于/etc/shadow的第5个字段
-W --warndays Warn_days 修改警告时间 对应于/etc/shadow的第6个字段
-I --inactive Inactive 修改账户失效时间 对应于/etc/shadow的第7个字段
-E --expiredate Expire_Date 修改账户过期时间 对应于/etc/shadow的第8个字段
-l 显示密码策略
下次登录强制重设密码
chage -d 0 tom 等价于 passwd -e tom
e.g. chage -m 0 -M 42 -W 14 -I 7 tom
chage -E 2016-09-10 tom
10)删除用户
userdel user 不会删除用户家目录
-r user 才会删除用户的同时删除家目录
在/etc/login.defs中,有这样的描述
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
8. 组管理命令
1)创建组
groupadd [option] groupname
-g gid 指明GID 范围在/etc/login.defs中指定
-r 创建系统组
2)修改组
groupmod [OPTION] group
-n groupname :组的新名字
-g GID :新的GID
3)组删除
groupdel group
4)更改组密码
gpasswd [option] group
-a user 将user加入到指定组中
-M user1,user2...指定组成员列表
-d user 从指定组中删除user
-A user1,user2,... 设置有管理权限的用户列表,即设置组管理员
newgrp命令:临时切换基本组
如果用户不属于此组,则需要组密码
Attention:具体参见本文档/etc/gshadow部分
5)更改组成员
groupmems [options] [action]
options:
-g /--group groupname 更改为指定组(只有root可用)
action:
-a /--add username 指定加入组的用户
-d / --delete username 指定从组删除的用户
-p / --purge 从组中清除所有成员
-l / --list 显示组中成员
e.g. groupmems -g peng -a wang 将wang用户加入peng组
groupmems -g peng -l 查看peng组中的所有成员,似乎是查看以peng组为附加组的成员列表
groupmems -g peng -p 清除所有peng组中的成员
6)查看组成员
groups user1 user2 .. usern 列出指定一个或多个用户的组关系,格式:primary group:secondary group1 secondary group
groups 如果没有指定用户,那么打印当前进程的组关系,通常是没有基本组和附加组的概念