• UID:用户的身份号码
◇ 0 管理员,系统的管理用户root
◇ 1-999 系统用户,默认的服务会有独立的系统用户负责运行,防止黑客提权
◇ >1000 普通用户
•
• 命令补充
◇ useradd [选项] [用户名]:创建新用户
? 参数:
- -d 指定用户的家目录,默认为/home/用户名
- -e 账户的到期时间,格式为YYYY-MM-DD
- -u 指定该用户的UID
- -g 指定一个初始的用户基本组(必须已经存在)
- -s 指定该用户的默认shell解释器,/sbin/nologin代表该用户不能登录到系统中
- -N 不创建与用户同名的基本用户组
- -G 指定一个或者多个扩展用户组
◇ group [选项] [群组名]:创建用户组
◇ usermod [选项] [用户名]:修改用户的属性
? 参数:
- -c 填写用户账户的备注信息
- -d -m 重新指定用户的家目录并自动把旧的数据转移过去
- -e 账户的到期时间
- -g 变更所属用户组
- -G 变更扩展用户组
- -L 锁定用户禁止其登录系统
- -U 解锁用户,允许其登录系统
- -s 变更默认终端
- -u 修改用户的UID
◇ passwd [选项] [用户名]:修改用户密码、过期信息、认证信息
? 参数:
- -l 锁定用户,禁止登录
- -u 解锁用户,允许登录
- --stdin 允许通过标准输入修改密码
- -d 用户可以无密码登录
- -e 强制用户在下次登录时修改密码
- -S 显示用户的密码是否锁定,以及密码所采用的加密算法名称
- -x 设置密码的有效期
- -i 过期后停止用户账号
◇ userdel [选项] [用户名]:删除用户
? 参数:
- -f 强制删除用户
- -r 同时删除用户以及家目录
• 区分不同文件类型的字符
◇ - 普通文件
◇ d 目录文件
◇ l 链接文件
◇ b 块设备文件
◇ c 字符文件
◇ p 管道文件
• 文件权限的字符与数字表示
• 文件特殊权限
◇ 4为SUID=u+s,2为SGID=g+s,1为SBIT=o+t,一般使用u+s等字符进行权限附加,数字方式可能不生效,如果标志位出现大写的字母S、T(没有执行权限)等,相当于特殊权限未附加上,需要排除
下面设置指令中的xxx在实际使用时需要换成权限数字
◇ SUID:对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
如果对vim设置此权限后,可以编辑shadow等原先没有权限的文件,比较危险
? 前提条件:
- 具有可执行权限的二进制程序
- 所有者必须对欲设置SUID的文件具备可执行权限
- 命令执行过程中,其他用户获取所有者的身份(灵魂附体)
- SUID具有时间限制,即完成该程序执行后就消失
? 设置指令:
- 设置
→ chmod 4xxx 文件
→ chmod u+s 文件
- 取消
→ chmod 0xxx 文件
→ chmod xxx 文件
→ chmod u-s 文件
◇ SGID:让执行者临时拥有属主的权限(对拥有执行权限的二进制程序进行设置);在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
其实,SGID基本与SUID相同,无非也就是一个设置所有者的权限,SGID为设置所属组的特殊权限,区别点在于:SGID也可以设置目录的相关SGID权限。
? 针对文件:
- 可执行的二进制文件
- 命令执行者(即所属组)对该文件具有执行权限
- 执行时,执行者被所属组灵魂附体
- 权限只在执行过程中有效
? 针对目录:
- 普通用户对目录具备r和x权限,才可以进入到该目录
- 普通用户在此目录中的有效组会变成目录的所属组
- 如果普通用户对该目录具备w权限,新建文件的所属组为该目录的所属组
? 设置指令:
- 设置
→ chmod 4xxx 文件/目录
→ chmod g+s 文件/目录
- 取消
→ chmod 0xxx 文件/目录
→ chmod xxx 文件/目录
→ chmod g-s 文件/目录
◇ SBIT:粘滞位(保护位),目录中的文件只能被文件的所有者执行删除操作
? 说明
- 只对目录有效
- 普通用户对该目录有w和x权限
- 若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有w权限),包括其它用户建立的目录/文件;
但若赋了SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录
? 设置指令
- 设置
→ chmod 1xxx 目录
→ chmod o+t 目录
- 取消
→ chmod 0xxx 目录
→ chmod xxx 目录
→ chmod o-t 目录
◇ 总结:
? 作用范围和功能:
- SUID作用于文件(二进制程序),此用户将继承此程序的所有者权限
- SGID作用于文件(二进制程序)和目录。对于文件,此用户将继承此程序的所属组权限;对于目录,此文件夹下所有用户新建文件都自动继承此目录的用户组
- SBIT作用于目录,设定后,目录中的用户只能删除、移动或改名自己的文件或目录
? 权限设置和注意事项
- 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限
chmod u+s 添加SUID
chmod g+s 添加SGID
chmod +s 同时添加SUID和SGID
chmod -s 同时删除SUID和SGID
chmod o+t 添加SBIT
chmod +t 添加SBIT
chmod o-t 删除SBIT
- 数字权限表示法添加/删除时
→ 数字权限法可以同时删除文件的所有三种超级权限
chmod 0755 文件
chmod 755 文件
→ 数字权限法只能删除目录的SBIT,不能删除目录的SUID和SGID
→ 数字权限法每次只能设置一种超级权限.添加权限时,
对于文件,会删除掉原有的其他超级权限;
对于目录,添加SUID或SGID时,SBIT会被删除
- 所有表示为大写字母的权限均为无效(故障)权限,因为缺少了相应的x权限
- 几个权限位映射参考
→ SUID: user, 占据属主的执行权限位;
s: 属主拥有x权限
S:属主没有x权限
→ SGID: group, 占据group的执行权限位;
s: group拥有x权限
S:group没有x权限
→ SBIT: other, 占据ohter的执行权限位
t: other拥有x权限
T:other没有x权限
• 补充命令:
◇ chmod [参数] [权限] [文件或目录名称]:设置文件或者目录的权限(-R 对目录进行递归操作)
◇ chown [参数(-Rf)] [所有者:所属组] [文件或目录名称]:设置文件或目录的所有者和所属组(-R 对目录进行递归操作)
文件的隐藏属性和控制列表
• chattr [参数] [文件]:设置文件的隐藏权限,给文件添加某项隐藏功能,则在chattr后加“+参数”,删除隐藏功能为“-参数”
◇ 参数
? i 无法对文件进行修改;如果对目录设置此权限,则仅能修改其中的子文件内容而不能新建或删除文件
? a 仅允许追加内容,无法覆盖/删除内容
? S 文件内容在变更后立即同步到硬盘(sync)
? s 彻底从硬盘中删除,不可恢复(用0填充原文件所在的硬盘区域)
? A 不再修改文件或目录的最后访问时间(atime)
? b 不再修改文件或目录的存取时间
? D 检查压缩文件中的错误
? d 使用dump命令备份时忽略本文件或目录
? c 默认将文件或目录进行压缩
? u 当删除文件后依然保留其在硬盘中的数据,方便日后恢复
? t 让文件系统支持尾部合并(tail-merging)
? X 可以直接访问压缩文件中的内容
• lsattr [参数] [文件]:查看文件的隐藏权限
• setfacl [参数] [文件名称]:管理文件的Acl规则。文件的ACL提供的是在所有者、所属组、其他人的读写执行权限之外的特殊权限控制,setfcal可以针对单一用户或者用户组、单一文件或目录进行读写执行权限的控制。
◇ 参数:
? -R 针对目录时使用(-Rm)【setfacl -Rm u:linuxprobe:rwx /root】
? -m 针对普通文件时使用
? -b 删除所有的的ACL设定参数
? -x 删除后续的acl 参数,不可与-m 合用
? -d 只对目录有效,在该目录新建的文件会引用此预设值,即为目录添加默认的acl权限,此目录下创建目录和文件都会继承此权限信息
◇ 实例:
? 针对用户的设定方式【 u:用户名:权限】:
- setfacl -m u:user:rwx testfile 设定user对testfile有rwx权限
- setfacl -R -m u:user:rwx testdirectory 设定user对testdirectory目录下所有文件有RWX权限
- setfacl -x u:user testdirectory/ 掉user对testdirectory的x权限
- setfacl -b 去掉所有acl权限
- setfacl -d -m u:user:rwx testdirectory/ 为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
? 针对群组的权限设定【g:群组名:权限】:
- setfacl -m g:mygroup1:rx acl_test1
• getfacl [文件/目录]:显示文件或目录上设置的ACL信息
• id :查看当前登录用户的uid、gid、groups
• su - 用户名:切换用户,加-代表完全切换的意思,即把环境变量信息已变更为新用户的响应信息
• sudo [参数] [命令]:给普通用户提供额外的权限来完成root管理员才能完成的任务,验证密码后5分钟之内无需再次验证。
◇ 参数:
? -h 列出帮助信息
? -l 列出当前用户可执行的命令
? -u 用户名或者UID值 以指定的用户身份执行命令
? -k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
? -b 在后台执行指定的指令
? -p 更改询问密码的提示语
• visudo:一次性解决使用sudo命令之后需要输入用户密码的痛点
◇ 只有root用户才能使用的命令
◇ 在root ALL=(ALL) ALL 下一行添加一行信息【谁可以使用 允许使用的主机=(以谁的身份) 可执行的命令列表】,例如linuxprobe ALL=(ALL) ALL
如果不想每次都输入密码,则变为linuxprobe ALL=(ALL) NOPASSWD:ALL
◇ 使用sodo -l查看可以执行的命令
◇ 可执行的命令列表ALL不符合安全要求,如果想要让用户使用某一个命令,则将ALL替换成相应的路径,使用 whereis+命令 查看命令的安装路径(显示的第一个路径)
例如: linuxprobe ALL=(ALL) /usr/bin/cat,让linuxprobe能够使用cat指令查看一些只能root才能查看的文件,使用时,需要在cat前加sudo
原文:https://www.cnblogs.com/JYLCSS/p/10549134.html