慢慢来,是种诚意,加载中 . . .

linux学习宝典一


linxu宝典学习一

linux用户管理

一、用户和组的相关概念

账号的概念和分类

  • 账号:是一种用来记录单个用户或是多个用户的数据。Linux中每一个合法的用户都必须要拥有账号,才能使用 。它不仅可以用来验证用户身份,还决定了一个用户在系统中可以从事什么工作

在Linux 上的账号可以分成两类:

  • 用户账号 用来储存单一用户的数据,你可以使用一个用户账号,来储存某一个用户的数据。
  • 群组账号 用来储存多个用户的信息,每一个群组账号可以用来记录一组用户的数据。

我们可以把 Linux 的所有账号依照下面两种方法进行分类:

  • 依照账号的位置。
  • 依照账号的功能。

依照账号存储的位置

账号数据存放在不同的地方,其可使用的范围就会不太一样,账号的使用范围我们称为视野。依照账号储存的位置与视野不同,我们可以区分本机账号与网域账号两种:

本机账号: 账号密码储存于本机硬盘中,我们称为本机账号。
本机账号使用范围只能在账号建立的 Linux 系统上,如果超出范围时,本机账号将无法使用。比如:你在自己电脑上登录用的账号和密码,正常是无法在其它的电脑上使用的。

  • 本机账号的优点:是简单易用,你无须作额外的设置,就可以直接建立本机账号;
  • 本机账号的缺点:则是无法具备延展性(Scalability)。比如:你在一个拥有很多主机的环境中,想拥有一个在每台主机都可以登录的账号时,你就需要在所有的主机上都建立相关的用户

网域账号: 你也可以把大量的计算机组织成为一个网域,然后在网域中的某一台 Linux 上建立账号数据,并且通过某些通信协议,将账号数据分享出来。当其他计算机需要取得账号数据时,再通过网络调用这些分享的账号即可。这种账号我们称为网域账号 (Domain Account)。

  • 网域账号的优点:在于具备延展性。在大规模的环境中,使用网域账号往往能节省管理账号的时间;
  • 但网域账号也有缺点,其最大的缺点就是要配置网域账号前,你必须先建立“域”的环境才行。

依照账号的功能

不管是本机账号或是网域账号,我们还可以把所有账号依照功能分成下面几类

1571285802298.png

用户账号部分: 包含了超级用户、普通用户;而普通用户中还可细分为系统用户、真实用户两种。

  • 超级用户:在Linux 系统上拥有完整的控制能力,常被称为系统管理员,在 系统上拥有完整的控制能力,你可以利用超级用户读取或写入 上任何文件、安装或删除软硬件、启动或停止服务,甚至关机与停止系统的执行。 通常只有在管理系统时才会使用超级用户账号登录,所以超级用户常被称为系统管理员 (System Administrator)。由于超级用户的权限不受任何限制,你可以使用该账号来管理 系统;但是,也可能因为操作错误,或者打错命令而造成无法挽救的伤害。
    在此,强烈建议你“除非有必要,否则请不要轻易以超级用户身份使用 Linux”!

    在 Linux 系统中,默认超级用户的用户为 root,其 UID(用户ID号)一定为 0。

  • 普通用户账号:行为能力会受到限制,只能调用具备权限的文件,如果没有足够的权限,普通用户是完全无法调用的;所以,普通用户账号不太容易危害 Linux 系统。普通用户账号中,我们又可分为两大类:

  • 系统账号
    这种类型的账号仅提供给Linux 系统本身使用。在某些软件执行的时候,需要你提供一个普通用户类型的账号。为了满足这些软件而建立的账号,我们称为系统账号 (System Account)。

  • 真实用户
    系统用户账号是给软件或程序使用的,那么,什么账号是让我们登录Linux 时使用的呢?答案就是真实用户(Real User)。真实用户账号是为了让其他人登录系统使用的

群组账号部分: 包含了超级用户群组、系统群组以及用户自定义组三大类。

  • 超级用户群组:Linux 有一个叫做 root 的群组,因为这个群组的名称与 root 这个超级用户的名称相同,所以,我们习惯把 root 群组叫做超级用户群组。超级用户群组的 GID 为 0。
  • 系统群组: 与系统账号一样,系统群组是给 Linux 系统本身,或是某个软件所使用
  • 用户自定义组:除了上述的群组外其余的所有群组,皆是由管理者自行定义,因此我们把这些群组称之为用户自定义组

