Linux用户身份与文件权限

1、Linux系统中的3类用户

1)管理员:比如root用户,权限最大的用户,root用户uid值为0

2)系统用户

系统用户:在红帽5或者6系列的系统中,系统用户的uid值为0-499;而在红帽7系列的系统中,系统用户的uid值为0-999

系统用户一般来说都不允许登录系统,即/sbin/nologin

3)普通用户

普通用户:在红帽5或者6系列的系统中,系统用户的uid值为500-65535;而在红帽7系列的系统中,系统用户的uid值为1000以上


[root@shell ~]#

[root@shell ~]# useradd  user1#创建用户user1 

[root@shell ~]# id  user1

uid=1004(user1) gid=1004(user1) groups=1004(user1)

[root@shell ~]#

[root@shell ~]# useradd  -s  /sbin/nologin  user2#创建用户且不允许此用户进行登录

[root@shell ~]# id  user2

uid=1005(user2) gid=1005(user2) groups=1005(user2)

[root@shell ~]#

[root@shell ~]#

[root@shell ~]# groupadd  group1 #创建用户组1

[root@shell ~]# groupadd  group2 #创建用户组2

[root@shell ~]# cat  /etc/group #查看用户组信息

[root@shell ~]# userdel  -r  user2#删除用户user2

[root@shell ~]#

[root@shell ~]# id  user1

uid=1004(user1) gid=1004(user1) groups=1004(user1)

[root@shell ~]#

[root@shell ~]# usermod  -G  group1  user1#将已有用户user1添加到已有次要用户组group1中

[root@shell ~]# id  user1

uid=1004(user1) gid=1004(user1) groups=1004(user1),1006(group1)

[root@shell ~]#

[root@shell ~]# usermod  -g  group1  user1 #将user1的主要用户组更改为group1

[root@shell ~]# id  user1

uid=1004(user1) gid=1006(group1) groups=1006(group1)

[root@shell ~]#


2、文件权限

Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等。

1)普通文件类型

  Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件。第一个属性为 [-] 。

2)目录文件类型

  在linux中,它的思想是一切皆是文件,目录文件也就是Windows中的目录,也就是能用 cd 命令进入的。第一个属性为 [d],例如 [drwxr-xr-x]。

3)字符设备文件

  即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为[c]。

4)块设备文件

  即存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是/dev/hda1等文件。第一个属性为 [b]。

5)套接字文件

  这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为[s],最常在 /var/run目录中看到这种文件类型。

6)管道文件

  FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]。

7)链接文件

  类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。


3、查看文件类型三种方式

1)使用ll或者ls-l,看第一个字符

2)使用file命令,如file jason.txt

3)使用stat命令,查看文件的详细信息。


4、文件权限

r :   read代表可读权限

w :  write代表可写权限

x :  execute代表可执行权限

R=4

W=2

X=1

—=0

chmod  :设置文件权限;

chown :设置文件的所有者和所有主

[root@shell ~]#

[root@shell ~]# mkdir  file1

[root@shell ~]# ll | grep  file1

drwxr-xr-x  2 root root    6 Jul 16 09:58 file1

[root@shell ~]#

[root@shell ~]# chmod  774  file1#修改权限为774

[root@shell ~]# ll | grep  file1

drwxrwxr--  2 root root    6 Jul 16 09:58 file1

[root@shell ~]#

[root@shell ~]# chown  root:group1  file1#修改文件所组为group1

[root@shell ~]# ll | grep  file1

drwxrwxr--  2 root group1    6 Jul 16 09:58 file1

[root@shell ~]#


5、Linux默认文件权限

当建立一个新的文件或者目录时,它的默认权限是什么?那就与umask这个玩意有关系。基本上umask就是指定当前用户在建立新文件或目录时候的权限默认值。

[root@shell ~]#

[root@shell ~]# umask #查看默认权限

0022 #与一般权限有关的是后面3个数字

[root@shell ~]#

由上面可以看出默认权限有4组数字,其中第一个代表特殊权限,后三个代表普通权限

[root@shell ~]# umask  -S#查看默认权限

u=rwx,g=rx,o=rx

[root@shell ~]#

在默认权限的属性上,目录与文件是不一样的。。我么知道x权限对于目录来说是非常重要的,但是一般文件的建立则不应该有执行的权限,因为一般文件通常是用于对数据的记录,当然不需要执行权限了。因此在默认情况下:

1)若用户建立的为文件则默认没有可执行权限,即只有可读可写权限,也就是默认文件权限最大为666

-rw-rw-rw-

2)若用户建立的为目录,则由于x与是否可以进入该目录有关,因此默认所有权限均开放,即默认权限最大为777,默认权限如下:


6、特殊文件权限

SUID :让程序执行者,临时获取程序所有者的身份,SUID跟sudo不一样

SGID:让程序执行者,临时获取程序所有组的身份,SUID跟sudo不一样

让目录内的新建文件,继承目录所有组的名称

SBIT:粘滞位,保护位   让目录内的文件,只能自己删除自己的     (o+t)如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:

1)-rwsr-xr-x表示SUID和所有者权限中可执行位被设置

