Linux学习记录:chmod 修改权限

这篇文章记录下 Linux 中如何使用 chmod 命令修改文件以及目录的权限,也就是读/写/执行 的权限。

1. 背景需求

有时候我们使用 scp 向服务器传输文件时,会提示说 permission denied 。这是因为我们对于需要上传到的目标目录没有 权限。此时需要修改目标目录的读写权限,使其对于所有用户都可写(当然这种做法不推荐),这样我们才能将文件传输上去。

另外一次经历,是之前需要将自己在 windows 中的 rsa keys 传到另外一台 Linux 机器上,这样能实现 rsa keys 的复用,也方便自己在另一台 Linux 机器上能正常向 github 提交代码。

但是,当我们使用 cp 命令将 windows 上的 id_rsaid_rsa.pub 直接拷贝到 ~/.ssh 目录下,然后使用 ssh 时,会提示说 私钥的安全性不够,很容易被访问到。这时候就需要修改私钥文件和公钥文件的权限,以满足要求。

具体需要执行下面两条语句:

1
2
chmod 600 id_rsa
chmod 644 id_rsa.pub

这两条命令有什么含义,继续往后看。

2. chmod 命令的使用

Linux 中我们可以通过 ll 命令来查看文件和目录的权限。这里需要提一下,Linux 中并没有提供 ll 命令,这个命令是通过 alias 实现的。alias 的使用可以参考我上一篇博客:利用 alias 自定义一个删除备份命令

以我自己的服务器 home 目录为例,当我直接输入 ll 命令时,结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ubuntu@VM-0-14-ubuntu:~$ ll
total 64
drwxr-xr-x 7 ubuntu ubuntu 4096 Mar 7 10:30 ./
drwxr-xr-x 3 root root 4096 Aug 8 2018 ../
drwxrwxr-x 3 ubuntu ubuntu 4096 Mar 6 16:01 backup/
-rw-rw-r-- 1 ubuntu ubuntu 233 Mar 6 16:01 .bash_aliases
-rw------- 1 ubuntu ubuntu 3560 Mar 7 10:31 .bash_history
-rw-r--r-- 1 ubuntu ubuntu 220 Aug 8 2018 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3773 May 29 2019 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Aug 9 2018 .cache/
drwx------ 3 ubuntu ubuntu 4096 Aug 9 2018 .gnupg/
drwxr-xr-x 2 root root 4096 Mar 6 08:29 .pip/
-rw-r--r-- 1 ubuntu ubuntu 807 Aug 8 2018 .profile
-rw-r--r-- 1 root root 73 Mar 6 08:29 .pydistutils.cfg
drwx------ 2 ubuntu ubuntu 4096 Mar 6 10:39 .ssh/
-rw-r--r-- 1 ubuntu ubuntu 0 Aug 9 2018 .sudo_as_admin_successful
-rwxrwxrwx 1 ubuntu ubuntu 43 Mar 6 15:27 test_bash.sh*
-rw------- 1 ubuntu ubuntu 8010 Mar 7 10:30 .viminfo

我们也可以单独查看某个文件或目录的权限:

1
ll test_bash.sh

结果:

1
2
ubuntu@VM-0-14-ubuntu:~$ ll test_bash.sh
-rwxrwxrwx 1 ubuntu ubuntu 43 Mar 6 15:27 test_bash.sh*

输出的第一列 -rwxrwxrwx 就表示文件或目录的权限,下面详细解释。

第一位表示文件的类型:

  • - :表示普通文件;
  • d :表示目录,即 directory

后面的 9 位按照 属主 / 组用户(group) / 其它用户 的顺序排列权限,每种用户的权限占据 3 位。

其中:

  • r 表示可 read,用二进制表示为 100,用八进制表示为 4
  • w 表示可 write,用二进制表示为 010,用八进制表示为 2
  • x 表示可 execute,用二进制表示为 001,用八进制表示为 1

如果某个位置为 - 表示该用户不具有此权限。以 drwxr-xr-x 为例:

  • 第一个 rwx 表示 属主 具有 read/write/execute 权限;
  • 第二个 r-x 表示 组用户 具有 read/execute 权限,但是没有 write 权限;
  • 第三个 r-x 表示 其它用户 具有 read/execute 权限,但是没有 write 权限。

drwxr-xr-x 也可以用二进制来表示,即 111-101-101,转换为八进制即 755755drwxr-xr-x 表示同样的意思。

搞清楚了上面的解释,那么当我们需要将一个文件 test.txt 的权限设置成:属主可以 read/write,组用户和其他用户都只能 read 时(用二进制表示为 110-100-100),我们可以这么做:

1
chmod 644 test.txt

最后,让我们再回过头来看背景需求部分介绍的 rsa keys 的权限问题:

1
2
chmod 600 id_rsa
chmod 644 id_rsa.pub
  • 第一行表示将私钥文件 id_rsa 设置为属主可 read/write,组用户和其他用户都不能 read/write/execute,这符合私钥文件的要求,即只有属主能访问到,属主之外的用户都无法访问;
  • 第二行表示将公钥文件 id_rsa.pub 设置为属主可 read/write,组用户和其他用户都能 read。这也符合要求,即属主之外的用户可以利用属主的公钥来加密。

References

Donate comment here