在学习Linux时用户权限的不同会导致我们无法访问一些文件,在Linux中,用户权限可分为基本权限,特殊权限,高级权限和隐藏权限,linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险。所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要。
一、基本权限
首先是基本权限,基本权限是指用户对文件的读写执行权限,表示一个用户通过何种方式对某个文件进行访问,权限的对象分为属主、属组和其他人,可以简写为u、g、o,读写执行权限可简写为r、w、x,也可用数字表示为4,2,1。
举例:建立一个文件file1.txt,他的属主为用户xiaoluo,属组为hr,另一个用户xiaowang的属组属于hr,这个文件的属主权限为rwx,属组权限为r-x,其他人权限为r--,那么用户xiaoluo就可对这个file1.txt文件进行读、写与执行,而用户xiaowang就只能对这个文件进行读跟执行,不能编辑文件,其他人只能读这个文件,不能编辑跟执行。
1. 设置与更改权限
chown #更改文件或目录的属主和属组
chmod #设置更改文件访问权限
通过chown可以更改文件或者目录的属主与属组,root用户下创建文件默认文件属主与属组都为root,更改命令为:
chown xiaoluo.hr file1.txt #修改属主与属组
chown xiaoluo file1.txt #只修改属主
chown .hr file1.txt #只修改属组
chown -R xiaoluo.hr dir1 #修改目录的属主与属组
其中xiaoluo为属主,hr为属组,可根据实际情况进行修改,需要注意的是,修改文件的属主与属组需要确保系统中有你所修改的用户和组,否则会显示找不到用户(组)。
更改权限
更改权限有两种方法,一种是通过符号对文件权限进行更改,另一种是通过数字对权限进行更改,具体操作方法为:
a.使用符号
chmod u+x file2.txt #给属主增加执行权限
chmod a=rwx file2.txt #所有人都能读写执行权限
chmod a=- file2.txt #收回所有人的所有权限
chmod ug=rw,o=r file2.txt #属主属组可读可写,其他人只读
ll #可查看文件权限,chmod执行完成后可通过此命令查看是否成功
b.使用数字
第一个数字表示属主的权限,第二个表示属组的权限,第三个为其他人的权限,r用数字表示为4,w用数字表示为2,x用数字表示为1,更改属主权限为读写权限就是读的数字与写的数字相加为6,以此类推。
chmod 777 file2.txt #更改属主属组和其他人的权限都为读写执行
chmod 641 file2.txt #更改属主的权限为读和执行,属组的权限为只读,其他人的权限只有执行
r、w、x权限对文件和目录的意义
对文件:
r ----cat vim tail head more less
w ---vi、vim echo > >>
x ---- bash /dir/file 注意:如果没有x权限,root用户都无法执行
对目录:
r -----ls 如果只有r权限,可以看到目录下的内容,但是有报错信息
w -----touch、rm 可以对目录下的文件创建和删除但是要有执行权限
x ---- cd 进入目录
举例:文件
[root@localhost ~]# vim /opt/file1.txt
date
[root@localhost~]# ll /opt/file1.txt
-rw-r--r--. 1 root root 5 Nov 3 15:19 /opt/file1.txt
[root@localhost~]# ./opt/file1.txt
2024年 07月 19日 星期五 08:10:58 CST
[root@localhost ~]# su - xiaoluo #切换普通用户
[xiaoluo@localhost ~]$ cat /opt/file1.txt
date
[xiaoluo@localhost ~]$ ./opt/file1.txt #执行文件
-bash: ./opt/file1.txt: 权限不够 #报错
[xiaoluo@localhost ~]$ exit #ctrl+d登出
[root@localhost ~]# chmod o+x /opt/file1.txt #添加执行权限
[root@localhost ~]# su - xiaoluo #切换普通用户
[xiaoluo@localhost ~]$ ./opt/file1.txt #执行成功
2024年 07月 19日 星期五 08:17:13 CST
[root@localhost ~]# chmod o+w /opt/file1.txt #添加写权限
[alice@localhost ~]$ vim /opt/file1.txt #可以编辑
date
123
ls
目录:对目录没有w,对文件有rwx
[root@linux-server ~]# mkdir /dir10
[root@linux-server ~]# touch /dir10/file1
[root@linux-server ~]# chmod 777 /dir10/file1
[root@linux-server ~]# ll -d /dir10/
drwxr-xr-x. 2 root root 19 Nov 3 15:37 /dir10/
[root@linux-server ~]# ll /dir10/file1
-rwxrwxrwx. 1 root root 0 Nov 3 15:37 /dir10/file1
[root@linux-server ~]# vim /dir10/file1
jack
[root@linux-server ~]# su - alice
Last login: Sun Nov 3 15:28:06 CST 2019 on pts/0
[alice@linux-server ~]$ cat /dir10/file1
jack
[alice@linux-server ~]$ rm -rf /dir10/file1 #权限不够
rm: cannot remove ‘/dir10/file1’: Permission denied
[alice@linux-server ~]$ touch /dir10/file2 #权限不够
touch: cannot touch ‘/dir10/file2’: Permission denied
其他人对父目录没有w权限,则对其目录下的文件也没有w权限,无关乎文件的权限,但是目录又要执行权限,否则无法cd进去
对目录有w,对文件没有任何权限:
[root@linux-server ~]# chmod 777 /dir10/
[root@linux-server ~]# chmod 000 /dir10/file1
[root@linux-server ~]# ll -d /dir10/
drwxrwxrwx. 2 root root 19 Nov 3 15:38 /dir10/
[root@linux-server ~]# ll /dir10/file1
----------. 1 root root 5 Nov 3 15:38 /dir10/file1
[root@linux-server ~]# su - alice #切换普通用户
Last login: Sun Nov 3 15:38:53 CST 2019 on pts/0
[alice@linux-server ~]$ cat /dir10/file1
cat: /dir10/file1: Permission denied #没有权限
[alice@linux-server ~]$ rm -rf /dir10/file1
[alice@linux-server ~]$ touch /dir10/file2
对目录有w权限,可以在目录中创建新文件,可以删除目录中的文件(跟文件权限无关)
注意事项
文件: x 权限小心给予
目录: w 权限小心给予
二、高级权限
高级权限是指对普通用户进行提权,提权方法有suid,sgid,sticky:
suid ==== 4 提权 (只对二进制命令文件生效,其他不管用)
sgid ==== 2 继承属组权限 (只能对目录设置)
sticky == 1 (t权限) 权限控制 SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
设置特殊权限命令:
chmod u+s file1.txt #对该文件进行提权,使得普通用户能够在可读写执行目录下进行增删改操作
chmod g+s dir1 #只能对目录设置,在目录下创建的文件会继承目录的属组
chmod o+t dir 即使有删除权限,也不能删除
chmod 4777 file
chmod 2770 dir
chmod 1770 dir
chmod u-s file1.txt #取消提权
目前两种给普通用户提权手段
suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。
sudo: 有针对性,例如针对某个用户以能够以root的身份执行某些命令。
通过sudo给用户进行提权是在visudo文件中写入提权用户的信息,之后该用户可通过sudo命令执行root用户的权限
[root@linux-server ~]# visudo #打开配置文件
90 ##
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD: ALL #添加内容
94 ## Allows members of the 'sys' group to run networking, software,
测试
[root@linux-server ~]# su - jack
Last login: Wed Nov 6 22:04:46 CST 2019 on pts/2
[jack@linux-server ~]$ sudo mkdir /test1
配置解释:
jack表示用户名
ALL=(ALL) #表示sudo可以切换到任意用户登陆所有计算机执行命令
NOPASSWD: ALL #表示所有命令都可以作为root身份执行时不需要root用户的密码。
访问控制权限
setfacl 针对个人设置权限 一个人查看一个文件的权限
getfacl 查看权限
已知文件:
[root@xiaoming tmp]# ll
-rw-r--r-- 1 root root 0 11月 26 11:25 a.txt
如果希望只有xiaoming用户可以rwx操作/tmp/a.txt文件
可以通过命令:
setfacl -m u:xiaoming:rwx /tmp/a.txt
-m 设置facl权限
u: 用户,也可以指定组 g(主组)
xiaoming: 需要指定的用户
rwx: 权限
查看权限
1、尝试对该文件进行操作
2、getfacl /tmp/a.txt
[root@xiaoming /tmp]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaoming:rwx
group::r--
mask::rwx
other::r--
我们可以看到 xiaoming 拥有了对该文件的rwx权限
收回权限
方法1、
setfacl -m u:xiaoming:--- a.txt
方法2、
setfacl -x u:xiaoming a.txt
方法3、
setfacl -b a.txt
设置该文件为所有人所有组访问
setfacl -m ::rwx a.txt
三、隐藏权限
文件属性添加与查看
[root@linux-server ~]# touch file1 file2 file3
1.查看文件属性
[root@linux-server ~]# lsattr file1 file2 file3
---------------- file1
---------------- file2
---------------- file3
2.设置权限
[root@linux-server ~]# chattr +a file1 #不允许修改,只允许追加
[root@linux-server ~]# chattr +i file2 #不允许做任何操作
[root@linux-server ~]# chattr +A file3
[root@linux-server ~]# lsattr file1 file2 file3
-----a---------- file1
----i----------- file2
-------A-------- file3
i:即Immutable,系统不允许对这个文件进行任何的修改
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖这个文件
A:即Atime,告诉系统不要修改对这个文件的最后访问时间