2)-rwSr--r--表示SUID被设置,但所有者权限中可执行位没有被设置

3)-rwxr-sr-x表示SGID和同组用户权限中可执行位被设置

4)-rw-r-Sr--表示SGID被设置,但同组用户权限中可执行位没有被设置

给文件加SUID和SGID的命令如下:

chmod  u+s  filename  # 设置SUID位


chmod  u-s  filename  # 去掉SUID设置


chmod  g+s  filename # 设置SGID位


chmod  g-s  filename # 去掉SGID设置


chmod  o+t  dirname  #设置SBIT位


chmod  o-t  dirname  #设置SBIT位

chmod:设置文件权限

chown:设置属性

6.1 SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者暂时拥有所有者的权限。

当s这个标志出现在文件拥有者的x权限上时,例如 /usr/bin/passwd 这个文件的权限状态“-rwsr-xr-x”,此时这种状态就被称为 Set UID ,简称为SUID的特殊权限。

1)SUID权限仅仅对二进制程序有效;

2)执行者对于该程序需要具有x的可执行权限;

3)本权限仅在执行该程序的过程中有效;

4)执行者将具有该程序拥有者的权限

5)SUID仅可用在二进制程序上,不能够用在shell脚本上面

明明/etc/shadow就不能让普通用户去读写,为什么普通用户还能修改这个文件内的密码?这个是SUID的功能。由此可知:

1)普通用户对于/usr/bin/passwd这个程序来说具有可执行的权限,表示普通用户能够执行passwd;

2)passwd的拥有者是root用户;

3)普通用户在执行passwd的过程中会暂时获得root的权限;

4)/etc/shadow可以被普通用户所执行的passwd所修改

5)但是当用cat去读取 /etc/shadow 时,却不能够读取,因为cat不具有SUID的权限,所以是不能够读取 /etc/shadow 的。


6.2 SGID

当s标志在文件拥有者的x位为SUID,那么当s标志在用户属组的x位时则称为Set GID,简称为SGID。

与SUID不同的是,SGID可以针对文件或目录来设置。对于文件来说SGID具有如下功能:

1)SGID对二进制程序有用;

2)程序执行者对于该程序来说,需要具备x的权限;

3)执行者在执行的过程中将会获得该程序用户组的支持

除了二进制程序以外,事实上SGID也能够用在目录中,这也是一种很常见的用途。当一个目录设置了SGID的权限后,它将具有如下的功能:

1)用户若对于此目录具有r和x的权限时,该用户能够进入目录;

2)用户在此目录下的有效用户组将会变成该目录的用户组;

3)用途:若用户在此目录下具有w的权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同;

6.3 SBIT

 当某个目录设置了SBIT位,那么该目录中的文件只能被其所有者执行删除操作。这样就保护了文件,避免被其它用户删除。

SBIT目前只针对目录有效,对于文件已经没有效果了,SBIT对于目录的作用如下:

1)当用户对于此目录具有w、x的权限时,即具有写入的权限;

2)当用户在该目录下建立文件或目录时,仅有自己与root账户才有权力删除该文件或者该目录


6.4 SUID/SGID/SBIT权限设置

两种设置方法:

我们已经知道通过数字形式更改权限的方式为【三个数字】的组合,那么如果在这三个数字前面再加上一个数字的话,最前面的那个数字就代表这几个特殊权限了。

1)数字4代表SUID权限

2)数字2代表SGID权限

3)数字1代表SBIT权限

假设要将一个文件权限更改为[-rwsr-xr-x]时,由于s在用户权限位置中,所以是属于SUID.

所以在原先的755之前再加上4,也就是chmod 4755 filename 来设置。此外还有大S与大T的产生。

[root@shell ~]#

[root@shell ~]# cd /tmp/#进入tmp目录

[root@shell tmp]# touch test#创建文件test

[root@shell tmp]# chmod 4755 test ; ls -l test #赋予SUID权限

-rwsr-xr-x 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#

[root@shell tmp]# chmod 6755 test ; ls -l test #再赋予SGID权限

-rwsr-sr-x 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#

[root@shell tmp]# chmod 1755 test ; ls -l test #只赋予SBIT权限

-rwxr-xr-t 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#

[root@shell tmp]# chmod 7666 test ; ls -l test #SUID、SGID权限为空

-rwSrwSrwT 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#

最后一个例子怎么会出现大写的S与大写的T呢,因为s与t都是取代x这个权限的,但是我们这里执行的权限为7666,也就是说user、group以及other都没有可执行权限x,因为权限为666,所以大写的S与大写的T代表的权限就是空的。


另一种设置特殊权限的方法为:通过符号法来处理。

其中SUID设置符号为: u+s

SGID设置符号为: g+s

SBIT设置符号为: o+t

符号法设置案例如下:

1)要求:设置权限成为-rws--x--x的模样

[root@shell tmp]#

[root@shell tmp]# chmod  u=rwxs,go=x test

[root@shell tmp]# ls  -l  test       

-rws--x--x 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#

2)承接上一个案例:加上SGID与SBIT在上述文件权限中

[root@shell tmp]#

