D8

1. ls命令

之前讲过,使用ls -l可显示文件和目录的权限,这里不重复。

 

2. chmod命令

chmod命令用户修改文件或目录的权限。

可使用的模式有两种:

1)符号表达式模式,格式:chmod [OPTION]...[ugoa][[+-=][rwxug]][,...] FILE...

其中:

a)字母"ugoa"的组合控制哪些用户对文件的访问权限将被改变,如果不给出,则与a结果相同。

u:文件或目录的所有者

g:文件或目录的用户组的成员

o:不在文件或目录的用户组中的其他用户

a:所有用户,即(ugo)

b)操作符“+-=”表示权限的赋予和撤销。

+:选定的权限将被添加

-:选定的权限将被移除

=:只拥有选定的权限

$ ls -l a.txt #查看文件权限
-rw-rw-r--. 1 user1 user1 0 May 11 15:32 a.txt

$ chmod g-w a.txt #用户组删除写权限
$ ls -l a.txt 
-rw-r--r--. 1 user1 user1 0 May 11 15:32 a.txt

$ chmod o+w a.txt #其他用户添加写权限
$ ls -l a.txt 
-rw-r--rw-. 1 user1 user1 0 May 11 15:32 a.txt

$ chmod u=w a.txt #所有者只保留写权限
$ ls -l a.txt 
--w-r--rw-. 1 user1 user1 0 May 11 15:32 a.txt

$ chmod o=g a.txt #其他用户的权限配置为与用户组一致
$ ls -l a.txt 
--w-r--r--. 1 user1 user1 0 May 11 15:32 a.txt

$ chmod a+rwx a.txt #为所有人赋予读写和执行权限
$ ls -l a.txt 
-rwxrwxrwx. 1 user1 user1 0 May 11 15:32 a.txt

2)八进制位模式:用数字表示读(4)、写(2)、执行(1)权限,而每个用户权限组的值就是读写和执行这三个数字组合的相加得到的8进制数(0至7)。

$ chmod 777 a.txt #修改文件权限,7表示rwx,表示所有人都具有读写和执行

$ chmod -R 775 * #递归地修改目录下所有文件和子目录的权限,5表示r-x,表示所有者和用户组具有读写执行,而其他用户只有读和执行

$ find . -type f -exec chmod 777 {} \; #结合find命令只修改文件的权限

 

3. chown、chgrp命令

chown命令用于修改文件或目录的所有者和用户组信息。

语法:chown [OPTION]... [OWNER][:[GROUP]] FILE

# chown root a.txt #修改文件的所有者
# ls -l a.txt 
-rwxrwxrwx. 1 root user1 0 May 11 15:32 a.txt

# chown :root a.txt #修改文件的用户组
# ls -l a.txt 
-rwxrwxrwx. 1 root root 0 May 11 15:32 a.txt

# chown user1:user1 a.txt #同时修改所有者和用户组
# ls -l a.txt 
-rwxrwxrwx. 1 user1 user1 0 May 11 15:32 a.txt

# ln -s a.txt als #创建软连接
# ls -l
lrwxrwxrwx. 1 user1 user1    5 May 13 10:57 als -> a.txt
-rwxrwxrwx. 1 user1 user1    0 May 11 15:32 a.txt

# chown root:root als #尝试修改软链接的所有者和用户组,发现实际修改了指向的文件
# ls -l
lrwxrwxrwx. 1 user1   user1      5 May 13 10:57 als -> a.txt
-rwxrwxrwx. 1 root   root      0 May 11 15:32 a.txt

# chown -h :root als #使用-h选项,强制地修改软链接
# ls -l
lrwxrwxrwx. 1 user1 root      5 May 13 10:57 als -> a.txt
-rwxrwxrwx. 1 root root    0 May 11 15:32 a.txt

# chown --from=user1 root a.txt #使用--from选项,可以仅在当前所有者或用户组匹配指定所有者或用户组时,才修改

