chown命令:修改文件的属主
chown 命令的功能是修改命令的属主与属组,即修改文件的所属对象和所属组别
语法格式:
基本格式:chown [选项] 用户 文件名或者目录名称
特殊格式:chown [选项] 用户:用户组 文件名或目录名称(这个命令在修改文件属主的同时也修改文件的属组)
常用的参数有两个 -v : 显示修改的过程;-R : 对该目录下的所有文件进行过修改(修改整个目录和其中文件属主)
案例:将company目录和其下所有文件的属主与属组都修改为admin2
[root@2017120008ls ~]# ll
总用量 16
-rw-------. 1 root root 1695 2月 16 17:40 anaconda-ks.cfg
drwxrwxrwx. 6 root root 46 4月 6 19:28 company
...
# 查看company文件的属主与属组(这里都是root)
[root@2017120008ls ~]# tail /etc/passwd
yf02:x:6006:6006::/home/yf02:/bin/bash
admin:x:6007:6007::/home/admin:/bin/bash
admin2:x:6008:6008::/home/admin2:/bin/bash
# 查看admin2账户是否存在并检查它的UID和组ID(都是6008)
[root@2017120008ls ~]# chown -vR 6008:6008 company/
# 修改company文件的属主与属组并显示修改过程||其中属主与属组既可以写名称(admin2)也可以写ID(6008)
changed ownership of "company/fw/fw_back.txt" from root:root to 6008:6008
changed ownership of "company/fw/fw_front.txt" from root:root to 6008:6008
changed ownership of "company/fw/fw01" from root:root to 6008:6008
...
[root@2017120008ls ~]# ll
总用量 16
-rw-------. 1 root root 1695 2月 16 17:40 anaconda-ks.cfg
drwxrwxrwx. 6 admin2 admin2 46 4月 6 19:28 company
# 检查结果 company 文件夹的属主与属组已经有原来的root变成了admin2
提醒:修改的用户名和属组一定要是系统中存在的(此乃废话)
chgrp命令:修改文件的属组
chgrp命令;功能是修改对应文件的属组
语法格式:
chgrp [选项] 用户组 文件名或者目录名
常用的参数 -v:显示修改的过程;-R:对该目录下的文件进行迭代修改(修改这个目录下所有文件的属组)
案例:修改company文件夹下所有文件的属组
[root@2017120008ls ~]# ll
总用量 16
-rw-------. 1 root root 1695 2月 16 17:40 anaconda-ks.cfg
drwxrwxrwx. 6 admin2 admin2 46 4月 6 19:28 company
# 查看对应文件的属组
[root@2017120008ls ~]# ll company/
总用量 0
drwxr-x---. 4 admin2 admin2 69 4月 6 19:27 fw
drwxr-x---. 5 admin2 admin2 42 4月 6 21:21 js
drwxr-xr-x. 2 admin2 admin2 6 3月 4 20:44 sc
drwxr-x---. 4 admin2 admin2 30 4月 6 19:28 yf
# 检查对应目录内部文件的属组(发现都需要改)
[root@2017120008ls ~]# chgrp root -vR company
changed group of "company/fw/fw_back.txt" from admin2 to root
changed group of "company/fw/fw_front.txt" from admin2 to root
changed group of "company/fw/fw01" from admin2 to root
...
# 用迭代的方法(-R)修改文件的属组,并显示修改过程
[root@2017120008ls ~]# ll company/
总用量 0
drwxr-x---. 4 admin2 root 69 4月 6 19:27 fw
drwxr-x---. 5 admin2 root 42 4月 6 21:21 js
drwxr-xr-x. 2 admin2 root 6 3月 4 20:44 sc
drwxr-x---. 4 admin2 root 30 4月 6 19:28 yf
# 查看文件的修改结果
[root@2017120008ls ~]# ll
# 查看是否修改对应目录的属组
特殊权限值SUID
设置特殊权限值 SUID 可以让普通用户以 root 用户的身份执行特定的程序或者命令
语法格式:
chmod [选项] 文件名
常用的选项参数:
u+s : 给二进制文件设定特殊权限值(只对二进制文件起作用);4xxx:(xxx是数字)与 u+s 功能相同,对特定的二进制文件设置特殊权限;u-s:取消特定二进制文件的特殊权限值
原理是给予普通用户 root 用户的特殊权限
案例:开放touch 命令(文件)的特殊权限给普通用户
[root@2017120008ls ~]# su admin
# 切换到普通用户
[admin@2017120008ls root]$ touch /tmp/mnt/file1
[admin@2017120008ls root]$ ll /tmp/mnt/
总用量 0
-rw-rw-r--. 1 admin admin 0 4月 7 16:23 file1
# 创建并查看文件:此时的文件属主和属组都是 admin
exit # 退回到 root
[root@2017120008ls ~]# chmod 4755 /usr/bin/touch
[root@2017120008ls ~]# ll /usr/bin/touch
-rwsr-xr-x. 1 root root 62480 8月 20 2019 /usr/bin/touch
# 退回到 root 用户;将touch文件的权限赋予普通用户(普通用户也可以用 root 的身份创建文件)
# 当出现-rwsr-xr-x(这个s是小写)的时候,意味着权限开放成功
[root@2017120008ls ~]# su admin
[admin@2017120008ls root]$ touch /tmp/mnt/file2
[admin@2017120008ls root]$ ll /tmp/mnt
总用量 0
-rwsrw-r--. 1 admin admin 0 4月 7 16:23 file1
-rw-rw-r--. 1 root admin 0 4月 7 16:27 file2
# 再次使用 admin 用户创建文件 file2 观察 file2文件的属主;(通过root身份创建的文件)
特殊权限值SGID
作用:让普通用户以其他用户组角色执行程序或者命令(以另一用户组角色运行只有另一用户组才能执行的文件或者命令)
语法结构:
chmod [选项] 文件名或者目录名称
常用选项:g+s : 增加用户组 SGID权限;2xxx(xxx:数字):与g+s用法相同,增加用户组SGID权限;g-s:除去用户组SGID权限
创建一个用户 user1要求其在对应位置下的目录和文件都具有admin用户组的属性
[root@2017120008ls mnt]# su admin
[admin@2017120008ls mnt]$ mkdir power1
# 在指定目录下(一般普通用户在/tmp目录下创建目录;不能在 /root 目录下创建)
[admin@2017120008ls mnt]$ chmod 777 power1
# 开放给所有用户读写权限
[admin@2017120008ls mnt]$ exit
exit
[root@2017120008ls mnt]# useradd -u 6002 user1
# 退出到 root 用户并添加一个用户user1
[root@2017120008ls mnt]# su user1
[user1@2017120008ls mnt]$ cd /tmp/mnt/
[user1@2017120008ls mnt]$ cd power1/
# 使用user1 用户进入指定的 目录
[user1@2017120008ls power1]$ mkdir pw02
[user1@2017120008ls power1]$ ll
总用量 0
drwxrwxr-x. 2 user1 user1 6 4月 7 17:13 pw02
# 创建一个文件夹并查看(发现这里的文件夹属组是 user1:因为没有创建属组为admin 文件夹的权限)
[user1@2017120008ls power1]$ exit
exit
[root@2017120008ls mnt]# su admin
# 退出当前用户并切换到 admin 用户
[admin@2017120008ls mnt]$ cd /tmp/mnt/
# 给目标目录设置特殊用户组权限 SGID
[admin@2017120008ls mnt]$ chmod g+s power1/
# 查看目标目录(确认设定了特殊用户组权限)
[admin@2017120008ls mnt]$ ll
总用量 0
-rwsrw-r--. 1 admin admin 0 4月 7 16:23 file1
-rw-rw-r--. 1 root admin 0 4月 7 16:27 file2
drwxrwsrwx. 3 admin admin 18 4月 7 17:13 power1
---------------------------分割线---------------------------------------------------------
[admin@2017120008ls mnt]$ exit
exit
[root@2017120008ls mnt]# su user1
# 切换回 user1 用户
[user1@2017120008ls mnt]$ cd power1/
[user1@2017120008ls power1]$ mkdir pw03
[user1@2017120008ls power1]$ ll
总用量 0
drwxrwxr-x. 2 user1 user1 6 4月 7 17:13 pw02
drwxrwsr-x. 2 user1 admin 6 4月 7 17:14 pw03
# 在目标目录下新建一个目录并查看
# 新建的目录 pw03 的用户组是admin (因为admin开放了特殊用户组权限,其他用户访问这个文件的时候会获得admin用户组权限)
特殊权限值SBIT
防止其他用户修改本用户目录文件
语法格式:
chmod [选项] 文件名或者目录名
参数:o+t : 增加SBIT权限,1xxx : 增加SBIT权限的另一种写法,o-t:取消SBIT权限
案例:实现user1用户和admin用户无法删除对方在/tmp目录下创建的文件
[root@2017120008ls mnt]# su user1
[user1@2017120008ls mnt]$ touch /opt/file1
[user1@2017120008ls mnt]$ exit
exit
# 登录 user1用户创建一个演示文件 并退出
[root@2017120008ls mnt]# chmod 1777 -R /opt/
[root@2017120008ls mnt]# ls -ld /opt/
# 给对应的目录和它子目录下的文件设置(其他用户不可删除;参数:-R)权限
[root@2017120008ls mnt]# ls -ld /opt/
drwxrwxrwt. 3 root root 29 4月 8 08:42 /opt/
# 检查目录情况,当权限字符串的末尾出现小写 t 的时候,我们的权限就已经设定完成了
[root@2017120008ls mnt]# su admin
[admin@2017120008ls mnt]$ rm -rf /opt/
rm: 无法删除"/opt/rh": 不允许的操作
# 登录admin用户,检查是否可以删除对应的目录或者目录下的文件
[admin@2017120008ls mnt]$ rm -rf /opt/file1
rm: 无法删除"/opt/file1": 不允许的操作
# 不能删除目录下的文件(注意要设置 -R 参数)
我们转换用户再次进行类似的操作
[root@2017120008ls mnt]# su admin
[admin@2017120008ls mnt]$ mkdir /opt/ottest
[admin@2017120008ls mnt]$ touch /opt/ottest/file1
[admin@2017120008ls mnt]$ exit
# 使用 admin 用户创建文件之后退出到root用户
[root@2017120008ls mnt]# chmod o+t -R /opt/ottest/
[root@2017120008ls mnt]# ls -ld /opt/ottest/
drwxrwxrwt. 2 admin admin 19 4月 8 08:56 /opt/ottest/
# 通过 root 用户的 o+t 选项给对应的文件(和文件下的目录)设置其他用户不可删除的权限
# 用户目录权限字符串的末尾出现 t 的时候,说明我们的权限已经设置成功了
[root@2017120008ls mnt]# su user1
[user1@2017120008ls mnt]$ rm -rf /opt/ottest/
rm: 无法删除"/opt/ottest/file1": 不允许的操作
# 切换到其他用户尝试对文件进行删除(结果权限不够)
特殊权限值ACL
针对某一用户或某一用户组的特定目录文件进行特定的权限设置
语法结构:
setfacl [选项] 对应的用户(组)权限 目录名称
案例:创建一个目录,使得admin用户不能修改该目录
[root@2017120008ls ~]# mkdir /tmp/mnt
[root@2017120008ls ~]# mkdir /tmp/mnt/testacl
# 使用 root 用户创建一个目录
[root@2017120008ls ~]# setfacl -m u:admin:rx /tmp/mnt/testacl
[root@2017120008ls ~]# ls -ld /tmp/mnt/testacl
drwxr-xr-x+ 2 root root 6 4月 8 19:16 /tmp/mnt/testacl
# 给这个目录添加特殊权限并查看特殊权限
[admin@2017120008ls tmp]$ getfacl /tmp/mnt/testacl/
getfacl: Removing leading '/' from absolute path names
# file: tmp/mnt/testacl/
# owner: root
# group: root
user::rwx
user:admin:r-x # 我们可以发现 admin 用户此时对于这个目录只有读取和执行权限,没有写入权限
group::r-x
mask::r-x
other::r-x
# 也可以通过 :getfacl + 目录名称的方式查看各个用户对于这个目录的权限
[root@2017120008ls ~]# su admin
[admin@2017120008ls root]$ cd /tmp/mnt/testacl/
[admin@2017120008ls testacl]$ touch file1
# 进入 admin 用户,在当前目录下尝试创建文件
touch: 无法创建"file1": 权限不够
# 因为权限不够无法创建
对某个目录及其子目录设置权限需要在参数 -m 之前加上参数 -R ;例如给manager用户设定整个company目录的所有权限 (rwx)
[root@2017120008ls /]# setfacl -m u:manager:rwx company/
# 如果我们仅仅设置对该目录的用户权限(没有加上参数 -R)则会发现
[root@2017120008ls /]# su manager
[manager@2017120008ls /]$ cd company/yf
bash: cd: company/yf: 权限不够
# 当我们在进入该目录的时候系统仍然会提示我们权限不够
[root@2017120008ls /]# setfacl -R -m u:manager:rwx /company/
[root@2017120008ls /]# su manager
[manager@2017120008ls /]$ cd company/yf
# 放我们加入了参数 -R 也就是这个目录和他的子目录都给了manager用户 (rwx)权限,这个时候后我们使用manager用户对其子目录进行操作就不会有权限不足的问题了
网友评论