权限管理是Linux中一个十分重要的概念,也是系统安全性的重要保障。这里主要介绍Linux的基本权限和默认权限,通过理论讲解与实验演示,可以详细了解到权限的相关操作及其重要性。

文件权限

[root@localhost ~]# ls -l /etc/passwd
-rw-r–r–. 1 root root 2133 Apr 16 11:33 /etc/passwd
[root@localhost ~]#
Key Value
-rw-r–r–. 权限
1 连接
root 所有者
root 所有组
2133 容量-默认单位B
Apr 16 11:33 修改的日期
/etc/passwd 文件名

文件的权限:所有者,所属组,其他人
rwx,读、写、执行,没有权限就是“-”
第一个组rwx:文件所有者的权限
第二个组rwx:文件所属组的权限
第三个组rwx:文件其他人的权限

目录的权限
r:具有读取目录结构列表的权限,可以查看目录下有哪些文件
w:该权限对于目录来说是很大的,
1、可以在该目录下新建新的文件和目录
2、可以删除已经存在的文件和目录
3、将已经存在的文件和目录重命名
4、移动目录内的文件和目录的位置
x:是否可以进入该目录

修改权限

chown命令:修改文件的拥有者,前提是要有该拥有者(-R 递归修改)

[root@localhost tmp]# tail -1 /etc/passwd
linux00:x:1001:1001::/home/linux00:/bin/bash
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# touch file1
[root@localhost tmp]# ll file1
-rw-r–r–. 1 root root 0 Apr 26 08:56 file1
[root@localhost tmp]# chown linux00 file1
[root@localhost tmp]# ll file1
-rw-r–r–. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]#

chgrp命令:修改文件所属组,前提是要有该组(-R 递归修改)

[root@localhost tmp]# tail -1 /etc/group
xiuyuan:x:1002:
[root@localhost tmp]# ll file1
-rw-r–r–. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]# chgrp raoxiuyuan file1
[root@localhost tmp]# ll file1
-rw-r–r–. 1 linux00 xiuyuan 0 Apr 26 08:56 file1
[root@localhost tmp]#

chmod命令:修改拥有者和所属组的权限
● 加减法:u/g/o +/-/= r/w/x
● 数字法:r=4,w=2,x=1

[root@localhost tmp]# ll file1
-rw-r–r–. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]# chmod g+w file1
[root@localhost tmp]# ll file1
-rw-rw-r–. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]# chmod g-w file1
[root@localhost tmp]# ll file1
-rw-r–r–. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]# chmod o=rwx file1
[root@localhost tmp]# ll file1
-rw-r–rwx. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]# chmod 777 file1
[root@localhost tmp]# ll file1
-rwxrwxrwx. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]# chmod 764 file1
[root@localhost tmp]# ll file1
-rwxrw-r–. 1 linux00 root 0 Apr 26 08:56 file1
[root@localhost tmp]#

默认权限

umask:查看当前用户的umask权限;-S选项
0022—拿走的权限
第一个数字表示特殊权限
022=rwxr-xr-x

默认创建文件和目录的权限,文件回拿走x权限。

临时的修改:umask 0000
永久的修改:/etc/bashrc(不建议)

普通用户:002
root用户:022

[root@localhost tmp]# umask                       //查看用户的默认权限
0022
[root@localhost tmp]# touch f1
[root@localhost tmp]# mkdir dir1
[root@localhost tmp]# ll
total 0
drwxr-xr-x. 2 root root 6 May 15 02:59 dir1        //创建的目录
-rw-r--r--. 1 root root 0 May 15 02:59 f1          //创建的文件,默认没有x权限
[root@localhost tmp]# umask
0022
[root@localhost tmp]# umask 000                    //修改用户的umask
[root@localhost tmp]# umask
0000
[root@localhost tmp]# touch f2
[root@localhost tmp]# ll
total 0
drwxr-xr-x. 2 root root 6 May 15 02:59 dir1
-rw-r--r--. 1 root root 0 May 15 02:59 f1
-rw-rw-rw-. 1 root root 0 May 15 03:01 f2
[root@localhost tmp]# chmod u+x f2
[root@localhost tmp]# ll
total 0
drwxr-xr-x. 2 root root 6 May 15 02:59 dir1
-rw-r--r--. 1 root root 0 May 15 02:59 f1
-rwxrw-rw-. 1 root root 0 May 15 03:01 f2
[root@localhost tmp]# mkdir dir2
[root@localhost tmp]# ll
total 0
drwxr-xr-x. 2 root root 6 May 15 02:59 dir1
drwxrwxrwx. 2 root root 6 May 15 03:03 dir2
-rw-r--r--. 1 root root 0 May 15 02:59 f1
-rwxrw-rw-. 1 root root 0 May 15 03:01 f2
[root@localhost tmp]# umask 022
[root@localhost tmp]# umask
0022
[root@localhost tmp]# vim /etc/bashrc      //永久修改umask
[root@localhost tmp]# 

