很多文章教程把Linux用户权限的配置讲得云里雾里的。今天我希望能简单几句话就可以说清楚,或者说可以立刻配置好这些权限。
先上个图:
当执行 ll 命令后,就会自动把当前目录中的文件权限列出来。 比如前面 rwxrwx--- 这类的, 如果前面多一个d ,比如 drwx....这表示是目录。 rwx 这三个字母分别对应 r - 读 w - 写 x - 执行。 另外也可以用数字来表达, 如果用数字 就是 r - 4 w - 2 x - 1 那么你会看到很多文章告诉你如何给一个文件权限最大化时,就直接 chmod 777 ,,, 那777表示什么? 其实就是 4+2+1 = 7 对吧, 就是直接可读,可写,可执行的权限。 那为什么用三组rwx? 那是因为Linux中,把文件权限划分为三个层面, 第一个rwx 表示文件拥有者的权限, 第二个rwx表示所属组的权限,第三个rwx则表示其它用户。 所以如果直接赋值 777 这种, 就相当于不管是谁,都给最大权限。 相当于 421 421 421 这样就写成了777. 上图中的第一个rwx放在红框中就是拥有者的权限,第二个放在绿框就是所属组的权限,第三个蓝框就是其它人的权限,后面有个加号的意思,是这个目录单独配置了acl权限,后面会讲
好,那再说一下常用的两个修改权限的命令。
这个用来修改文件的拥有者, 比如上面图上看到第五个红框root就是拥有者,第六个绿框则是所属组名, 如果你用这个命令修改成别人, 它就变了。
> chown username filename
那所属组如何改呢? 用这样的命令
> chown username:usergroup filename/foldername
okay, 那我们可以修改拥有者,所属组,也可以随意修改拥有者,所属组,其他人对应的权限, 但好像还不够精细? 如何让其它组同时拥有权限呢? 或者其它用户单独拥有权限? 那这时就要用到ACL权限控制, 至于什么是ACL,这里不科普了, 但是介绍几个常用的acl命令, 可以快速配置更精细化的权限。(哦,如果你系统没有acl ,你可能需要先安装一下,比如Ubuntu中, apt install acl),
比如一般用这个来配置某个组,或者某个用户针对某个文件,某个目录的特殊权限
针对组
> setfacl -m g:groupname:rwx filename/foldername
针对用户
> setfacl -m u:username:rwx filename/foldername
这个命令可以查看某个文件或者文件夹当前的 acl 权限
> getfacl filename/foldername
另外前面用的chown, chmod 其实都是互相配合使用的,当chown, chmod不能满足你权限管控需求时,再考虑增加acl权限
另外这里有个提示,很多人可能一开始配置时,很容易理解为不管目录还是文件,如果想配置成只读,就配置为 r-- 这种, 比如 setfacl -m u:username:r-- file/folder 但这里一定注意,只有文件才可以这样配置,如果你目录配置成r-- 这个权限,这个用户是无法访问的,提示permission deny, 为什么呢? 因为在Linux中浏览目录需要可执行的权限。。具体原因建议去搜一下。所以针对目录的只读,其实是r-x 这种配置
再补充一些,因为权限是针对用户的, 所以其实创建用户时也有一个重要的概念,就是在Linux中,如果你直接用 adduser 这样去创建用户,会自动加入到一个跟用户同名的组里,所谓的主组,如果你把这个用户再加入到其它组, 它也可以加入,但变成了附属组, 那如何让用户一开始就加入到主组当中呢?
这两条命令表示, 先创建一个用户,并且指定他的主组,-m 表示要为这个用户在home目录创建自己的文件夹, -s /bin/bash 表示要让这个用户登录能够具备使用shell的权限(如果你不加这个,你会发现这个用户登录后只有一个$符号,什么都做不了), 然后还需要单独为用户配置密码(不配置密码,是无法登录的)。。。。 如果你直接 useradd 它会自动提示你配置密码,但同时也会自动给你生成用户同名的组,让你感到很奇怪。
sudo useradd -m -s /bin/bash username -g groupname
sudo passwd
好了,,,,希望这篇文章能帮到你。 高手请回避,都是给新手小白看的。