[root@shell tmp]# chmod g=xs,o=xt test

[root@shell tmp]# ls -l test

-rws--s--t 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#

或者使用如下命令:一样的效果

[root@shell tmp]# chmod g+s,o+t test ; ls -l test

-rws--s--t 1 root root 0 Jul 19 10:00 test

[root@shell tmp]#


5.4 chmod

用来设置文件或目录的权限,格式:chmod [选项] 权限 文件或目录名

选项:-R:表示递归修改权限,连目录中的所有文件的属性都进行修改

如:

chmod 760 test

chmod g+s testdir/

chmod o+t testdir/


6.5文件的隐藏属性

1)chattr 配置文件隐藏属性

文件的隐藏属性对于系统有很大的帮助,尤其是在系统安全层面非常重要,不过要先强调的是,chattr命令只能在ext2 ext3 ext4 的Linux传统文件系统上面完整生效;其他的文件系统肯能就无法完整的支持这个命令了,例如xfs仅仅能支持部分参数而已

chattr语法:

chattr  [+ - =]  [A S a c d i s t u]文件或者目录名称

A:即Atime,告诉系统不要修改对这个文件的最后访问时间。

S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。

a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。

b:不更新文件或目录的最后存取时间。

c:将文件或目录压缩后存放。

d:当dump程序执行时,该文件或目录不会被dump备份。

D:检查压缩文件中的错误。

i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。

s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。

u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。

t:文件系统支持尾部合并(tail-merging)。

X:可以直接访问压缩文件的内容。


chattr解析:

chattr: 锁定文件,不能删除,不能更改

+a :只能给文件添加内容,但是删除不了

chattr  +a  /etc/passwd

-d :不可删除

加锁:chattr  +i  /etc/passwd文件不能删除,不能更改,不能移动

查看加锁:lsattr  /etc/passwd文件加了一个参数 i 表示锁定

解锁:chattr  -i  /home/jiaxu/test.txt表示解除


使用案例:

[root@shell ~]#

[root@shell ~]# cd  /tmp/#进入该目录

[root@shell tmp]# touch  attrtest#创建一个测试文件

[root@shell tmp]# chattr  +i  attrtest #vgei该文件添加i属性

[root@shell tmp]# rm  attrtest #删除该文件

rm: remove regular empty file ‘attrtest’? yes#回复 是

rm: cannot remove ‘attrtest’: Operation not permitted

[root@shell tmp]#

[root@shell tmp]# chattr  -i  attrtest #取消该文件的i属性

[root@shell tmp]# rm  attrtest #再次进行删除

rm: remove regular empty file ‘attrtest’?  yes

[root@shell tmp]#


2)lsattr显示文件隐藏属性

lsattr  [-adR]文件或者目录

参数说明:

-a:将隐藏文案进的属性也显示出来;

-d:如果后面接的是目录,仅列出目录本身的属性而非目录内的文件名;

-R:连同子目录的数据也一并列出来


lsattr使用案例:

[root@shell ~]#

[root@shell ~]# cd  /tmp/

[root@shell tmp]# touch  attrtest

[root@shell tmp]# chattr  +iaS  attrtest

[root@shell tmp]# rm  attrtest

rm: remove regular empty file ‘attrtest’?  yes

rm: cannot remove ‘attrtest’: Operation not permitted

[root@shell tmp]#

[root@shell tmp]# lsattr  attrtest

--S-ia---------- attrtest

[root@shell tmp]#


6.6文件访问控制列表

facl: 可以将权限具体到某个人,对某个人权限的精准指定

Setfacl :用来设置精准的权限

getfacl:用来查看精准的权限


6.7目录与文件的权限意义

权限对于一般文件与目录具有哪些不同的意义呢?

(1)权限对于文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库文件、二进制可执行文件。因此权限对于文件来说具有如下意义:

R(read):可以读取此文件的实际内容,如读取文本文件的数字内容等;

W(write):可以对文件进行编辑、新增或者是修改该文件的内容(但不包含删除该文件);

X(eXecute):表示该文件具有可以被系统执行的权限

在Linux系统中,一个文件是否能被执行,完全由是否具有x这个权限来决定,跟文件名类型没有绝对关系


(2)权限对于目录的重要性

我们已经知道文件是用来存放实际数据的所在,那么目录主要用来存储什么?目录主要的作用在记录文件名列表,文件名与目录有强烈的关联。对于目录来说r、w、x具有如下意义:

R(read):表示具有读取目录结构列表的权限,所以当你具有读取一个目录的权限时,表示你可以查询该目录下的文件名数据,因此你就可以使用ls这个命令将该目录的内容列表显示出来;

W(write):这个可以写入的权限对于目录来说是很了不起的,因为它表示你具有改动该目录结构列表的权限,也就是下面这些权限:

建立新的文件与目录;

删除已经存在的文件或目录(不论该文件的权限是什么都可以进行删除);

对已经存在的文件或者目录更改名称;

移动该目录内的文件或目录的位置

X(eXecute):目录的x表示的是用户能否进入该目录,没有x权限用户就无法进入该目录

你可能感兴趣的:(Linux用户身份与文件权限)