-S:以符号方式输出权限掩码

[root@localhost tmp]# umask -S
u=rwx,g=rx,o=rx
[root@localhost tmp]#
问:假设你的umask为003,请问该umask情况下,建立的文件和目录的权限分别为多少?
答:umask为003,所以拿掉的权限为——–wx,因此:
文件:(-rw-rw-rw-)-(——–wx)=(-rw-rw-r–)
目录:(drwxrwxrwx)-(d——-wx)=(drwxrwxr–)问:在什么情况下,要使用umask
答:假设你和同时在同一个目录下进行同一个项目的工作。如果使用默认权限022,那么你创建的文件,你的同事将无法编辑。因此我们可以将权限调整为002

文件的特殊权限(SUID、SGID、SBIT)

[root@localhost ~]# ls -ld /tmp/; ls -l /usr/bin/passwd 
drwxrwxrwt. 11 root root 4096 May 15 03:38 /tmp/
-rwsr-xr-x. 1 root root 27832 Jan 29  2014 /usr/bin/passwd
[root@localhost ~]#

当s出现在拥有者的x权限位置时候,表示拥有者有SUID的权限(Set UID)
当s出现在所属组的x权限位置时候,表示所属组有SGID的权限(Set GID)
当t出现在其他人的x权限位置时候,表示其他人有SBIT的权限(Sticky Bit)

SUID,临时获取文件所有者的权限—-只能针对文件
SGID,即可以作用于目录,也可以作用于文件
作用于文件:SUID一样
作用于目录:继承父级目录—目录会不停继承
SBIT,只有文件的拥有者,才能删除,修改该目录下的文件—只针对目录

S和T都有大写和小写之分
大写说明:没有x权限
小写说明:有x权限
SUID=4 SGID=2 SBIT=1

账户管理

/etc/passwd:记录linux上的所有账号
/etc/shadow:记录账户对应的密码
/etc/group:记录所有的组

[root@localhost ~]# vim /etc/passwd

/etc/passwd每条记录详解
linux00:用户名
X:早期这个部分放的是用户登入密码,现在密码放入/etc/shadow中
UID:0表示系统管理员,1-999保留给系统使用的ID,1000以上给一般使用者
GID:0表示系统管理员,1-999保留给系统使用的ID,1000以上给一般使用者
Linux00:使用者信息说明
/home/linux00:用户家目录,用户登入时,所在的目录
/bin/bash:用户在登入的时候,是否可以使用shell,如果不能使用shell,则会显示/sbin/nologin

账户和组名:给使用者看的
UID和GID:linux系统识别的

id命令:查看当前登入用户的UID和GID

[root@localhost ~]# id

如果随意修改/etc/passwd下的用户UID会发生什么情况(当我们使用ls -l的时候,系统会根据/etc/passwd和/etc/group文件的内容,找到UID和GID对应的名称,修改显示)

/etc/shadow每条记录详解
1.Root:用户名
2.一串红色的字:经过加密的密码
3.最近更改过密码的日期:linux中的日期,是通过1970年1月1日开始累加的日期
4.密码不能改修改的天数:0表示随时可以修改
5.密码需要重新被修改的天数:通过修改该值,可以强制用户修改密码
6.密码需要变更的告警天数:7天哪系统会向用户发出告警
7.密码到期还可以使用时间:密码到期后,账号可以使用的时间
8.账号实效日期:通过1970年1月1日开始累加的日期,到了时间后,无论密码是过期,该账号已经不能使用
9.保留

/etc/group每条记录详解
1.linux00:组名
2.X:组密码,一般不需要
3.1000:GID
4.组用户(附属组)
这些文件不建议直接进行修改,建议使用命令进行修改。

useradd命令:用于创建用户

[root@localhost ~]# useradd linux00

使用useradd命令创建用户后,默认进行一下几个操作:
1.在/etc/passwd下建立相关的资料
2.在/etc/shadow下写入密码的相关的参数
3.在/etc/group中写入和账号名一样的组
4.在/home/下创建用户的家目录

