Linux用户权限解析
-
基本权限
-
特殊权限
-
高级权限
-
隐藏权限
我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险。所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要
基本权限
基本权限:文件权限设置 可以赋于某个用户或组 能够以何种方式 访问某个文件
-rw- r-- r-- 1 root root 0 4月 8 11:10 test.txt
u g o
属主 属组 其他人
基本权限 | 针对目录 | 针对文件 | |
---|---|---|---|
读 r | 4 | 限制用户能否查看目录下文件 | 限制用户能否查看目文件内容 |
写 w | 2 | 限制用户能否创建/删除目录下文件或目录 | 限制用户能否编辑文件 |
执行 x | 1 | 限制用户能否进入目录,如果没有该权限,即使有读权限也只能看见文件名,而无法查看该目录下文件详情信息 | 只针对脚本,比如脚本文件叫做date.sh,能否使用./date.sh 方式去执行,或者是能否使用绝对路径的方式执行 |
r、w、x权限对文件和目录的意义
对文件:
r ----cat
w ---vi、vim
x ---- bash /dir/file
对目录:
r ---ls
w -----touch、rm
x ---- cd
设置权限
chown:改变文件或目录的所属主以及所属组
chmod:为文件或目录设置访问权限
更改文件的属主,属组
#只修改文件属主
#语法 chown $username $filelname
#只修改文件属组
#语法 chown .$groupname $filelname
#修改文件属主、属组
#语法 chown $username.$groupname $filelname
# chown $username:$groupname $filelname
#递归修改---针对目录
#语法 chwon -R $username.$groupname $dirname
更改权限
使用符号
例:
[root@linux-server ~]# chmod u+x file1.txt #属主增加执行
[root@linux-server ~]# chmod a=rwx file1.txt #所有人等于读写执行
[root@linux-server ~]# chmod a=- file1.txt #所有人都没有权限
[root@linux-server ~]# chmod ug=rw,o=r file1.txt #属主属组等于读写,其他人只读
[root@linux-server ~]# ll
-rw-rw-r--. 1 tom it 0 Nov 1 15:30 file1.txt
使用数字
例:
#设置属主权限为读写,属组权限为只读,其他人权限为只读
[root@linux-server ~]# chmod 644 file1.txt
[root@linux-server ~]# ll file1.txt
-rw-r--r--. 1 tom it 0 Nov 1 15:30 file1.txt
#设置属主权限为读写执行,属组权限为读执行,其他人权限为读执行
[root@linux-server ~]# chmod 755 file1.txt
[root@linux-server ~]# ll
-rwxr-xr-x 1 root root 0 Jul 23 22:40 file1.txt
##设置属主权限为读执行,属组权限为只写,其他人权限为执行
[root@linux-server ~]# chmod 521 file1.txt
[root@linux-server ~]# ll
-r-x-w---x 1 root root 0 Jul 23 22:40 file1.txt
权限掩码
umask用户掩码:控制用户创建文件和目录的默认权限
查看用户掩码:umask #root用户默认掩码0022 普通用户默认掩码0002
在Linux中root用户默认拥有最高权限,目录的最高权限777,文件的最高权限666,因为文件系统默认不会给执行权限
由此得出root用户创建的目录最高权限为:755 创建的文件最高权限为:644
普通用户创建的目录最高权限为:775 创建的文件最高权限为:664
修改用户掩码:umask 四位掩码
高级权限
高级权限: suid 普通文件 sgid,sticky 目录 这三个权限不能给到同一个文件
解释:
suid ==== 4 提权 (只对二进制命令文件生效,其他不管用)所有普通用户可以像root用户一样执行这个命令
sgid ==== 2 继承属组权限(只能对目录设置)在目录下创建的文件继承该目录的属组
sticky == 1 (t权限)该目录下的文件。只有创建者和root可以删除
suid语法:
suid:chmod u+s $filename
也可以是:chmod 4777 $filename
例:chmod u+s /usr/bin/cat
提权后/usr/bin/cat文件的权限变成了-rwsr-xr-x,可以发现除了文件名被高亮显示以外,属主权限出的执行权限x变为了s;此处需要知道的是x权限并没有被s覆盖,只是因为位置的原因被隐藏了;并且在文件本身没有执行权时,此处的s会是大写的S。
sgid语法:
sgid:chmod g+s $direname
也可以是:chmod 2777 $direname
例:chmod g+s dir1/
再修改dir1/目录的继承属组权限后, dir1/的权限变为drwxr-sr-x,属组权限的由r-x变为了r-s,再查看随后创建的文件1.txt,属组已经变为了hr(继承自父目录dir1)
sticky 语法:
sticky :chmod o+t $direname
也可以是:chmod 2777 $direname
例:chmod o+t dir1/
可以看到再未执行chmod o+t dir1/命令时,其他用户只要有权限就可以随意删除dir1/下的文件。而再执行chmod o+t dir1/后其他用户尽管有权限也无法删除dir1/下的文件,但创建者却可以。且执行后dir1/的其他人权限由rwx变为了rwt。
未执行chmod o+t dir1/
执行chmod o+t dir1/
特殊权限
提权
suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。
sudo: 有针对性,例如针对某个用户以能够以root的身份执行某些命令。
sudo
放开所有命令使用权用法:
打开配置文件sudo:visudo / vim /etc/sudoers
按:?root / ?ALL 检索关键字
在root ALL=(ALL) ALL这行下面插入需要提权的用户
例:$username ALL=(ALL) ALL #如果用户设有密码,此方法在执行命令时会要求输入密码
执行命令是不输入密码:$username ALL=(ALL) NOPASSWD:ALL
还可以将用户添加到一个组中,将整个组都提权:
%wheel ALL=(ALL) ALL
gpasswd -a $username wheel
最后保存退出即可
配置解释
ALL=(ALL) #表示sudo可以切换到任意用户登陆所有计算机执行命令
NOPASSWD: ALL #表示所有命令都可以作为root身份执行时不需要root用户的密码
注意:退出后最好执行visudo -c 检查一下修改以后是否有语法错误
放开个别命令使用权用法:
打开配置的方法和上面一样
不同的是:
在root ALL=(ALL) ALL这行下面插入需要提权的用户
例:$username ALL=(ALL) NOPASSWD:/usr/bin/mkdir, /usr/bin/rm, /usr/bin/touch #不再是ALL所有命令了,而是有选择的在指定命令
访问控制权限
setfacl
setfacl 针对个人设置权限 一个人查看一个文件的权限 getfacl 查看权限
getfacl 查看权限:
语法:getfacl $filename
此处我以chmod为例
setfacl 语法:
setfacl -m u:username:rwx $filename
例:setfacl -m u:root:rwx /usr/bin/chmod
可以看到有了明显变化,root用户拥有了/usr/bin/chmod的rwx权限
回收授权语法:
setfacl -m u:username:--- filename
setfacl -x u:username filename
setfacl -b filename
隐藏权限
隐藏权限的作用主要是为文件的安全提供保障,可以防止root用户误删文件,或者修改文件内容
查看文件的隐藏权限
语法:lsattr $filename
设置文件的隐藏权限
语法:chattr [参数] $filename
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。
参数:i #即Immutable。设置该权限后,即使是root用户也不可以删除或修改该文件
参数:a # 即Append Only。设置该权限后,即使是root用户也不可以删除文件,但可以向文件追加中追加内容
参数:A #即Atime。设置该权限后,root用户可以删除或修改文件内容,但会告诉系统不要修改对这个文件的最后访问时间
拓展
如何查看文件状态信息:stat
小结
对目录有w权限,可以在目录中创建新文件,可以删除目录中的文件(跟文件权限无关)
其他人对目录单有W权限,但没有X权限是无法在目录中创建文件或删除文件的
其他人对目录单有X权限,可以进入目录但无法查看目录下文件内容
root用户对一个目录下的文件没有直接的权限,但拥有对该目录的全部权限,root用户仍然可以查看、修改和操作该目录下的文件。
-
提权方法1:给某个命令提权
chmod u+s /usr/bin/rm #“命令”
缺点:一旦提权,所有用户都可以像root用户一样执行命令
-
提权方法2:给某个用户某些命令的权限
visudo
缺点:被提权的用户将会拥有某些或者全部root用户的权限
提权方法3:给某个用户设置针对某个文件的特殊权限
setfacl