和用户与组有关的文件

  1. /etc/passwd:用户名解析库

    我们通过tail查看其中一行内容例如:

    ~]#tail -1 /etc/passwd

xiaoming:x:8089:8089:"wang xiaoming":/home/xiaoming:/bin/bash

  1    2 3   4     5            6       7

可以看出passwd中存放的是和用户信息有关的信息,一共七段,每段之间由":"隔开

1:用户账户登录名称;

2:使用"x"表示密码占位符;(以前用来存放密码,后来为了安全存放到其他文件中,用x进行密码占位)

3:用户账户的UID;

4:用户账户的GID,即该用户账户的基本组的ID;

5:注释信息,如用户职位、用户完整名称等;

6:用户账户的家目录的绝对路径;

7:用户账户的默认登录shell;

2./etc/group 组名解析库

通过tail查看其内容

tangbohu:x:5010:

qiuxiang:x:5011:xiaoqiang,wangcai,tangbohu

xiaoming:x:8089:

  1    2  3  4


  1:组账户名称;

  2:组账户密码占位符;

  3:组账户的GID;

  4:以该组为附加组的用户列表,多个用户名之间使用","分隔;

3./etc/shadow用户名认证库

用来存放密码及密码的多种规则

~]#head -1 /etc/shadow

root:$6$1bJAWLkjSA8dkPR5$q5CjatV0j62iTzbfyHZUD0dmRTKa54Yb.E1GVz1uOk5mKjR/KaRV963jkGQ0T1MS.wxj7LLu3VpSSDW4bX8wd0::0:99999:7:::


1:用户账户登录名;

2:密码的加密算法+salt+密码的加密结果;(三种信息用$分隔开)

3:最后一次修改密码的时间;其表示法为从1970年1月1日到当前系统时间所表示的日期的天数;

4:用户密码的最短使用期限;可以理解为多长时间内不能更改密码,0表示随时可以更改密码;

5:用户密码的最长使用期限;可以理解为多长时间内无需更改密码,也可以正常登录;

6:用户密码的使用时间达到最长使用期限之前多少天开始,在用户登录到系统时发送警告消息;

7:用户密码过期之后的宽限期;可以理解为在密码过期之后的多少天内,登录系统时仍然可以提示修改密码;

8:用户密码的绝对失效时间;其表示法为从1970年1月1日到指定日期时间的天数;

9:保留,未被使用;

4./etc/gshadow组名认证库

root:::user1,myuser

 1 23 4

1.组账户名称;

2.组账户的加密密码;

3.组管理员,现在废弃了;

4.以该组为附加组的用户账户列表;


5./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

//在创建用户时,是否直接为用户创建邮箱文件;默认创建;


6./etc/login.defs  (Definations)

作用:定义shadow_utils相关的属性,包括用户邮箱路径、密码的时间参数、UID和GID的范围,删除用户账户的命令、是否设置私有组(仅包含一个用户并作为该用户主要组)、权限位掩码、家目录创建开关、密码的加密算法;


MAIL_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选择范围;


USERDEL_CMD    /usr/sbin/userdel_local

//指定删除用户时使用的命令;


CREATE_HOME     yes

//是否在创建用户时为用户创建家目录的开关;


UMASK           077

//指定用户家目录的默认权限的掩码;


USERGROUPS_ENAB yes

//是否开启私有组开关;(使用userdel删除用户时,如果用户的基本组中没有其他用户,则默认删除该组)


ENCRYPT_METHOD SHA512

//使用何种算法加密密码;

7./etc/skel

作用:为新创建的用户的家目录提供默认的[shell配置]文件;

[root@localhost ~]# ls -a /etc/skel
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
我们新建一个用户,查看其家目录
[root@localhost ~]# useradd user7
[root@localhost ~]# ls -a /home/user7
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

--------------------------------------------------------------------------------------

文件系统的权限管理:

普通权限

特殊权限

文件的扩展属性

FACL(文件系统访问控制列表)

    AC:自主访问控制;


安全上下文:进程和其要操作的文件之间的关系,就定义为安全上下文;

在DAC模型中,定义安全上下文的方式很简单:

所有权:任何启动进程的用户就是该进程的所有者;进程的所有者可以变更;任何创建文件的用户就是该文件的所有者;文件的所有者可以变更;

    使用权:在文件上面定义的不同用户对该文件的特定使用权限;

   三个权限:所有者权限,所属组权限,其他人权限;


可以使用 ls -l[d] /PATH/TO/SOMEFILE查看文件的所有权使用权信息

[root@localhost ~]# ll -d /etc

drwxr-xr-x. 138 root root 8192 11月 11 19:29 /etc

d|1||2||3|     4   5

  1. 属主权限:rwx,此权限位标识为user,简写为u;

  2. 属组权限:r-x,此权限位标识为group,简写为g;

  3. 其他用户权限:r-x,此权限位标识为other,简写为o;

