权限管理
用户文件
如果我创建一个用户后会在home文件下建立一个文件。
root用户为单独文件
- 普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
- 超级用户:/root/,所有者和所属组都是root用户,权限是550
- (如果将普通用户改为超级用户该用户的目录不会改变。)
- 用户的邮箱:/var/spool/mail/用户名/
- 用户模板目录:/etc/skel/
- 用户默认值文件:/etc/default/useradd /etc/login.defs
初始组:linux每添加一个用户就会以这个用户名创建一个组。初始组可以改不可以选。
附加组:用户可以加入多个其他的用户组,并拥有这些组的权限,附件组可以有多个
shell就是Linux的命令解释器,在/etc/passwd当中,除了标准shell是/bin/bash之外,还可以写如/sbin/nologin.
把时间戳换算为日期date -d "1970-01-01 16066 days"
把日期换算为时间戳echo$(($(date --date="2014/01/06"+%s)/86400+1))
用户管理命令
用户添加命令useradd [选项] 用户名
选项:
- -u UID :手工指定用户的UID号
- -d 家目录:手工指定用户的家目录
- -c 用户说明:手工指定用户的说明
- -g 组名:手工指定用户的初始组
- -G组名:指定用户的附加组
- -s shell:手工指定用户的登录shell。默认是/bin/bash
修改用户密码passwd [选项] 用户名
选项:
- -S :查询用户密码的密码状态。仅root用户可用
- -l :暂时锁定用户。仅root用户可用
- -u :解锁用户。仅root
- --stdin :可以通过管道符输出的数据作为用户的密码。
修改用户信息usermod [选项] 用户名
选项:
- -u UID
- -c 用户说明
- -G 组名
- -L 锁定
- -U 解锁
修改用户密码状态chage [选项] 用户名
选项:
- -l :查询密码状态
- -d 日期:修改密码最后一次更改日期(shadow3字段)
- -m 天数:两次密码修改间隔(4)
- -M 天数:密码有效期(5)
- -W 天数:密码过期前警告天数(6)
- -I 天数:密码过后宽限天数(7)
- -E 日期:账号失效时间(8)
chage -d 0 用户名
#要求用户下次更改密码
删除用户userdel [-r] 用户名
选项:
- -r :删除用户的同时删除用户家目录 id 用户 查询用户的所有ID
用户切换命令su [选项] 用户名
选项:
- -:选项只使用“-”代表连带用户的环境变量一起切换
- -c :仅执行一次命令,而不切换用户身份
su -root -c "useradd user3"
#不切换成root,但是执行useradd命令添加userl用户
用户配置文件
- 用户信息文件/etc/passwd
- 第1字段:用户名称
- 第2字段:密码标志
- 第3字段:UID(用户ID)
- 0:超级用户
- 1-499:系统用户(为用户)
- 500-65535:普通用户,centos7从1000开始
- 第4字段:GIU(用户初始组ID)
- 第5字段:用户说明(备注)
- 第6字段:家目录
- 普通用户:/home/用户名/
- 超级用户:/root/
- 第7字段:登录之后的Shell
- 影子文件/etc/shadow
权限为000
- 第1字段:用户名
- 第2字段:加密密码
- 加密算法升级为SHA512散列加密算法
- 如果密码位是“!!”或“*”代表没有密码,不能登录
- 第3字段:密码最后一次修改日期
- 使用1970年1月1日作为标准时间,每过一天时间戳加1
- 第4字段:两次密码的修改间隔时间(和第3字段相比)
- 第5字段:密码有效期(和第3字段相比)
- 第6字段:密码修改到期前的警告天数(和第5字段相比)
- 第7字段:密码过期后的宽限天数(和第5字段相比)
- 0:表示密码过期后立即失效
- -1:则表示密码永远不会失效(默认)
- 第8字段:账号失效时间
- 要用时间戳表示
- 第9字段:保留
- 组信息文件/etc/group和组密码文件/etc/gshadow
group:
- 第1字段:组名
- 第2字段:密码标志
- 第3字段:GIU(同上)
- 第4字段:组中附加用户(不会显示初始用户)
gshadow:
- 第1字段:组名
- 第2字段:组密码
- 第3字段:组管理员用户名
- 第4字段:组中附加用户
用户组管理
添加用户组groupadd [选项] 组名
选项:
- -g GID :指定组ID
修改用户组groupmod [选项] 组名
选项:
- -g GID:修改组ID
- -n 新组名:修改组名
删除用户组groupdel 组名
把用户添加入组或从组中删除gpasswd 选项组名
选项:
- -a 用户名:把用户加入组
- -d 用户名:把用户从组中删除
ACL权限
用于解决身份不足的问题解决
开启acl dumpe2fs -h 分区
dumpe2fs命令是查询指定分区详细文件系统信息的命令
- -h 仅显示超级中信息,而不显示磁盘快的详细信息
mount -o remount,acl /
重新挂载根分区,并挂载加入acl权限(临时)
vi /etc/fstab
UUID=c2………../ ext4 defaults,acl 1 1
加入acl(永久)
mount -o remount /
重新挂载文件系统或重启动系统,使修改生效
查看与设定
查看ACL命令getfacle 文件名
设定ACL权限的命令setfacl 选项文件名
选项:
- -m (u<用户权限>:用户:权限)/(g<组权限>:组名:权限)/(m<最大有效权限>:权限)/(d<默认>:u<用户>:用户名:权限[只允许目录]) 设定ACL权限
- -x (同上无需指定权限) 删除指定的ACL权限
- -b 删除所有的ACL权限
- -d 设定默认ACL权限
- -k 删除默认ACL权限
- -R 递归设定ACL权限 [必须跟着m后面 | 只允许目录]
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限 设置默认默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
文件系统属性chattr权限
chattr [+-=][选项] 文件或目录名
+:增加权限 -:删除权限 =:等于某权限 选项:
- i: 如果对文件设置i属性,那么不允许文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。(对root生效)
- a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
系统命令权限sudo
- root把本来只能超级用户执行的命令赋予普通用户执行
- sudo的操作对象是系统命令
sudo -l
查看可用的sudo命令
赋予权限
[]#visudo
#实际修改的是/etc/sudoers文件
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理组主机的地址=(可使用的身份) 授权命令(绝对路径)
文件特殊权限
除了 rwx 权限,还会用到 s 权限
SetUID
SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
功能:
- 只有可以执行的二进制程序(可执行文件)才能设定SUID权限
- 命令执行者要对该程序拥有x (执行)权限
- 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中临时替代为文件的属主)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设定 4代表SUID 2代表SGID 1代表SBIT
chmod 4755 文件名(如果出现大写S为报错)
chmod u+s 文件名
chmod 755 文件名
chmod u-s 文件名
温馨提示:(不要设置SUID)
关键目录应严格控制写权限。比如“/”、“/usr”等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
SetGID
当 s 权限位于所属组的 x 权限位时,就被称为 SetGID,简称 SGID 特殊权限
对文件的作用:
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x (执行)权限.
- 命令执行在执行程序的时候,组身份升级为该程序文件的属组
- SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
执行locate命令时发生的
- /usr/bin/locate是可执行二进制程序,可以赋予SGID
- 执行用户lamp对/usr/bin/locate命令拥有执行权限
- 执行/usr/bin/locate命令时,组身份会升级为slocate组,slocate组 对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
- 命令结束,lamp用户的组身份返回为lamp组
对目录的作用
- 普通用户必须对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
Sticky BIT
粘着位作用
- 粘着位目前只对目录有效
- 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件