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权限用户就无法进入该目录