4.表示所有者

5.表示所属组

注意:root用户和文件的所有者可以修改该文件的使用权,但是文件的所有权只有root才能修改


安全上下文的匹配规则:

当某个进程试图操作某个文件时,DAC将做如下规则匹配:

1.判断进程的所有者和文件的所有者是否为同一用户,如果是,则直接应用文件的所有者权限;

2.如果不是,进一步判断进程的所有者是否为文件的所属组的成员,如果是,则直接应用文件的所属组权限;

3.如果不是,直接应用其他人权限;



8.文件权限的构成:

使用权:MODE,Permission

三个基本权限:

r:Readable,可读;

w:Writable,可写;

x:eXecutable,可执行;


目录文件:

r:可以使用ls命令获取其中所包含的所有文件的文件名列表;

w:可以在此目录中进行文件名修改(创建,删除,修改);即:可以创建文件名,删除文件名及修改文件名;

x:可以使用ls -l命令来查看各个文件的属性信息;在路径中引用该目录;


非目录文件:

r:可以利用cat类的命令获取文件中存放的数据信息;

w:可以修改(添加,修改,删除、覆盖)文件中存放的数据信息;

x:可以将文件发起为进程;

9.权限标识

符号权限标识:

    注意:"-"表示在该权限位上不具备指定权限;

    rwx组合称为"权限标识三元组"

   

数字权限标识:二进制数字标识,在对应的权限位上有权限则为1,无权限则为0;


--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx   111 7


使用符号标识权限和数字表示权限的区别:

1.使用符号标识法可以只标识某个特定的权限位,也可以同时标识所有的权限位;

示例:

u=rx; ug=rwx; u=rwx,g=rx,o=r; a=rwx

2.使用数字标识法只能同时标识所有权限位;

示例:

755; 644; 7 == 007 ; 75 == 075



修改文件的使用权:

chmod  -  change file mode bits

格式:

chmod [OPTION]... MODE[,MODE]... FILE...

chmod [OPTION]... OCTAL-MODE FILE...

chmod [OPTION]... --reference=RFILE FILE...


MODE:符号权限标识法:

u, g, o, a:表示权限位;

+, -, =:表示授权方式;

+:表示在指定的权限位上增加指定权限;若权限已存在则权限无变化

-:表示在指定的权限位上撤销指定权限;若权限已不存在则权限无变化

=:表示在指定的权限位上精确授权;此种授权方式不考虑该权限位原有的权限设定的;(类似覆盖)

r, w, x:表示具体的权限;

[root@localhost ~]# ll -d touch2
drwxr-xr-x. 2 root root 6 11月  9 19:34 touch2

[root@localhost ~]# chmod u-r,g+w,o=r-- touch2
[root@localhost ~]# ll -d touch2
d-wxrwxr--. 2 root root 6 11月  9 19:34 touch2
[root@localhost ~]# 
或使用数字标识符修改
[root@localhost ~]# chmod 700 touch2
[root@localhost ~]# ll -d touch2
drwx------. 2 root root 6 11月  9 19:34 touch2

注意:

chmod +|- r|x FILE:在所有的权限位上增加或撤销读或执行权限;

chmod +|- w FILE:仅在所有者权限位上增加或撤销写权限;


注意:对于文件来说,执行权限是非常重要的安全上下文标识;因此默认情况下,所有的非目录文件都不应该有执行权限;因为一旦非目录具有了执行权限,则意味着该文件可以被执行,发起为进程,则可以按需使用系统资源;

  选项

     --reference=RFILE: 参照赋权

drwx------. 2 root root 6 11月  9 19:34 touch2
[root@localhost ~]# ll -d touch
drwxr-xr-x. 2 root root 6 11月  9 19:34 touch
[root@localhost ~]# chmod --reference touch touch2  //参照touch文件的权限给touch2赋权
[root@localhost ~]# ll -d touch2
drwxr-xr-x. 2 root root 6 11月  9 19:34 touch2

常用选项:

-R, --recursive:递归地设置目标文件或目录的权限;

[root@localhost ~]# ll -d touch2
drwx------. 2 root root 6 11月  9 19:34 touch2
[root@localhost ~]# ll -d /mnt
drw-r-xr-x. 2 root root 67 11月 10 13:34 /mnt
[root@localhost ~]# mkdir /mnt/wwww
[root@localhost ~]# ll -d /mnt/wwww
drwxr-xr-x. 2 root root 6 11月 11 20:17 /mnt/wwww
[root@localhost ~]# chmod -R /mnt --reference touch2  //参照touch2的权限,给 /mnt目录递归
赋权
[root@localhost ~]# ll -d /mnt
drwx------. 4 root root 90 11月 11 20:19 /mnt
[root@localhost ~]# ll /mnt
总用量 16
-rwx------. 1 wcca wc2  15 11月  9 20:04 a.sh
-rwx------. 1 root root  0 11月 10 13:34 a.txt
-rwx------. 1 wcca wc2  15 11月  9 20:04 b.sh
drwx------. 2 root root  6 11月 11 20:19 ccc
-rwx------. 1 wcca wc2  15 11月  9 20:04 c.sh
drwx------. 2 root root  6 11月 11 20:17 wwww
-rwx------. 1 wcca wc2  15 11月  9 20:04 x.sh

