权限主要用于约束用户能对系统所做的操作。因为系统中不可能只有存在一个 root 用户,一定会存在多个用户,所以我们要用权限来约束用户。在 Linux 系统中针对文件定义了三种身份,分别是属主(owner)、属组(group)、其他用户(others)。每一种身份又对应着三种劝权限,可读(readable)、可写(writable)、可执行(executable)。
~]# touch file.txt
~]# ll file.txt
-rw-r--r-- 1 root root 0 Jan 24 10:25 file.txt
rw-:代表属主的权限,root 代表属主
r--:代表属组的权限,第二个 root 代表的是属组
r--:其他用户权限,不是属主也不在属组中的其他用户
root:属主,文件或目录的所属用户
root:属组,文件或目录的所属用户组
通过以上内容可看到,-rw-r--r-- 权限字段共十个字符,第一个字符在 文件属性 中有说到代表的是文件类型,其他的九个字符代表的就是三种身份的权限,前三个代表的是属主的权限,中间三个代表的是属组的权限,最后三个代表的是其他用户的权限。
权限可以分为两种方式来表示,第一种,ugo(user group other);第二种,number。
字母 | 含义 | 对应数字 | 对文件的影响 | 对目录的影响 |
r(read) | 读取权限 | 4 | 具有读取文件内容的权限 | 具有浏览目录及子目录的权限 |
w(write) | 写入权限 | 2 | 具有新增、修改文件内容的权限 | 具有增加和删除目录内文件的权限 |
x(execute) | 执行权限 | 1 | 具有执行文件的权限 | 具有访问目录的内容权限(取决于文件的权限) |
-(没有权限) | 没有权限 | 0 | 没有权限 | 没有权限 |
例:
ugo:
#给所有用户添加读写执行权限
~]# chmod a=rwx file.txt
~]# ll file.txt
-rwxrwxrwx 1 root root 0 Jan 24 10:25 file.txt
#取消所有用户的所有权限
~]# chmod a=-rwx file.txt
~]# ll file.txt
---------- 1 root root 0 Jan 24 10:25 file.txt
#给属主读写执行权限,给属组读写权限,给其他用户只读权限
~]# chmod u=rwx,g=rw-,o=r-- file.txt
~]# ll file.txt
-rwxrw-r-- 1 root root 0 Jan 24 10:25 file.txt
#给属组读写执行权限,其他用户读写权限
~]# chmod g=rwx,o=rw- file.txt
~]# ll file.txt
-rwxrwxrw- 1 root root 0 Jan 24 10:25 file.txt
number:
#给所有用户添加读写执行权限
~]# chmod 777 file.txt
~]# ll file.txt
-rwxrwxrwx 1 root root 0 Jan 24 10:25 file.txt
#取消所有用户的所有权限
~]# chmod 000 file.txt
~]# ll file.txt
---------- 1 root root 0 Jan 24 10:25 file.txt
#给属主读写执行权限,给属组读写权限,给其他用户只读权限
~]# chmod 764 file.txt
~]# ll file.txt
-rwxrw-r-- 1 root root 0 Jan 24 10:25 file.txt
#给属组读写执行权限,其他用户读写权限
~]# chmod 776 file.txt
~]# ll file.txt
-rwxrwxrw- 1 root root 0 Jan 24 10:25 file.txt
文件默认权限:644
目录默认权限:755
密码文件默认权限:600
日志文件默认权限:600
可执行文件默认权限:755
软链接文件默认权限:777
rw: 能看文件,能编辑文件,不能执行,不能删除,不能移动,不能复制。
rx: 能看文件,不能编辑文件,能执行,不能删除,不能移动,不能复制。
rwx:能看文件,不能编辑文件,能执行,不能删除,不能移动,不能复制。
rx: 能进入目录,能查看目录下的文件,至于操作文件需要看文件本身的权限。
rwx:如果赋予了w权限,那么该目录下的文件可以复制/删除/移动/修改。
#语法
##同时修改属主和属组
chown [要修改的属主].[要修改的属组] [文件或目录]
或
chown [要修改的属主]:[要修改的属组] [文件或目录]
##仅修改属主
chown [要修改的属主] [文件或目录]
##仅修改属组
chown .[要修改的属组] [文件或目录]
#参数说明
-R 修改目录以及目录下的所有文件属主和属组
su 命令是用切换用户使用的,普通用户于普通用户之间的用户是需要输入密码的,root 用户切换普通用户无需输入密码。su 和 su - 的区别就在于加载的环境变量不一样。
使用方法:
~]# su - [用户]
当普通用户需要执行一些管理员操作的时候就需要用到 sudo 。
直接将普通用户切换至wheel组中 (wheel组是默认拥有sudo权限的)
~]# usermod test -g wheel
~]# id test
uid=2002(test) gid=10(wheel) groups=10(wheel)
可使用 visudo 命令或者 vim /etd/sudoers (visudo有语法检测功能,输入错误无法保存退出)
#用户提权方式
root ALL=(ALL) ALL
root: 用户
ALL: 主机名
(ALL): 角色名
ALL: 所有权限
#用户组提权方式
%wheel ALL=(ALL) ALL
%: 组
wheel: 组名
ALL: 主机名
(ALL): 角色名
ALL: 所有权限
当命令设定了 suid 特殊权限的话,无论是谁运行这个命令都会被暂时的定义为属主在运行这个命令。
例:
#语法:
~]# chmod u+s /usr/bin/cat #加特殊权限
~]# chmod u-s /usr/bin/cat #取消特殊权限
~]# chmod 4755 /usr/bin/cat #数字代表方式(4000)
#查看 file.txt 文件的权限及属主、属组
~]# ll /tmp/file.txt
-rw-r----- 1 root root 4 Jan 24 15:37 /tmp/file.txt
#创建一个 test 用户
~]# useradd test
#测试 test 用户是否可以查看 file.txt 文件
~]# su - test
~]$ cat /tmp/file.txt
cat: /tmp/file.txt: Permission denied(报错没有权限无法查看文件内容)
#为 cat 添加 suid 权限
~]# chmod u+s /usr/bin/cat
~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 Nov 17 2020 /usr/bin/cat
#再次测试
~]# su - test
~]$ cat /tmp/file.txt
123(本次测试没有可以查看文件内容)
#取消权限
~]# chmod u-s /usr/bin/cat
sgid 通常是对目录操作的,将目录设置为 sgid 后,往后目录下创建的文件都与该目录属组保持一致。
例:
#语法:
~]# chmod g+s test #加特殊权限
~]# chmod g-s test #取消特殊权限
~]# chmod 2755 test #数字代表方式(2000)
#创建一个 test 目录
~]# mkdir test
#给 test 目录添加 sgid 权限
~]# chmod g+s test
~]# ll -d test
drwxr-sr-x 2 root root 6 Jan 24 16:17 test
#修改 test 的属组
~]# chown root:test test/
#创建在 test 目录下创建一个 1.txt 文件
~]# echo 123 > test/1.txt
~]# ll -d test/1.txt
-rw-r--r-- 1 root test 4 Jan 24 16:18 test/1.txt
#取消权限
~]# chmod g-s test
~]# echo 123 > test/2.txt
~]# ll -d test/2.txt
-rw-r--r-- 1 root root 4 Jan 24 16:24 test/2.txt
如果一个目录设定了 sbit (粘滞位)那么谁都可以在这个目录下创建文件,但是删除文件只能是谁创建的文件谁删除文件。除此之外 root 和该目录的属组也可以删除该目录下的文件。
#语法:
~]# chmod o+t test #加特殊权限
~]# chmod o-t test #取消特殊权限
~]# chmod 1755 test #数字代表方式(1000)
lsattr:查看文件的特殊属性
chattr:修改文件的特殊属性
#用法
chattr +[参数] [文件名称] 添加特殊属性
chattr -[参数] [文件名称] 取下特殊属性
#参数
+a 只能往文件中追加内容,不能做任何操作
+i 锁定文件,不能删除,不能追加,不能移动