我相信就算再新鲜粉嫩的小白也听说过「多用户系统」这个概念。
多用户系统,放到 Windows 上的表象就是 Administrator 和 Guest,放到 Android 上就是获取 root,放到 iPhone 上就是越狱。这一系统是 Unix 的标志性创举,而作为 Unix 的继承者和发扬者 Linux 自然也全面接收了过来。用正常人类的逻辑来想,计算机产生之初就是为了计算的一个大型工具,那自然不可能只让一个人用对吧。
多用户系统就是权限系统的基本立足点,如果就你自己,那要权限干嘛。权限的初衷在于让两个用户不能同时写入一个文件,因为早期计算机两个人类同时操作一块内存地址会崩溃。权限的目的就是让每个用户的文件只能由每个用户完全操作,其它用户只能围观并频频叫好。
用过 Android 的都知道 Linux 最大的那位 boss 叫 root,有了它你就有了一切。但是这种上帝视角是十分不安全的,如果别人也搞到了那对你来讲就是一场灾难。所以 Linux 的做法就是把容易中毒受攻击的行为和正常的系统操作分隔开来使用不同的账户执行。比如你想盗普通用户密码?抱歉密码存在系统文件,只能 root 操作。
Linux 的权限表示如下:
-rwxrwxrwx file.txt
一共 10 位,分法是:1, 3, ,3 ,3。
第一位表示究竟是文件还是文件夹,默认为文件,所以 - 表示空位,如果是文件夹 (directory),则显示为 d。这是不需要你去管的。是什么就是什么。
而之后的 3 组 3 位,第一个组为该文件的所有者,第二组为该文件所有者所在的用户组 (group),第三组为所有其它用户。比如我是在 marguerite:users,那么我对我自己的文件能进行什么操作那就要看 2-4 位的权限设置 ;daemon:users 它和我的用户组相同,它的权限要看 5-7 位 ; 而 nobody:nogroup 和我没一点联系,它的权限就要看 8-10 位。
而每一组的三位分别是:读取 (read),写入 (write),执行 (execute)。
所以上面的 10 位数字的意思就是:这是个文件,所有者可读可写可执行,所有者所在组的其它用户可读可写可执行,所有其它用户可读可写可执行,英语里有个名词叫做 world-writable files 说的就是这类完全没节操的文件。
而每次都这么去输入 10 个字母是不是有点累啊?于是就采用了数字来替代 r, w 和 x。
其中读取权限对应的数字为 4, 写入权限对应的数字为 2, 执行权限对应的数字为 1。很简单,你需要读的文件肯定最多,写的其次,而需要执行的只有 “.exe” 对吗。
所以上面的文件换成数字表达就是:
attr file
777 file.txt
操作权限的命令是 chmod。于是我们可以这样设置权限:
chmod 644 file.txt
这样除了你别人都只能读。而对可执行文件你还需要让其它人也能执行啊,于是所有数字均加 1, 变成:
chmod 755 file.bin
而有时你会发现改不了权限,因为什么呢,因为这不是你的文件,人家没有允许你修改 (w),你的身份现在是位于第二组甚至是第三组的位置。这时我们就要使用 sudo 把 root 上帝视角召唤出来。
而你又说了,我怎么才能让它为我所有呢?
答案是使用 chown 命令。
sudo chown marguerite:users file.txt
而对文件夹进行操作还可以加上 -R,表示 reverse (递归),这样文件夹里面的文件也会变成你的。
sudo chown -R nobody:nogroup /srv/www/htdocs/forum.suse.org.cn/
不一定非要在终端里这么做,主流桌面环境如 KDE/GNOME 等的文件交互菜单 (Context Menu,即右键菜单) 也都提供了改权限这个功能,但你一定要是文件的所有者。但绝大多数情况下,正因为我们不是所有者所以才需要去改权限。因为终端适用的环境更广阔一些。