与用户账户和组账户相关的文件:
/etc/passwd
/etc/group
/etc/shadow
/etc/gshadow
/etc/default/useradd
/etc/login.defs
/etc/skel(directory)
/etc/passwd:用户名解析库
root:x:0:0:root:/root:/bin/bash
1 2 3 4 5 6 7
1字段:用户账户登陆名称
2字段:使用 X 表示密码占位符
3字段:用户账户的UID
4字段:用户账户的GID,即该用户账户的基本组的ID;
5字段:注释信息,如用户职位,用户完整名称等;
6字段:用户账户家目录的绝对路径;
7字段:用户账户的默认登陆shell
/etc/group:组账户解析库
root:x:0:
1 2 3 4
1字段:组账户名称
2字段:组账户密码占位符
3字段:组账户的GID
4字段:以该组为附加组的用户列表,多个用户名之间使用 , 分隔;
/etc/shadow:用户账户的解析
root:$6$6kkn6aL6.uXXGiV9$Z1rLH/FLESIInB.V1TfCn9V/AhDlQMQIwOKwpxdk4h101tB6SdUv6USEIccF2XNcR.kpUuQE6x4HbSed24bNP.::0:99999:7:::
1字段:用户账户登录名
2字段:加密算法+随机变量+密码加密结果
3字段:最后一次修改密码的时间,其表示法为从1970年1月1日到当前系统时间所经过的天数
4字段:用户密码的最短使用期限;可以理解为多长时间内不能更改密码,如果为0表示随时可更改密码;如果不为0则表示几天内不能更改密码;
5字段:用户密码的最长使用期限;可以理解为多长时间内无需改密码也可以正常登录;
6字段:用户的密码使用时间在达到最大使用期限前多少天,在用户登录到系统是发送警告消息;默认为7天;
7字段:用户密码过期后的宽限期;可以理解为在密码过期后多少天内登陆系统是仍然可以提示修改密码;
8字段:用户密码的绝对失效时间;其表示法为从1970年1月1日到指定日期时间的天数; usermod -e 可修改
9字段:保留,未被使用;
/etc/gshadow
root:::
1字段:组账户名称
2字段:组账户的加密保存密码
3字段:组管理员,现在废弃了;
4字段:以该组为附加组的用户账户列表;
gpasswd命令:设置组的密码及管理组成员;
gpasswd [选项] 组名
-a USERNAME :将-a选项指定的用户添加至指定组
-d USERNAME :将-d选项指定的用户从指定的组中移除
newgrp命令:用一个新的组重新登陆到系统,需要被指定的组有正确的密码设置;
newgrp [-] [组名]
/etc/default/useradd
作用:定义创建用户时的用户属性的默认值文件
GROUP=100 // 在创建用户时如果没有为用户指定基本组,系统会为用户指定一个与用户名相同的组作为其基本组;
HOME=/home // 在创建用户时,如果没有为用户指定家目录,则会在/home目录中创建一个于用户名相同的目录作为家目录
INACTIVE=-1 // 在创建用户时,设定用户密码过期之后的宽限期,默认为-1,意为关闭用户密码过期宽限功能,即宽限期为永远;
EXPIRE= // 在创建用户时,设定用户密码的绝对失效日期,默认没有启用;
SHELL=/bin/bash // 在创建用户时,设定用户的默认登陆shell,默认值为/bin/bash
SKEL=/etc/skel // 在创建用户时,为用户家目录提供的默认文件的模板
CREATE_MAIL_SPOOL=yes // 在创建用户时,是否直接为用户创建邮箱文件,默认为创建;
/etc/login.defs(definations)
作用:定义shadow_utils相关的属性,包括用户邮箱路径、密码的时间参数、UID和GID的范围,删除用户账户的命令、是否设置私有组(仅包含一个用户并作为该用户主要组)、权限位掩码、家目录创建开关、加密算法选择;
MATL_DIR /var/spool/mail
//指定创建用户时为用户指定邮箱文件的路径
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
//与密码的时间参数有关的设置
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
//指定默认的ID选择范围
CREATE_HOME yes
//是否在创建用户时为用户创建家目录的开关
UMASK 077
//指定用户家目录的默认权限的掩码
USERGROUPS_ENAB yes
//是否开启私有组开关
ENCRYPT_METHOD SHA512
//加密算法的选择
/etc/skel(directory)
作用:为新创建的用户的家目录提供默认的shell配置文件
文件系统的权限管理:
普通权限
特殊权限
文件的扩展属性
FACL(文件系统访问控制列表)
DAC:自主访问控制;
安全上下文:
任何在计算机中执行的任务都是由进程来实现的;
进程有必要访问和使用文件或某些数据资源;
进程和其要操作的文件之间的关系,就定义为安全上下文;
在DA模型中,定义安全上下文的方式很简单:
所有权:任何启动进程的用户就是该进程的所有者;进程的所有者可以变更;
任何创建文件的用户就是该文件的所有者;文件的所有者是可以变更的;
使用权:在文件上面定义的对于该文件的特定使用过滤规则;
三个权限:所有者权限,所属组权限,其他人权限。
安全上下文的匹配规则:
当某个进程试图操作某个文件时,DAC将作如下规则匹配:
1.判断进程的所有者和文件的所有者是否为同一用户,如果是则直接应用文件的所有者权限;
2.如果不是则进一步判断进程的所有者是否为文件的所属组的成员,如果是则直接应用文件的所属组权限;
3.如果不是,直接用其他人权限;
文件权限的构成:
使用权:MODE,permission
三个基本权限:
r:readable,可读
w:writable,可写
x:executable,可执行
目录文件:
r:可以使用ls命令获取其中所包含的所有文件的文件名列表;
w:可以在此目录中进行文件名修改(创建、删除、修改);即可以创建、删除、修改文件名;
x:可以使用ls -l命令查看文件的各个文件的属性信息,在路径中引用该目录;
非目录文件
r:可以利用cat之类的命令获取文件中存放的数据信息;
w:可以修改(添加、修改、删除、覆盖)文件中所存放的数据信息
x:可以将文件发起为进程
获取使用权和所有权的相关信息:
ls -l +路径
rwxr-xr-x:三个权限位(属主/所有者、属组/所属组、其他用户)
属主权限:rwx,此权限位标识为user,简写为u;
属组权限:r-x,此权限位标识为group,简写为g;
其他用户权限:r-x ,标识为other,简写为o;
(短横线 - 代表不具备该权限) 所有的权限位可以统一用all,简写为a;
rwx组合称为 “权限标识三元组” :
数字权限标识:二进制数字标识,在对应的权限位上有权限为1,无权限为0;
--- 000 0
--x 001 1
-w- 010 2
... ...
rwx 111 7
使用符号标识权限和数字标识权限的区别:
1.使用符号标识法可以只标识某一个特定的权限位,也可以同时标识所有的权限位; 例:u=rw;ug=rwx;
2.使用数字标识法只能同时标识所有权限位;例:744;934;8意味着008;
修改文件的使用权:
chmod - change mode 命令
改变文件的访问权限
格式:
chmod [OPTION]... --reference=RFILE FILE... 根据R文件权限更改文件权限
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
MODE:符号权限标识法:
u,g,o,a:表示权限位;
+,-,=:表示授权方式
+:表示在指定的权限位上增加指定权限,如果新增的权限是已经存在的权限则结果相比较授权之前无变化;
-:表示在指定的权限位上撤销指定权限,如果被撤销的权限在原权限位并不存在则结果相比之前无不变化;
=:表示在指定的权限为上精确授权,此种授权方式不考虑该权限位原有的权限设定;
r,w,x:表示具体权限
注意:chmod + 或 - r 或 x FILE:在所有的权限位上增加或撤销读或执行权限
chomd + 或 - w FILE :仅在所有者权限位上增加或撤销写权限
注意:对于文件来说,执行权限是非常重要的安全上下文标识;因此默认情况下,所有的非目录文件都不应该有执行权限;因为一旦非目录文件具有了执行权限,则意味着该文件可以被执行,发起为进程,则可以按需要使用系统资源;
OCTAL-MODE: 八进制数字权限标识法
例:~]# chmod 765 r.txt
--reference=/etc/shadow root.txt
将shadow权限赋予root
常用选项:
-R:递归的设置目标文件或目录的权限
修改文件的所有权:
chown
chown - change file owner and group//修改文件的所有者和组别
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
例:chown user1 test:仅更改test所属主
chown user1: test更改test所属主,所属组更改为user所属主要组
chown :user1 test仅更改test所属组为user1
chown user1:root test更改test所属主为 user1,所属组为 root
注意:在使用chown命令时,可以使用“ . ”代替“ :” 。
常用选项:
-R:递归地修改目录及其下面内容的所有权
注意:对于文件来说,普通用户可以修改所有者为自己的文件的使用权,但无法修改文件的所有权;修改文件所有权的操作只有ROOT可以完成;
chgrp(不常用)
chgrp - 改变文件的组所有权
格式:chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:chown和chgrp命令所指定的用户和组,既可以是用户名和组名,也可以是UID和GID;
mkdir : -m MODE :在创建目录是为其指定权限
install:复制文件并设置属性
格式:
install [OPTION]... [-T] SOURCE DEST:单源复制,为复制后的文件增加执行权限;
install [OPTION]... SOURCE... DIRECTORY:多源复制,为复制后的文件增加执行权限;
install [OPTION]... -d DIRECTORY...:创建目录
常用选项:
-g, --group=GROUP
set group ownership, instead of process’ current group//设定目标文件的所属组为指定组,而不是进程所有者的主要组;
-m, --mode=MODE
set permission mode (as in chmod), instead of rwxr-xr-x//设定目标文件的权限,而不是755;
-o, --owner=OWNER
set ownership (super-user only)//设定目标文件的所有者,仅root可用;
注意:install命令,不能复制目录,即不能以目录为源文件,如果其源文件是一个目录,则install命令会进入这个目录依次复制所有非目录文件到目标位置;
特殊权限:
SUID:SUID仅设置在可执行的文件上,默认情况下当用户执行此类可执行文件时,被发起的进程的所有者不是进程发起者,而是可执行文件的所有者;换句话说,进程以文件所有者的身份运行;
SUID权限所显示的位置:文件的属主的权限位中的执行权限位上,如果属主本来就具有执行权限,则显示为“s”,如果属主本来没有执行权限则显示为“S”。
管理SUID权限:
1.符号标识法:chmod u+s FILE
2.数字标识法:chomd 4755 FILE
SGID:SGID可以设置在可执行文件或目录的属组权限位的执行权限上;
如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录中创建的新文件和目录的所属组均为其父目录的所属组,而并非进程发起者的主要组;
SGID权限显示位置:文件的属组权限位上的执行权限;如果属组本来就有执行权限则显示为s,否则显示为S。
管理SGID权限:
1.符号标识法:chmod g+s DIR(目录)
2.数字标识法:chmod 2770 DIR(目录)
STICKY:STICKY仅设置在目录的其他用户权限位的执行权限上;
如果在某个目录上的权限设置为多个用户都拥有写权限,那就意味着凡是拥有写权限的用户都能直接管理该目录中的所有文件名,包括改名文件及删除文件名等操作;因此需要在这样的目录上设置STICKY特殊权限;如果此类目录设置了STICKY,则所有用户即便拥有写权限也仅能删除或改名所有者为自身的文件;
STICKY权限的显示位置:在目录的其他用户的权限位的执行权限上,如果该权限位本来有执行权限,则显示为t,否则显示T。
管理STICKY权限:
1.符号标识法: chmod o+t DIR
2.数字标识法: chmod 1770 DIR
权限遮罩码
作用:在创建目录或文件时,被创建出来的目录或文件的默认权限上删除遮罩码上所对应的权限;
注意:在创建目录或文件时,默认不设置特殊权限;
对于目录:默认的权限为 0777去掉umask
对于非目录文件:默认的权限为 0666去掉umask
umask [OCTAL-MODE]
默认设置遮罩码的文件: /etc/bashrc
规则:如果用户的UID大于199并且用户的用户名和主要组的组名相同,则遮罩码为002,否则遮罩码为022;
文件的扩展属性:
lsattr命令
lsattr - 显示文件在Linux第二扩展文件系统上的特有属性
lsattr [ -RVadv ] [ files... ]
chattr
修改文件在Linux第二扩展文件系统(E2fs)上的特有属性
chattr [ -RVf ] [ -v version ] [ mode ] files..
mode可以是:+-=[aAcCdDeEtTu]
+:增加
-:删除
=:明确给定
a:在向文件写数据时只能以附加的方式进行写操作;文件的内容不能被更改和删除;一般会为日志文件设置此属性;
A:atime,文件的访问时间戳控制属性;对于并发访问量较大或并发访问频率较高的文件应该设置此属性以降低IO成本;
c:设置是否自动压缩之后在存储
C:是否开启“写实复制”功能
d:使用dump备份文件系统时,跳过属性设置为d的文件
D:设置文件在文件系统中的异步写操作;
i:设置文件不能被删除、改名及设定链接关系
s:设置文件的保密性删除
u:于s属性相反,如果此类文件被删除,则在存储器中会继续保存其内容
:
:
FACL:
Filessystem Access Control List,文件系统访问控制列表
想要应用此功能必须要让文件系统能够支持;
FACL为文件系统的额外赋权机制;
在原有的u,g,o权限位之外,让普通用户能够控制权限赋予另外的某个指定用户或组的一种机制
这种机制在Centos或RHEL7之后发行的版本中才逐渐成熟
与FACL相关的命令:
setfacl命令
setfacl - set file access control lists
格式:setfacl [-bkndRLPvh] [{-m|-x} acl_spec] file ...
setfacl --restore=file(还原默认值)
常用选项:
-m acl_spec:为指定文件设置acl_spec
-x acl_spec:将acl_spec从指定文件上移除
acl_spec:acl_specification,acl规格,访问控制列表
u:USERNAME:MODE
g:GROUPNAME:MODE
MODE一般是使用符号权限标识法的权限:
示例:
为文件赋予指定用户的额外访问权限:
[[email protected] ~]$ setfacl -m u:link:rwx /tmp/temp/
撤销指定文件的额外访问权限:
[[email protected] ~]$ setfacl -x u:link /tmp/temp/
注意:如果设置了FACL之后,再修改目标文件的使用权限,那么FACL中设置的权限条目可能受到影响而导致授权失败;因此,为了保证没有此项干扰,应该先调整目标文件或目录权限,在设置FACL;
getfacl命令
getfacl - get file access control lists
格式:getfacl [-aceEsRLPtpndvh] file ...