# chown --from=:user1 :root a.txt #使用--from选项,此处为检查并修改用户组

# chown -R root:root /root #递归地修改目录下所有文件和子目录

通过目录的软链接递归的修改目录下文件及子目录

# mkdir d/d1 d/d2 d/d3
# ln -s d d_lns #为目录d创建软链接
# ls -l
drwxr-xr-x. 5 root   root   4096 May 13 11:09 d
lrwxrwxrwx. 1 root   root      1 May 13 11:09 d_lns -> d
# ls -l d
total 12
drwxr-xr-x. 2 root root 4096 May 13 11:09 d1
drwxr-xr-x. 2 root root 4096 May 13 11:09 d2
drwxr-xr-x. 2 root root 4096 May 13 11:09 d3

# chown -R user1:user1 d_lns #尝试使用-R选项修改软链接的所有者和用户组,发现只修改了软链接,而没有修改指向的目录及子目录,因为默认情况下chown不能穿越软链接
# ls -l
drwxr-xr-x. 5 root   root   4096 May 13 11:09 d
lrwxrwxrwx. 1 user1 user1    1 May 13 11:09 d_lns -> d
# ls -l d
total 12
drwxr-xr-x. 2 root root 4096 May 13 11:09 d1
drwxr-xr-x. 2 root root 4096 May 13 11:09 d2
drwxr-xr-x. 2 root root 4096 May 13 11:09 d3


# chown -R -H user1:user1 d_lns #使用-H选项,配合-R选项通过软链接递归的修改目录及子目录的所有者和用户组
# ls -l
drwxr-xr-x. 5 user1 user1 4096 May 13 11:09 d
lrwxrwxrwx. 1 user1 user1    1 May 13 11:09 d_lns -> d
# ls -l d
total 12
drwxr-xr-x. 2 user1 user1 4096 May 13 11:09 d1
drwxr-xr-x. 2 user1 user1 4096 May 13 11:09 d2
drwxr-xr-x. 2 user1 user1 4096 May 13 11:09 d3

 

D9

4. chmod命令——设置setuid和setgid权限位

setuid(设置用户标识)是允许用户以文件所有者的权限执行一个程序的权限位。任意用户可以以所有者的权限执行设置了setuid的脚本。

setgid(设置组标识)是允许用户以用户组成员的权限执行一个程序的权限位。任意用户可以以用户组成员的权限执行设置了setgid的脚本。

注意:设置权限位需要非常谨慎,可能导致安全风险。

$ ls -l test.sh #查看文件是否有setuid和setgid,此时没有
-rwxrw-r--. 1 user1 user1 23 May 14 10:16 test.sh

$ stat test.sh #查看文件是否有setuid和setgid的另外一种方法,此时没有
  File: 'test.sh'
  Size: 23              Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 265183      Links: 1
Access: (0764/-rwxrw-r--)  Uid: ( 1001/  user1)   Gid: ( 1001/  user1)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2020-05-14 10:16:50.471037671 +0800
Modify: 2020-05-14 10:16:50.472037671 +0800
Change: 2020-05-14 10:16:59.612037671 +0800
 Birth: -
 
$ chmod u+s test.sh #用chmod符号表达式模式设置setuid
$ ls -l test.sh #查看,此时有setuid
-rwsrw-r--. 1 user1 user1 23 May 14 10:16 test.sh

$ chmod g+s test.sh #用chmod符号表达式模式设置setgid
$ ls -l test.sh #查看,此时有setuid和setgid
-rwsrwsr--. 1 user1 user1 23 May 14 10:16 test.sh

$ chmod 4755 test.sh #用chmod数字模式设置setuid

$ chmod 2755 test.sh #用chmod数字模式设置setgid

$ chmod 0755 test.sh #用chmod数字模式移除setuid和setgid

 

本节结束

 

欢迎大家评论交流,发现博文中存在的问题一定要留言哦