另外,Linux 系统的“用户自定义组“类型中,还有一种名为用户私有群组UPG, User Private Group)的群组。什么是 用户私有群组呢?用户私有群组(UPG, User Private Group)是指 “与用户账号名称相同,且为用户的主要群组”的群组。当你建立新的用户账号时,Linux 会自动建立该用户的私有群组。如,当你建立 test 这个用户账号时,Linux 会自动建立了一个名为 test 的群组,并且让 test群组成为 test 用户账号的主要群组,test 群组即是 test 的私有群组。

了解完账号的基本概念后,我们一起来看下账号到底记录了哪些信息

二、用户账号管理

  • useradd命令
    用户创建命令,创建一个linux用户。
命令介绍
       useradd - 创建一个新用户或更新默认新用户信息

命令语法
       useradd [选项] 登录

       useradd -D

       useradd -D [选项]

命令选项
  -D        默认
  ­
  -u UID    用来指定账号的 UID,如果省略这个参数,useradd会自动以最后一个可用的 UID 作为新账号的 UID。

  -o        告诉 useradd 允许重复的 UID。  

  -g gid    定义用户的主要群组。使用 -g 参数前,GROUP 必须已经存在。 
     
  -d HOME   指定用户的主目录。默认的主目录是建立在  /home/ 目录下,而且目录名称与用户名称相同。
  
  -s SHELL  指定用户登录执行的程序。
                                      
  -c COMMENT   指定用户的批注说明。如果批注文字包含空白,请记得使用双引号 (") 包起来。 
 
  -r           这个参数用来指出建立一个系统用户的账号。    
  
  -M           不创建家目录

  -N           不创建同名组                   



#相关文件
	/etc/passwd
           用户账户信息。

       /etc/shadow
           安全用户账户信息。

       /etc/group
           组账户信息。

       /etc/gshadow
           安全组账户信息。

       /etc/default/useradd
           账户创建的默认值。

       /etc/skel/
           包含默认文件的目录。

       /etc/subgid
           Per user subordinate group IDs.

       /etc/subuid
           Per user subordinate user IDs.

       /etc/login.defs
           Shadow 密码套件配置。

这些参数大多数可以同时使用,可以根据自己的需求指定,例如
创建一个linux用户hello
– uid为 1500
– 附加组为 hello
– 家目录为 /home/hello
– 登陆shell为 /bin/bash
– 描述为 “this is a test user”

useradd -u 1500 -G hello -d /home/hello -s /bin/bash -c "this is a test user" hello

关于linux本机用户
本机的用户账号数据储存于/etc/passwd文件中。与其他的配置文件一样,passwd 也是一个文本文件,因此,你可以直接使用文字处理程序,例如 cat 或 less 浏览其中的内容。

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

/etc/passwd 权限必须是0644,每一行代表一个用户的账号数据,每一行又使用冒号(:)分隔为几个部分

USERNAME:PASSWORD:UID:GID:COMMENT:HOMEDIR:SHELL  

- USERNAME:用户识别名称,也是登录的名称
- PASSWORD:密码位,用于存储用户的密码,为了安全起见,密码放在另一个文件中,这里统一用x
- UID:用户识别号,0表示为管理员,非0为普通用户
- GID:组识别号,用来识别用户组的身份,同样0为管理员组,非0为系统群组或者自定义组
- COMMENT:描述信息
- HOMEDIR:家目录位置
- SHELL:shell类型
  • usermod命令
    是用来修改用户相关信息的,和useradd使用的参数很多是相同的,用法也是一样的,除此之外usermod命令还有一些额外的参数
命令介绍
       usermod - 修改一个用户账户

命令语法
       usermod [选项] 登录

命令选项
-l NEWNAME   修改账号的用户名称,NEWNAME 即是新的账号名称。

-L           锁定账号,一经锁定的账号将无法用来登录系统。

-U           解除锁定。
  • userdel命令
    删除linux用户
命令介绍
       userdel - 删除用户账户和相关文件

命令语法
       userdel [选项] 登录

命令选项
-r          用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。

-f          强制

删除tom用户以及其家目录文件

[root@zutuanxue ~]# userdel -r tom

三、用户查询命令

  • id命令:查询用户uid、gid信息
[root@zutuanxue ~]# id hello
uid=1500(hello) gid=1500(hello) 组=1500(hello)

[root@zutuanxue ~]# id -u hello
1500
  • whoami命令:查询当前登录用户
[root@zutuanxue ~]# whoami
root
  • w命令:查询linux系统中登陆的所有用户
[root@zutuanxue ~]# w
 18:21:43 up  2:01,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.1.17    16:16    3.00s  0.08s  0.00s w

linux 组管理

组账号管理

本机的群组账号数据被储存在 /etc/group 文件中,权限也必须为0644,与 /etc/passwd 一样,这也是一个文本文件。

root:x:0:
bin:x:1:
daemon:x:2:

这与/etc/passwd文件的格式类似

GROUPNAME:PASSWORD:GID:MEMBERS 

- GROUPNAME:组名

- PASSWORD:组密码,这里也和passwd文件一样是个x

- GID:群组识别号

- MEMBERS:组成员

一起来看下组管理的相关命令

  • groupadd 建立组
命令介绍
       groupadd - 创建一个新组

命令语法
       groupadd [选项] group

命令选项
-g GID     指定群组账号的标识符 

-r         指定添加的群组成为系统群组

-f         强制执行。  在一般的情况下,groupadd 不允许建立一个与使用过的 GID 相同的群组账号,而使用这个参数时,groupadd 将会建立相同 GID 的 群组账号。

-o         此选项允许添加一个使用非唯一 GID 的组。



#组相关文件
       /etc/group
           组账户信息。

       /etc/gshadow
           安全组账户信息。

       /etc/login.defs
           Shadow 密码套件配置。
  • groupmod 修改群组信息
命令介绍
       groupmod - 修改组信息

命令语法
       groupmod [选项] GROUP

命令选项
-g GID       修改群组账号的标识符。GID 就是新的标识符。
-n NEWNAME   用来修改群组的名称。NEWNAME 就是新的组名。
  • groupdel 删除群组账号
命令介绍
	groupdel - 删除一个组

命令语法
	groupdel [选项] GROUP

命令选项
-f   强制

您不能移除现有用户的主组。在移除此组之前,必须先移除此用户。


linux 密码管理

账号犹如一张通行证,有了账号你才能顺利的使用Linux。不过 Linux 怎么确认使用某账号的人,是这个账号的真正拥有者呢?此时Linux 会根据用户的密码,来确认用户的身份。Linux 的用户账号与群组账号都可设置密码。用户账号的密码用来验证用户的身份;而群组账号的密码则是用来确认用户是否为该群组的成员,以及确认是否为该群组的管理者。

在 Linux 中,使用 useradd 新建一个用户账号时,useradd 会锁定用户的密码,如此一来,用户暂时不能使用 。你必须要修改其密码后,新建的用户才能用他的账号登录。要修改用户账号的密码需要使用passwd命令

  • passwd命令
命令介绍
	修改用户密码

命令语法
	passwd [选项] 用户

命令选项
-d     删除用户密码,亦即把文件中的密码字段清空。

-l     这个参数用来锁定账号,账号一经锁定,用户再怎样输入密码,都会被判断为错误。这个参数只能由 root 使用,普通用户无法用来锁定自己的账号。

-u     解锁用户

除了可以修改用户账号的密码外,你也可以为每一个群组设置一个密码,这个密码称为群组密码(Group Password)。Linux 的用户,可以通过 newgrp 暂时修改其主要群组的身份。执行 newgrp 时,会以指定的群组身份,开启一个登录 Shell,这样就可以获得暂时修改主要群组之功效。此时,如果该群组没有指定密码,那么 Linux 只允许群组的成员可以使用 newgrp修改主要群组的身份;如果群组设置了密码,群组成员仍可以不用密码就可切换主要群组身份,但非群组的成员,则必须要提供正确的密码才行。

  • gpasswd命令
命令介绍
	修改组密码,对群组管理

命令选项
-r     用来删除群组的密码。

-R     锁定 GROUP 的群组密码。

-A     设置组管理员

-a     添加组成员到组

-d     从组中 删除组成员


命令用法
指派群组管理员,如果有多个管理员用“,”分隔,如果想删除群组管理员,保持位置为空


组管理员用法案例
创建组admin

[root@zutuanxue ~]# groupadd admin

创建用户 ztxa ztxb ztxc

[root@zutuanxue ~]# useradd ztxa

[root@zutuanxue ~]# useradd ztxb

[root@zutuanxue ~]# useradd ztxc

设置ztxa为admin组的组管理员

[root@zutuanxue ~]# gpasswd -A ztxa admin


切换到ztxa   将ztxb ztxc加入 admin组

[root@zutuanxue ~]# su - ztxa -c "gpasswd -a ztxb admin"

正在将用户“ztxb”加入到“admin”组中

[root@zutuanxue ~]# su - ztxa -c "gpasswd -a ztxc admin"

正在将用户“ztxc”加入到“admin”组中


切换到ztxa  从admin组中删除ztxc

[root@zutuanxue ~]# su - ztxa -c "gpasswd -d ztxc admin"

正在将用户“ztxc”从“admin”组中删除

linux shadow文件

说到用户管理,就不得不提到shadow这个文件,shadow有三个功能:

  • 隐藏密码
  • 扩充密码的功能
  • 提供账号管理工具

隐藏密码: 因为/etc/passwd和/etc/group文件的权限必须是0644,这意味着所有的用户都能读取到内容,所以为了安全起见,我们通过shaodw把用户和组的密码分别隐藏在/etc/shadow,/etc/gshadow文件中,且这两个文件只有管理员,也就是root能调用

提供账号管理工具 :我们之前所介绍的用户和组管理的相关命令,都是shadow所提供的工具

扩充密码功能: 这个扩充密码功能就是除了密码之外的额外功能,如,密码的有效期限,设置群组管理员(组长)等,这些都是记录在/etc/shadow,/etc/gshadow文件中

/etc/shadow: 存储用户密码及密码额外功能的文件

文件内容:root:$6$T52Xvk7zu84.tDXp$nfXcm6LTfUx.ZviEo7Eq1bPjDO...::0:99999:7:::bin:*:18027:0:99999:7:::

/etc/shadow文件的格式与/etc/passwd类似,也是每一行代表一个账号的数据,使用:进行分隔.

内容详解

USERNAME:PASSWORD:LAST_CHANGED:MIN_DAYS:MAX_DAYS:WARNNING:EXPIRES:INVALID:RESERVED

1、USERNAME:用户账号名称。

2、PASSWORD:加密后的密码。

3、LAST_CHANGED:密码最后一次修改的日期。

4、MIN_DAYS:密码修改的最小间隔天数。

5、MAX_DAYS:密码修改的最大天数。

6、WARNNING:密码过期前警告的天数。

7、EXPIRES:密码过期的日期

8、INVALID:	账号失效日期

9、RESERVED:保留位,未定义功能

这里面我们所提到的日期都是从1970年1月1日起经过的天数,所以我们看到的不是日期的格式,而是一组数字,我们接下来看下另一个文件

/etc/gshadow: 存储组密码及密码额外功能的文件

文件内容:
root:::
bin:::
daemon:::

内容详解

GROUPNAME:PASSWORD:ADMINISTRATORS:MEMBERS   

GROUPNAME:	组名

PASSWORD:	组密码

ADMINISTRATORS: 组长

MEMBERS:	组成员

除此之外用户管理还有一个简单的方法,那就是以root用户身份登录图形界面

1571302990425.png

1571303014802.png

cockpit

# systemctl start cockpit
http://localhost:9090

image20200331143440902.png

image20200331143459395.png

管理密码的有效期限

Shadow除了会把密码数据隐藏到其他文件、提供许多账号管理工具外,还允许你为账号或密码设置有效期限,以提高Linux 的安全性。目前的 Shadow 可以设置下列两种期限:

密码过期

一旦超过密码过期日期,用户成功的登录Linux 时,会强迫用户设置一个新的密码。设置完毕后,才会开启用户的 Shell 程序。设置密码过期的目的,在于提高 Linux 的安全性。

账号过期

若超过账号过期日期,Linux 会禁止用户登录系统,即使输入正确的密码,也无法登录。当账号过期时,Linux 会提示用户联系管理员修改账号过期日期。

Your account has expired; please contact your system administrator 	

我们可以使用chage命令来查看或调整这些相关的期限

  • chage命令
[root@zutuanxue ~]# chage -l hello
最近一次密码修改时间					:从不
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

chage
  -m	设置密码修改的最小天数
  -M	设置密码修改的最大天数
  -d	设置密码最后修改日期
  -I	设置密码过期后,锁定账号的天数
  -E	设置账号过期日期,0=立即过期,-1=永不过期
  -W	设置密码过期前的警告天数
  -l	查看指定用户的相关信息
  -h	帮助

image20200331164400723.png


linux基本权限

Linux系统是一个典型的多用户操作系统,不同的用户处于不同的地位,为了保护系统的安全性,linux系统对于不同用户访问同一个文件或目录做了不同的访问控制。而这种控制就是通过权限实现的,本节课我们介绍linux权限的使用

一、基本权限的介绍

Linux中每个文件或目录都有3个基本权限位,控制三种访问级别用户的读、写、执行,所以linux的基本权限位一共有9个。基本权限位和另外3个可以影响可执行程序运行的3个特殊权限位一起构成了文件访问模式。三个属性规定了对应三种级别的用户能够如何使用这个文件,这三个基本权限位对于文件和目录的含义有所差别的,我们一起来看一下

字符 权限 对文件的含义 对目录的含义
r 意味着我们可以查看阅读 可以列出目录中的文件列表
w 意味着,对文件可以修改或删除 可以在该目录中创建、删除文件
x 执行 如果是文件就可以运行,比如二进制文件或脚本。 可以使用cd命令进入该目录

那三种访问级别都有哪些呢?每个文件都有三组不同的读、写和执行权限,分别适用于三种访问级别,其中每组中的三个栏位分别使用读取权限(r)、写入权限(w)、执行权限(x)或没有相应的权限(-)来表示,共9位来表示。

1571370358704.png

  • 第一组:适用于文件的属主,图中属主的权限是rwx。
  • 第二组:适用于文件的属组,图中属组的权限是r-x。
  • 第三组:使用于其它用户权限位,图中其它用户权限位是r-x。

当有人试图访问一个文件的时候,linux系统会按顺序执行如下步骤:

(1)使用者拥有这个文件吗?如果是,启用用户权限。

(2)用户是组所有者成员吗?如果是,启用组权限

(3)如果以上两个都不是,启用其它人权限

上面我们提到的是第一种表示方法,在linux中还有另外一种表示方法,八进制表示法,我们来看下字母和八进制表示方法的对应关系

字符表示法 八进制表示法 含义
r 4
w 2
x 1 执行

所以上面给出的权限rwxr-xr-x换成数字的表示方式就是755,那权限如何设置呢?

二、基本权限的设置和查看

通过前面的学习我们知道,用户分为所有者,所有者组,其他人这三类,而每一类有包含三种基本权限,他们的对应关系是

权限位 含义
属主权限位 用于限制文件或目录的创建者
属组权限位 用于限制文件或目录所属组的成员
其它用户的权限 用于限制既不是属主又不是所属组的能访问该文件或目录的其他人员

当我们使用命令来查看文件或目录时,会看如下内容

[root@zutuanxue ~]# ls -l
总用量 13804
drwxr-xr-x.  2 root root        6 10月 11 06:36 公共
drwxr-xr-x.  2 root root        6 10月 11 06:36 模板
drwxr-xr-x.  2 root root        6 10月 11 06:36 视频
drwxr-xr-x.  2 root root        6 10月 11 06:36 图片
drwxr-xr-x.  2 root root        6 10月 11 06:36 文档
drwxr-xr-x.  2 root root        6 10月 11 06:36 下载
drwxr-xr-x.  2 root root        6 10月 11 06:36 音乐
drwxr-xr-x.  2 root root        6 10月 11 06:36 桌面
-rw-------.  1 root root     1214 10月 11 06:12 anaconda-ks.cfg
-rw-r--r--.  1 root root     1369 10月 11 06:17 initial-setup-ks.cfg

每一行显示一个文件或目录的信息,这些信息包括文件的类型(1位)、文件的权限(9位)、文件的连接数、文件的属主(第3列)、文件的所属组(第4列),大小以及相关时间和文件名。其中Linux 文件的权限标志位九个,分为3 组,分别代表文件拥有者的权限,文件所属用户组的权限和其它用户的权限,现在我们知道文件有三种权限((r)读取、(w)写入和(x)执行)和三种访问级别((u)用户、(g)主要组和(o)其它人)决定文件可以被如何使用。那如何修改?

  • chmod命令:修改文件权限

1571375694210.png

缩写 含义
u User(用户)
g Group (组)
o Other(其它)
a All(所有)
+ Add(加)
- Remove(减去)
= Set (设置)
r Read (可读)
w Write (可写)
x Execute (执行)
命令 作用 结果权限
chmod o-r a.file 取消其他人的可读权限 rw-rw—
chmod g-w a.file 取消组的写入权限 rw-r–r–
chmod ug+w a.file 赋予用户和组写入权限 rwxrwxr–
chmod o+w a.file 赋予其他人写入权限 rw-rw-rw-
chmod go-rwx a.file 取消组和其他人的阅读、写入和执行权限 rw——-
chmod a-w a.file 取消所有人的写入权限 r– r– r–
chmod uo-r a.file 取消用户和其它人的阅读权限 -w-rw–w-
chmod go=rw a.file 将组和其他人的权限设置为阅读和写入 rw-rw-rw-

使用数字的表示方式类似chmod 755 a,执行完成后a这个文件的权限对应就是 -rwxr-xr-x,这是文件权限的两种修改方式,如果你想修改文件的所有者和所有者组需要使用的命令就是chown,chgrp

  • chown命令:改变文件或文件夹的所有者
[root@zutuanxue test]# ll总用量 0-rw-r--r-- 1 root root 0 10月 18 01:26 file1[root@zutuanxue test]# chown oracle file1[root@zutuanxue test]# ll总用量 0-rw-r--r-- 1 oracle root 0 10月 18 01:26 file1
  • chgrp命令: 改变文件或文件夹属组
[root@zutuanxue test]# chgrp oracle file1
[root@zutuanxue test]# ll
总用量 0
-rw-r--r-- 1 oracle oracle 0 10月 18 01:26 file1

这里,我们涉及到了三条与权限修改相关的命令

操作 可以执行的用户
chmod Root用户和文件的所有者
chgrp Root用户和文件的所有者(必须是组成员)
chown 只有root用户

以上是三种基本权限 -R

三、文件或目录的默认权限

每一个新产生的文件都会有一个默认的权限,这个权限是通过系统中的umask来控制的

文件的最大权限是666

目录的权限是777

使用umask查看


linux 特殊权限

linux基本权限只是规定了所有者、属组、其他人三种用户的权限,如果希望对文件或文件夹做一些特殊的权限设置呢?
比如:

  • 设置属组继承权限
  • 为执行文件设置临时超管执行权限
  • 公共文件夹中的文件谁建立谁删除
    这些任务基本权限就解决不聊了,需要解决这个问题得靠特殊权限。

一、特殊权限的介绍

之前我们提到了特殊权限有三个,这三个特殊权限是在可执行程序运行时影响操作权限的,它们分别是SUID,SGID,sticky-bit位

特殊权限 说明
SUID 当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。任意存取该文件拥有者能使用的全部系统资源。如果所有者是 root 的话,那么执行人就有超级用户的特权了。
SGID 当一个设置了SGID 位的可执行文件运行时,该文件将具有所属组的特权,任意存取整个组所能使用的系统资源;若一个目录设置了SGID,则所有被复制到这个目录下的文件,其所属的组都会被重设为和这个目录一样,除非在复制文件时保留文件属性,才能保留原来所属的群组设置。
stickybit 对一个文件设置了sticky-bit之后,尽管其他用户有写权限,也必须由属主执行删除、移动等操作;对一个目录设置了sticky-bit之后,存放在该目录的文件仅准许其属主执行删除、移动等操作。

一个典型的例子就是passwd命令,这个命令允许用户修改自己的密码。我们可以看到本来是rwx的权限表示形式变成了rws,同样如果/usr/bin/passwd这个文件同时被设置了三个特殊权限,那么权限的格式就会变成rwsrwsrwt,需要注意的是特殊权限设置的前置要求是可执行,也就是如果没有x权限位,是不要设置的,即便你使用root用户设置上了特殊权限,也不会生效。

二、特殊权限的设置和查看

特殊权限的设置也是使用chmod

或者使用数字

linux 隐藏权限

隐藏权限的介绍

有时候你发现即时使用的是root用户也不能修改某个文件,大部分原因是因为使用过chattr命令锁定了该文件,这个命令的作用很大,通过chattr可以提高系统的安全性,但是这个命令并不适合所有的目录,如/dev,/tmp,/var。与我们前面看到的chmod这些命令修改权限不同的是chattr修改的是更底层的属性,这里面我们所提到的隐藏权限指的就是使用chattr来设置属性

隐藏权限的设置和查看

chattr的用户与我们之前讲的chmod,chow这些命令相似,都是直接对需要修改的文件进行操作就可以了

  • chattr命令:为文件设置隐藏权限
命令选项
+ 增加权限
- 删除权限
= 赋予什么权限,文件最终权限
A 文件或目录的atime不可被修改
S 硬盘I/O同步选项,功能类似sync。
a 只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
d 文件不能成为dump程序的备份目标。
i 设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。
  • lsattr命令: 查看文件隐藏权限

通过案例学习命令用法:

给file1文件添加AaiSd权限
[root@zutuanxue test]# chattr +AaiSd file1

查看文件file1隐藏权限
[root@zutuanxue test]# lsattr file1 
--S-iadA---------- file1

设置删除file1文件隐藏权限
- 可以使用-号  
- 可以使用=为空设置
[root@zutuanxue test]# chattr = file1
[root@zutuanxue test]# lsattr file1 
------------------ file1

通过上面的例子可以看到查看的时候使用的是lsattr,chattr还有很多参数,各位可以在man手册中获取到帮助,另外有些参数的使用是有局限性的。


linux acl权限

linux的权限非常重要,我们之前所说的几种权限中,但是并不能只针对一个用户或者一个组进行单独设置,而ACL权限可以帮助我们实现这个功能,比如说有一个文件的所有者和所有者组都是a,这个文件的权限是660,我可以让b这个用户可以对文件进行读写的操作,而b这个用户并不属于a组的成员。那我们来看下如何使用

ACL权限的设置和查看

如果要使用acl权限,首先要确定你的文件系统支持acl权限,如果再Default mount options字段出现acl字样就意味着你的文件系统支持acl,不过在CentOS8中默认是都支持的。

配置acl权限我们需要使用两个命令一个是setfacl用来设置acl权限,另一个是getfacl用来查看acl权限

  • setfacl命令:设置文件或文件夹的ACL权限
命令选项:
-m :设置acl
-x :删除指定的acl
-b :删除所有的acl
  • getfacl命令:用来查看文件的acl权限
    现在我们来看下如何设置
[root@zutuanxue test]# ls
file  file1
[root@zutuanxue test]# ll file1
-rw-r--r-- 1 root root 0 6月 28 02:48 file1
[root@zutuanxue test]# setfacl -m u:oracle:rw file1	为指定的用户配置一个rw的权限
[root@zutuanxue test]# setfacl -m u::rwx file1		如果没有指定用户则默认是为该文件的所有者设置
[root@zutuanxue test]# ll file1
-rwxrw-r--+ 1 root root 0 6月 28 02:48 file1	所有者权限变成的rwx而且后面多了一个+

你会发现使用ll(等同于ls -l)命令查看时会发现多了一个+号,这只是提醒我们此文件被设置了acl权限,但是具体是什么样的,我们还需要使用getfacl来查看

[root@zutuanxue test]# getfacl file1
# file: file1			文件名
# owner: root			所有者
# group: root			所有者组
user::rwx				user:后面是空的,代表的是所有者的权限
user:oracle:rw-			我们之前给额外用户设置的权限
group::r--				所有者组的权限
mask::rw-				默认的有效权限
other::r--				其他人的权限

以上是我们针对一个额外的用户设置的权限,同理可以设置针对组和其他人的acl权限

为不同用户或组设置不同权限

[root@zutuanxue test]# setfacl -m g:oracle:rw file1
[root@zutuanxue test]# setfacl -m o:rw file1
[root@zutuanxue test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
user:oracle:rw-
group::r--
group:oracle:rw-
mask::rw-
other::rw-

删除指定的acl

[root@zutuanxue test]# setfacl -x u:oracle file1		删除用户acl
[root@zutuanxue test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
group::r--
group:oracle:rw-
mask::rw-
other::rw-
[root@zutuanxue test]# setfacl -x g:oracle file1		删除组acl
[root@zutuanxue test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
group::r--
mask::r--
other::rw-
[root@zutuanxue test]# chmod o=r file1				删除其他人直接使用chmod就可以
[root@zutuanxue test]# ll file1
-rw-r--r-- 1 root root 0 10月 18 04:21 file1
[root@zutuanxue test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::r--

删除所有acl

[root@zutuanxue test]# setfacl -m u:oracle:rw,g:oracle:rw,o:rwx file1
[root@zutuanxue test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:oracle:rw-
group::r--
group:oracle:rw-
mask::rw-
other::rwx

[root@zutuanxue test]# setfacl -b file1
[root@zutuanxue test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::rwx


评论
  目录