Linux中的文件访问控制
在Unix系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用【SUID,SGID,SBIT】,再搭配拥有者与所属群组管理权限范围。
SUID:
1、只对二进制可执行程序有效,不能为普通文件;
2、对程序文件必须拥有执行权限;
3、启动为进程之后,其进程的宿主为原程序文件的宿主;
4、SUID设置在目录上无意义。
权限设定:
chmodu +s FILE...
chmodu -s FILE...
SGID:
可以应用在二进制文件和作用在文件夹下,当作用在二进制文件下时,作用和SUID相似,只不过SUID是把发起者临时变为文件的所有者,
??而SGID是把进程的发起者变成源程序文件的属组
??默认情况下,用户创建文件时,其属组为此用户所属的主组,当SGID作用在目录下时,则对此目录有写权限的用户在此目录中创建的文件所属的组
??为此目录的属组,通常用于创建一个协作目录。
权限设定:
chmodg +s FILE...
chmodg -s FILE...
Sticky【SBIT】:
默认情况下用户可以删除具有写权限的目录中的任何文件,无论该文件的权限或拥有权,如果在目录设置Sticky位,只有文件的所有者或root可以删除该文件,Sticky位是作用在文件夹的,设置在文件上毫无意义。
权限设定:
chmodo +t DIR...
chmodo -t DIR...
可以使用chmod命令、setfacl命令变更文件或目录的权限,设置时采用文字或数字代号皆可。
可以使用chown命令变更文件或目录的拥有者及所属群组。
注意:符号链接的权限无法变更,如果对符号链接修改权限,其改变会作用在被链接的原始文件
权限位映射
SUID: user,占据属主的执行权限位
??s:属主拥有x权限
??S:属主没有x权限
SGID: group,占据属组的执行权限位
??s: group拥有x权限
??S:group没有x权限
Sticky: other,占据other的执行权限位
??t:other拥有x权限
??T:other没有x权限
用户user
令牌 | token,identity |
Linux用户 | Username/UID |
管理员 | root / 0 |
普通用户 | 1-60000 自动分配 |
系统用户 | 1-499, 1-999 (CentOS7) |
对守护进程获取资源进行权限分配 | |
登录用户 | 500+, 1000+(CentOS7) |
组group
Linux组:Groupname/GID
管理员组:root, 0
普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)
Linux安全上下文
??运行中的程序:进程 (process)
??以进程发起者的身份运行:
??root: /bin/cat
??mage: /bin/cat
??进程所能够访问资源的权限取决于进程的运行者的身份
用户和组的配置文件
??Linux用户和组的主要配置文件:
????/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
????/etc/group:组及其属性信息
????/etc/shadow:用户密码及其相关属性
????/etc/gshadow:组密码及其相关属性
passwd文件格式
login name:登录用名(wang)
passwd:密码 (x)
UID:用户身份编号 (1000)
GID:登录默认所在组编号 (1000)
GECOS:用户全名或注释
home directory:用户主目录 (/home/wang)
shell:用户默认使用shell (/bin/bash)
shadow文件格式
??登录用名
??用户密码:一般用sha512加密
??从1970年1月1日起到密码最近一次被更改的时间
??密码再过几天可以被变更(0表示随时可被变更)
??密码再过几天必须被变更(99999表示永不过期)
??密码过期前几天系统提醒用户(默认为一周)
??密码过期几天后帐号会被锁定
??从1970年1月1日算起,多少天后帐号失效
【更改加密算法: authconfig --passalgo=sha256 --update】
group文件格式
??群组名称:就是群组名称
??群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
??GID:就是群组的 ID
??以当前组为附加组的用户列表(分隔符为逗号)
gshadow文件格式
??群组名称:就是群组名称
??群组密码:xxxxx
??组管理员列表:组管理员的列表,更改组密码和成员
??以当前组为附加组的用户列表:(分隔符为逗号)
用户和组管理命令
用户管理命令
useradd
useradd [options] LOGIN
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c "COMMENT":用户的注释信息
-d HOME_DIR: 以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
usermod
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被
覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,
同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
userdel
userdel [OPTION]... login
-r: 删除用户家目录
-f:强制删除用户
组帐号维护命令
groupadd
groupadd [OPTION]... group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
groupmod
组属性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
groupdel
?组删除:groupdel
groupdel GROUP