在看具体的命令之前,先来看看权限对于目录的意义,因为这个对于命令的操作也是有一定影响的,另外,理解了权限对于目录的意义,对于执行一些命令出现的问题,比如权限不足的情况,可以更好的排查,找出原因。
目录的权限
目录的权限跟文件的权限有点像,都是分为三组,即所有者权限、组权限、其他人的权限,每组也是由rwx,即读写运行三者组成。
虽然名字都是一样,但是这三个权限对于目录来说的意义却不一样。我们分别来看一下。
第一,读取权限r对于目录的意义。
当你要知道目录里面有什么东西,比如有什么文件,有什么子目录的话,那么就需要有这个权限,可以用ls命令来测试这个权限。
比如,我们的目录/etc,对于所有用户都是可读的:
[jack@VM-0-14-centos /]$ ls -ld etc
drwxr-xr-x. 70 root root 4096 Jan 24 16:41 etc
当我们运行在这个目录运行ls命令时,就可以看到/etc文件夹里面的内容了:
[jack@VM-0-14-centos /]$ ls /etc
acpi cron.monthly favicon.png init login.defs networks prelink.conf.d redhat-release shells uuid
adjtime crontab filesystems init.conf logrotate.conf nfsmount.conf printcap request-key.conf skel vimrc
aliases cron.weekly fstab init.d logrotate.d nsswitch.conf profile request-key.d ssh virc
alternatives crypttab gai.conf inittab lsb-release ntp profile.d resolv.conf ssl wgetrc
anacrontab csh.cshrc gcrypt inputrc lsb-release.d ntp.conf protocols rpc statetab X11
at.deny csh.login gnupg iproute2 lvm ntp.conf.dist qcloudzone rpm statetab.d xdg
audisp dbus-1 group iscsi magic openldap rc rsyslog.conf sudo.conf xinetd.d
audit default group- issue mail.rc opt rc0.d rsyslog.d sudoers yum
bash_completion.d depmod.d grub.conf issue.net makedev.d pam.d rc1.d rwtab sudoers.d yum.conf
bashrc dhcp gshadow kdump-adv-conf man.config passwd rc2.d rwtab.d sudo-ldap.conf yum.repos.d
blkid DIR_COLORS gshadow- kdump.conf mke2fs.conf passwd- rc3.d sasl2 sysconfig
centos-release DIR_COLORS.256color gssapi_mech.conf krb5.conf modprobe.d pkcs11 rc4.d securetty sysctl.conf
chkconfig.d DIR_COLORS.lightbgcolor host.conf ld.so.cache motd pki rc5.d security sysctl.d
cloud dracut.conf hosts ld.so.conf mtab plymouth rc6.d selinux system-release
cron.d dracut.conf.d hosts.allow ld.so.conf.d multipath pm rc.d services system-release-cpe
cron.daily environment hosts.deny libaudit.conf my.cnf popt.d rc.local sestatus.conf terminfo
cron.deny ethers idmapd.conf libuser.conf netconfig postfix rc.sysinit shadow udev
cron.hourly exports img_version localtime NetworkManager ppp redhat-lsb shadow- updatedb.conf
查看etc文件的权限,可以知道,这个文件夹的所有者是root,所属的组的root,对于同组、其他用户的权限是r和x:
[jack@VM-0-14-centos /]$ ls -ld etc
drwxr-xr-x. 70 root root 4096 Jan 24 16:41 etc
当前的用户jack是一个普通用户,如果我把其他用户的r权限去掉,那么jack将无法看到目录里面有什么内容了:
[root@VM-0-14-centos /]# chmod 751 etc
[root@VM-0-14-centos /]# ls -ld etc
drwxr-x--x. 70 root root 4096 Jan 24 16:41 etc
[root@VM-0-14-centos /]# su jack
[jack@VM-0-14-centos /]$ ls etc
ls: cannot open directory etc: Permission denied
可以看到,当其他用户的r权限被移走之后,jack无法读取目录里面的内容。
这里有个疑问,当这个用户对文件夹没有读取权限,但是对里面的文件有读取权限,那么能否读取到文件的内容呢?
答案是可以的。
[jack@VM-0-14-centos /]$ ls etc
ls: cannot open directory etc: Permission denied
[jack@VM-0-14-centos /]$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jan 11 19:52:58 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=22785f64-6c43-450f-8ea6-be91302eecc6 / ext4 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
同理,只要你对文件有写入、执行权限,那么就算你对目录没有读取权限,你可以修改、执行里面的文件,比如:
[root@VM-0-14-centos jack]# mkdir writeAndExecuteTest
[root@VM-0-14-centos jack]# ls -l writeAndExecuteTest/
total 0
[root@VM-0-14-centos jack]# ls -ld writeAndExecuteTest/
drwxr-xr-x 2 root root 4096 Jan 26 17:58 writeAndExecuteTest/
[root@VM-0-14-centos writeAndExcuteTest]# vim echoSomething.sh #里面的内容是:echo "hi, you can execute this file"
[root@VM-0-14-centos writeAndExecuteTest]# chmod 777 echoSomething.sh
[root@VM-0-14-centos writeAndExecuteTest]# ls -l echoSomething.sh
-rwxrwxrwx 1 root root 37 Jan 26 18:00 echoSomething.sh
[root@VM-0-14-centos jack]# su jack
[jack@VM-0-14-centos ~]$ ./writeAndExecuteTest/echoSomething.sh
hi, you can execute this file
再来看看修改的:
[jack@VM-0-14-centos ~]$ echo 'echo "add something to you"' >> ./writeAndExecuteTest/echoSomething.sh
[jack@VM-0-14-centos ~]$ ./writeAndExecuteTest/echoSomething.sh
hi, you can execute this file
add something to you
[root@VM-0-14-centos writeAndExecuteTest]# chmod 700 echoSomething.sh
[root@VM-0-14-centos writeAndExecuteTest]# ls -l
total 4
-rwx------ 1 root root 65 Jan 26 18:06 echoSomething.sh
[jack@VM-0-14-centos ~]$ ./writeAndExecuteTest/echoSomething.sh
bash: ./writeAndExecuteTest/echoSomething.sh: Permission denied
可见,只要对目录里面的文件有相应的权限,还是可以进行相关操作的,因此,在权限配置的时候要注意,如果你不想别人看到目录里面文件的内容,最好继承你所限制的目录的权限,以防把信息泄露出去了。
第二、写入权限和执行权限对于目录的意义
写入权限,实际上是:
在目录里面,可以创建、删除文件、子目录
对于文件、子目录可以修改名字、移动
如果没有这个权限,那么将无法进行以上操作:
[jack@VM-0-14-centos /]$ ls -ld root
dr-xr-x---. 5 root root 4096 Jan 26 18:00 root
[jack@VM-0-14-centos /]$ touch /root/aaa.txt
touch: cannot touch `/root/aaa.txt': Permission denied
执行权限对于目录的意义:
有了这个权限,你才可以把这个目录当做工作目录,最近简单的就是cd命令,如果没有这个权限,那么你就无法进入这个目录。
[jack@VM-0-14-centos /]$ ls -ld root
dr-xr-x---. 5 root root 4096 Jan 26 18:00 root
[jack@VM-0-14-centos /]$ cd root
bash: cd: root: Permission denied