修改文件的所有权:

chown - change file owner and group //修改文件的属主和属组

  格式:

chown [OPTION]... [OWNER][:[GROUP]] FILE...

chown [OPTION]... --reference=RFILE FILE...

只能使用root用户修改:

格式:~]#chown user file   //把文件的文件所有者改为user

    ~]#chown user: file   //把文件的文件所有者改为user,所属组改为user的基本组

    ~]#chown :user file   //把文件的文件所属组改为user

    ~]#chown user:user1 file   //把文件的文件所有者改为user,所属组改为usre1

示例:

 ~]# ll -a ~user7/aa.txt
    -rw-rw-r--. 1 user7 user7 0 11月 11 20:25 /home/user7/aa.txt
 ~]# chown xiaoming:xiaoqiang ~user7/aa.txt  修改
 ~]# ll -a ~user7/aa.txt
      1 xiaoming xiaoqiang 0 11月 11 20:25 /home/user7/aa.txt
 ~]# chown xiaoming: ~user7/aa.txt
 ~]# ll -a ~user7/aa.txt
     -rw-rw-r--. 1 xiaoming xiaoming 0 11月 11 20:25 /home/user7/aa.txt
 ~]# chown :xiaoqiang ~user7/aa.txt
 ~]# ll -a ~user7/aa.txt
     -rw-rw-r--. 1 xiaoming xiaoqiang 0 11月 11 20:25 /home/user7/aa.txt
 ~]# chown xiaoqiang ~user7/aa.txt
 ~]# ll -a ~user7/aa.txt
    -rw-rw-r--. 1 xiaoqiang xiaoqiang 0 11月 11 20:25 /home/user7/aa.txt
 ~]# chown xiaoming ~user7/aa.txt
 ~]# ll -a ~user7/aa.txt
    -rw-rw-r--. 1 xiaoming xiaoqiang 0 11月 11 20:25 /home/user7/aa.txt
    
    [root@localhost ~]# su - user7
    [user7@localhost ~]$ chown xiaoqiang ~/aa.txt
    chown: 正在更改"/home/user7/aa.txt" 的所有者: 不允许的操作




10.install命令:install - copy files and set attributes(复制文件且为文件赋予执行权限)

格式:

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

            //设定目标文件的权限,而不是rwxr-xr-x;


    -o, --owner=OWNER

              set ownership (super-user only)

            //设定目标文件的所有者,仅root可用;


注意:install命令,不能复制目录,即不能以目录为源文件;如果其源文件是一个目录,则install命令会进入该目录,依次复制其中的所有非目录文件到目标位置;

[root@localhost ~]# ll a.txt
-r--rw-rw-. 1 wcca wc1 92 11月 10 17:09 a.txt

[root@localhost ~]# install a.txt /mnt -o xiaoming -g xiaoqiang -m 555
-r-xr-xr-x. 1 xiaoming xiaoqiang 92 11月 11 20:43 a.txt
如果复制一个目录
[root@localhost ~]# install touch2 /mnt -o xiaoming -g xiaoqiang -m 555
install: 略过目录"touch2"

特殊权限:

SUID,SGID,STICKY


1.SUID:SUID仅设置在可执行的文件上。

默认情况下,当用户执行此类可执行文件时,被发起的进程的所有者不是进程发起者,而是可执行文件的所有者;换句话说,进程以文件所有者的身份运行;


SUID权限所显示的位置:文件的属主的权限位中的执行权限位上;如果属主本来就具有执行权限,则显示为"s";如果属主本来没有执行权限,则显示为"S";


管理SUID权限:

1.符号标识法:chmod u+s FILE

2.数字标识法:chmod 4755 FILE


2.SGID:SGID可以设置在可执行文件或目录的属组权限位的执行权限上。

如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录中创建的新文件和目录的所属组均为其父目录的所属组,而并非进程发起者的主要组;


SGID权限的显示位置:文件的属组权限位上的执行权限上;如果属组本来就有执行权限,则显示为"s",否则,就显示为"S";


管理SGID权限:

1.符号标识法:chmod g+s DIR

2.数字标识法:chmod 2770 DIR


3.STICKY:STICKY仅设置在目录的其他用户权限位的执行权限上。