usermod命令:可以对已存在账户的信息进行修改

[root@localhost ~]# usermod -l linux00 user1

passwd命令:用于修改密码(所有人都可以用该命令修改自己的密码)

[root@localhost ~]# passwd linux00 //修改linux00用户的密码

chage命令:可以修改和密码有关的时间参数(-l:查看一个账户和密码有关的时间参数)

[root@localhost ~]# chage -l linux00

userdel命令:删除一个用户

要彻底删除一个账号,比较麻烦:
1.删除/etc/passwd;/etc/shadow文件中的内容
2.删除/etc/group;/etc/gshadow文件中的内容
3.删除/home/username;/var/spool/mail/username
4.删除该用户曾经来该linux中创建的文件(先用find命令进行查找,再删除)

[root@localhost ~]# userdel linux00 //删除1、2条中的信息3、4条中的信息依然存在
[root@localhost ~]# rm -rf /home/linux00 //手动删除家目录
[root@localhost ~]# rm -rf /var/spool/mail/linux00 //手动删除邮件目录

-r参数:连同家目录和邮箱一起删除

[root@localhost ~]# userdel -r linux00 //1、2、3内容全删除

ACL权限

ACL(Access Control List)访问控制列表,ACL的功能是应对复杂用户环境的权限问题。

那么这玩意有啥用处呢?下面我们考虑一种场景:

假设我Jimmy创建了一个项目文件夹,我和我的开发团队Rocket对该目录均具备 rwx 的权限,因为我该文件夹下有源码等,不能对外开放,所以对其他用户的权限为0,即我的文件夹目录为 drwxrwx—;
然而有一天,我的一个灰常好的盆友Sherry想要看一下我的项目,看看我写的代码有多流弊,然而我不好意思拒绝,这个时候我有三种选择:

1.让其成为所有者(这个当然不可能)
2.让其成为项目组成员(然而她并没有参与开发,再说她也基本看不懂代码,万一不小心删掉了部分代码咋弄?)
3.给其它人赋以 r-x 的权限(然而,other用户太多了吧,万一我代码没发布就被竞争对手给copy了呢?)
看来,以上三种手段都不靠谱啊,怪就怪other的用户全太大了,唉,这可咋整?

那么,我们为什么不为Sherry开小灶呢?就是让其不属于任何一个组,只是以单用户的身份被赋予特定权限。
这种“开小灶”的方式,其实就是ACL权限!

ACL可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助

setfacl命令: 设置文件或目录的ACL设置信息

[root@localhost tmp]# mkdir -m 770 project             //创建其他人无权限操作的目录
[root@localhost tmp]# ll -d project/
drwxrwx---. 2 root root 6 May 16 23:39 project/
[root@localhost tmp]# su - linux00                     //切换用户linux00
Last login: Wed May 16 23:37:52 EDT 2018 on pts/0
[linux00@localhost ~]$ cd /tmp/project/                //查看管理员创建的目录/tmp/project/
-bash: cd: /tmp/project/: Permission denied
[linux00@localhost ~]$ su -
Password: 
Last login: Wed May 16 23:38:31 EDT 2018 on pts/0
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# setfacl -m u:linux00:rx project/  //设置acl权限
[root@localhost tmp]# ll
total 4
drwxrwx---+ 2 root root 6 May 16 23:39 project          //目录权限第11位有一个 + 号,代表的就是ACL权限
[root@localhost tmp]# su - linux00
Last login: Wed May 16 23:39:56 EDT 2018 on pts/0
[linux00@localhost ~]$ cd /tmp/project/                 //linux00现在已经有权限可以访问project目录
[linux00@localhost project]$ 

getfacl命令: 获取文件或目录的ACL设置信息

[linux00@localhost tmp]$ getfacl project/
# file: project/
# owner: root
# group: root
user::rwx
user:linux00:r-x
group::rwx
mask::rwx
other::—

[linux00@localhost tmp]$

user:linux00:r-x: 表示linux00具备的ACL权限为 r-x
mask::rwx: 表示ACL的最大权限,用你分配给用户的权限与mask相与(类似于子网掩码)

setfacl -b命令:删除acl权限

[root@localhost tmp]# setfacl -b project/
[root@localhost tmp]# getfacl project/
# file: project/
# owner: root
# group: root
user::rwx
group::rwx
other::—

[root@localhost tmp]#