——用户分类:
注:当用户输入“ l l ”或者“ ls -l”命令查看文件信息时,可以看到如下信息:drwxrwxr-x
;字符串左数第一位(d)表示文件类型,除去第一位后的左三位表示拥有者的权限(rwx),中三位表示属组成员的权限,后三位表示其他用户的权限
——权限分类:
注:二进制法即利用二进制形式表示权限,” 777 “即表示” rwxrwxrwx ",“ 421 ”即表示“ r—w---x ”
针对文件的普通权限可以用chmod命令更改,实例如下:
首先利用” chmod u+x file1 “命令为文件拥有者添加一个对文件file1的执行权限;然后输入” chmod 0664 file1 “命令用二进制法删除文件拥有者对文件file1的执行权限。
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ ls
file1 file2 file3
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ ll -d file1
-rw-rw-r-- 1 liuyan liuyan 0 2月 28 18:22 file1
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ sudo chmod u+x file1
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ ll -d file1
-rwxrw-r-- 1 liuyan liuyan 0 2月 28 18:22 file1*
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ sudo chmod 0664 file1
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ ll -d file1
-rw-rw-r-- 1 liuyan liuyan 0 2月 28 18:22 file1
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$
利用umask命令更改新建文件或目录的默认权限,实例如下:
注:普通用户umask的值为0002,root用户umask的值为0022,可通过” umask -p 新umask值“更改umask的值。
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ umask
0002
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ umask -p 0022
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$ umask
0022
liuyan@liuyan-virtual-machine:~/Desktop/Text/practice$
注:新建文件的权限为666-umask(即rw-rw-r–),新建目录的权限为777-umask(即rwxrwxr-x)
Linux文件系统上的特殊权限
为了更方便,高效以及安全的控制文件,Linux操作系统引入了一组特殊权限。
suid 作用二进制文件所属者的身份运行
suid借用文件拥有者(u)权限中的最后一位(x),并用s来表示;当文件拥有者具有执行权限(x)时且该文件拥有特殊权限suid,则用小写字母s来表示即rws,若无执行权限则用大写字母S表示
sgid 作用目录新建文件集成父母的属组
sgid借用文件群组权限(g)中的最后一位(x),并用s来表示
sticky 作用目录此目录下谁创建仅创建者能删除
sticky借用文件其他用户(o)权限中的最后一位(x),并用t来表示
对于访问控制权限主要涉及到针对不同用户以及不同属组的权限控制问题,实例如下:
首先利用groupadd命令创建g1,g2组;创建用户tom,alice并把他们加入到相应的组里同时设置密码。然后进入到目标目录利用getfacl命令查看相关信息。再利用“ setfacl -Rm group:g1:rw- 目标文件"命令设置权限。
root@liuyan-virtual-machine:/dev/TTT# groupadd g1
root@liuyan-virtual-machine:/dev/TTT# groupadd g2
root@liuyan-virtual-machine:/dev/TTT# useradd -G g1 -m alice
root@liuyan-virtual-machine:/dev/TTT# useradd -G g2 -m tom
root@liuyan-virtual-machine:/dev/TTT# passwd alice
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@liuyan-virtual-machine:/dev/TTT# passwd tom
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@liuyan-virtual-machine:/dev/TTT# mkdir ooo
root@liuyan-virtual-machine:/dev/TTT#chmod g+s ./ooo
root@liuyan-virtual-machine:/dev/TTT# ls
ooo
root@liuyan-virtual-machine:/dev/TTT# getfacl ooo
# file: ooo
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
root@liuyan-virtual-machine:/dev/TTT# setfacl -Rm group:g1:rw- ./ooo
root@liuyan-virtual-machine:/dev/TTT# getfacl ooo
# file: ooo
# owner: root
# group: root
user::rwx
group::r-x
group:g1:rw-
mask::rwx
other::r-x
这时,切换到alice用户,测试权限。
alice@liuyan-virtual-machine:~$ cd /dev/TTT
alice@liuyan-virtual-machine:/dev/TTT$ ls
ooo
alice@liuyan-virtual-machine:/dev/TTT$ cd ooo
-su: cd: ooo: Permission denied
alice@liuyan-virtual-machine:/dev/TTT$
由于未分配该用户执行权限,导致无法访问该文件目录,需要再次利用setfacl命令添加执行权限。(注意该权限不可被继承)
root@liuyan-virtual-machine:/dev/TTT# setfacl -m group:g1:rwx ./ooo
再次登入alice用户,查看权限是否只正确,同时利用getfacl命令查看相关信息。
alice@liuyan-virtual-machine:/dev/TTT$ cd ooo
alice@liuyan-virtual-machine:/dev/TTT/ooo$ touch file1
alice@liuyan-virtual-machine:/dev/TTT/ooo$ ls
file1
alice@liuyan-virtual-machine:/dev/TTT/ooo$ getfacl file1
# file: file1
# owner: alice
# group: alice
user::rw-
group::rw-
group:g1:rw-
mask::rw-
other::r--
alice@liuyan-virtual-machine:/dev/TTT/ooo$
现在现需要更改tom用户的权限原理同上。
root@liuyan-virtual-machine:/dev/TTT# setfacl -Rm user:tom:r-- ./ooo
切换tom用户查看权限是否有误。
alice@liuyan-virtual-machine:/dev/TTT/ooo$ su - tom
Password:
tom@liuyan-virtual-machine:~$ cd /dev/TTT/
tom@liuyan-virtual-machine:/dev/TTT$ ls
ooo
tom@liuyan-virtual-machine:/dev/TTT$ getfacl ./ooo/
# file: ooo/
# owner: root
# group: root
user::rwx
user:tom:r--
group::r-x
group:g1:rwx
mask::rwx
other::r-x
同样为tom用户添加执行权限。(不可被继承)
root@liuyan-virtual-machine:/dev/TTT# setfacl -m user:tom:r-x ./ooo
最后检查各用户的权限信息。
tom@liuyan-virtual-machine:/dev/TTT$ cd ooo/
tom@liuyan-virtual-machine:/dev/TTT/ooo$ ls
file1
tom@liuyan-virtual-machine:/dev/TTT/ooo$ touch file2
touch: cannot touch 'file2': Permission denied
首先在目标目录创建文件,然后利用getfacl命令将acl信息写入到相关目录。
root@liuyan-virtual-machine:/dev/TTT/ooo# touch file{1..3}
root@liuyan-virtual-machine:/dev/TTT/ooo# ls
file1 file2 file3
root@liuyan-virtual-machine:/dev/TTT/ooo# cd ..
root@liuyan-virtual-machine:/dev/TTT# getfacl -R ./ooo > ./ppp/acl.txt
root@liuyan-virtual-machine:/dev/TTT# cd ppp
root@liuyan-virtual-machine:/dev/TTT/ppp# ls
acl.txt
root@liuyan-virtual-machine:/dev/TTT/ppp# cat acl.txt
# file: ooo
# owner: root
# group: root
user::rwx
user:1002:r-x
group::r-x
group:g1:rwx
mask::rwx
other::r-x
利用chmod命令更改某一文件的权限信息,同时输入setfacl --restore命令恢复被修改的权限信息
root@liuyan-virtual-machine:/dev/TTT/ppp# cd ../ooo
root@liuyan-virtual-machine:/dev/TTT/ooo# ls
file1 file2 file3
root@liuyan-virtual-machine:/dev/TTT/ooo# ll -d file1
-rw-r--r-- 1 root root 0 2月 28 20:05 file1
root@liuyan-virtual-machine:/dev/TTT/ooo# chmod 000 file1
root@liuyan-virtual-machine:/dev/TTT/ooo# ll -d file1
---------- 1 root root 0 2月 28 20:05 file1
root@liuyan-virtual-machine:/dev/TTT/ooo# cd ../
root@liuyan-virtual-machine:/dev/TTT# setfacl --restore ./ppp/acl.txt
root@liuyan-virtual-machine:/dev/TTT# cd ooo
root@liuyan-virtual-machine:/dev/TTT/ooo# ll -d file1
-rw-r--r-- 1 root root 0 2月 28 20:05 file1
root@liuyan-virtual-machine:/dev/TTT/ooo#