如果在某个目录上的权限设置为多个用户都拥有写权限,那就意味着凡是拥有写权限的用户都能直接管理该目录中的所有文件名,包括改名文件及删除文件名等操作;因此需要在这样的目录上设置STICKY特殊权限;如果此类目录设置了STICKY,则所有用户即便拥有写权限,也仅能删除或改名所有者为其自身的文件;


STICKY权限的显示位置:在目录的其他用户的权限位的执行权限上;如果该权限位本来有执行权限,则显示为"t",否则,显示为"T";


管理STICKY权限:

1.符号标识法:chmod o+t DIR

2.数字标识法:chmod 1777 DIR


权限遮罩码:umask

作用:在创建目录或文件时,被创建出来的目录或文件的默认权限上删除遮罩码上所对应的权限;


注意:在创建目录或文件时,默认不设置特殊权限;


对于目录文件:默认的权限为:0777-umask   0777-0033 = 0744

对于非目录文件:默认的权限为:0666-umask 0666-0033 = 0644


umask [OCTAL-MODE]

直接输入umask命令会显示当前的遮罩码
[root@localhost ~]# umask
0022
我们创建一个目录
[root@localhost ~]# ll -d /mmt
drwxr-xr-x. 2 root root 6 11月 11 20:47 /mmt   //目录的默认权限为755
我们创建一个文件
[root@localhost ~]# ll -d mmt
-rw-r--r--. 1 root root 0 11月 11 20:48 mmt    //文件的默认权限为655
我们修改umask
[root@localhost ~]# umask
0644
再创建目录和文件
[root@localhost ~]# mkdir /ppt
[root@localhost ~]# ll -d /ppt
d--x-wx-wx. 2 root root 6 11月 11 20:49 /ppt   //目录的默认权限为133
[root@localhost ~]# ll -d ppt
-----w--w-. 1 root root 0 11月 11 20:51 ppt    //文件的默认权限为022

默认设置遮罩码的文件:/etc/bashrc

规则:如果用户的UID大于199并且用户的用户名和主要组的组名相同,则遮罩码为002;否则遮罩码为022;

当我们退出再登录时,遮罩码会恢复默认值

文件的扩展属性:

lsattr:

lsattr - list file attributes on a Linux second extended file system

在Linux第二扩展文件系统中列出文件属性

格式:

lsattr [ -RVadv ] [ files...  ]

[root@localhost ~]# lsattr a.txt
---------------- a.txt
不能展示目录扩展属性

chattr:

chattr - change file attributes on a Linux file system

            修改扩展属性

格式:

chattr [ -RVf ] [ -v version ] [ mode ] files...


mode可以是:+-=[aAcCdDeijsStTu]

+

-

=


a:在向文件写数据时,只能以附加的方式进行写操作;文件的内容不能被更改和删除;一般会为日志文件设置此属性;

A:atime,文件的访问时间戳控制属性;对于并发访问量较大或者并发访问频率较高的文件,应该设置此属性以降低IO成本;防止IO瓶颈;

c:设置是否自动压缩之后再存储;

C:是否开启"写时复制";

d:使用dump备份文件系统是,跳过属性设置为d的文件;

D:设置文件在文件系统中的异步写操作;

i:设置文件不能被删除,改名及设定链接关系;

s:设置文件的保密性删除;

u:与s属性相反,如果此类文件被删除,则在存储器中会继续保存其内容;


FACL:

Filesystem Access Control List,文件系统访问控制列表;

想要应用此功能,必须让文件系统能够支持;


FACL为文件系统的额外赋权机制;


在原有的u,g,o权限位之外,让普通用户能够控制权限赋予另外的某个指定的用户或组的一种赋权机制;


这种机制在CentOS或者RHEL7之后的发行版本中,才逐渐成熟;


与FACL相关的命令:

getfacl:

getfacl - get file access control lists

格式:

getfacl [-aceEsRLPtpndvh] file ...


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一般是使用符号权限标识法标识的权限;


示例:

为文件赋予指定用户的额外访问权限:

[user3@lab1 ~]$ setfacl -m u:link:rwx /tmp/temp/


撤销指定文件的额外访问权限:

[user3@lab1 ~]$ setfacl -x u:link /tmp/temp/

[root@localhost ~]# getfacl a.txt
# file: a.txt
# owner: wcca
# group: wc1
user::r--
group::rw-
other::rw-

[root@localhost ~]# setfacl -m u:wc:rw a.txt
[root@localhost ~]# getfacl a.txt
# file: a.txt
# owner: wcca
# group: wc1
user::r--
user:wc:rw-
group::rw-
mask::rw-
other::rw-

注意:如果设置了FACL之后,再修改目标文件的使用权限,那么FACL中设置的权限条目可能受到影响而导致授权失败;因此,为了保证没有此项干扰,应该先调整目标文件或目录的权限,再设置FACL;