使用者与群组
Linux最优秀的地方之一就在于他的多用户多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各有read/write/execute等权限。
Linux使用者身份与群组记录的文件:
在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地啰!不要随便删除这三个文件啊!
文件权限概念
下面内容建议切换到root账号进行操作:
[withong@withong ~]$ su - root
密码:
上一次登录:五 2月 21 17:22:53 CST 2020pts/0 上
[root@withong ~]#
查看所有文件(包括隐藏):
ls -al
[1][2][3][4][5][6][7] <=上面七个字段的意思
[权限][链接][拥有者][群组][文件大小][修改日期][文件名]
[1] 代表这个文件的类型与权限(共十个字符)
- 第一个字符:文件的类型
- 接下来的九个字符中,以三个为一组,且均为“rwx” 的三个参数的组合;[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute); 没有权限,就会出现减号[-]
[2]表示有多少文件名链接到此节点(i-node)
[3]表示这个文件(或目录)的“拥有者帐号”
[4]表示这个文件的所属群组
[5]为这个文件的容量大小,默认单位为Bytes
[6]为这个文件的创建日期或者是最近的修改日期
[7]为这个文件的文件名(文件名前多一个点’.'则为隐藏文件)
思考题一
假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个
文件的拥有者与其相关的权限为何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答:
- 文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个帐号可以存取此文件,其他人则仅能读此文件;
- 另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup。
- test1 可以针对此文件具有可读可写可执行的权力;
- 而同群组的test2, test3两个人与test1同样是testgroup的群组帐号,则仅可读可执但不能写(亦即不能修改);
- 至于没有加入testgroup这一个群组的其他人则仅可以读,不能写也不能执行!
思考题二
承上一题如果我的目录为下面的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
答:
- 文件拥有者test1[rwx]可以在本目录中进行任何工作;
- 而testgroup这个群组[r-x]的帐号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
- 至于other的权限中[r–]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!
改变文件属性与权限
常用指令:
- chgrp :改变文件所属群组
- chown :改变文件拥有者
- chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
chgrp:change group 缩写
注意:被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!
先man下:
在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: `testing' <== 发生错误讯息啰~找不到这个群组名~
文件的群组被改成users了,但是要改成testing的时候, 就会发生错误
chown:change owner缩写
注意:使用者必须是已经存在系统中的帐号,也就是在/etc/passwd这个文件中有纪录的使用者名称才能改变
范例:将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:将 initial-setup-ks.cfg 的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
此外,chown也能单纯的修改所属群组呢! 例如“chown .sshd initial-setup-ks.cfg”就是修改群组
chown或chgrp的使用示例:
你今天要将Linux.txt这个文件拷贝成为Linux_test.txt文件名,且是要给root这个人,你可以这样做:
[root @withong 桌面]$ cp Linux.txt Linux_test.txt
[root @withong 桌面]$ ls -al Linux*
-rw-rw-r--. 1 root root 38 2月 23 15:21 Linux_test.txt
-rw-rw-r--. 1 root root 38 9月 14 19:24 Linux.txt
由于复制行为(cp)会复制执行者的属性与权限,所以!怎么办?.Linux_test.txt还是属于root所拥有, 如此一来,即使你将文件拿给withong这个使用者了,那他仍然无法修改的(看属性/权限就知道了吧), 所以你就必须要将这个文件的拥有者与群组修改一下啰!
chmod:更改文件权限
权限的设置方法有两种,分别可以使用数字或者是符号来进行权限的变更
-
数字类型改变文件权限
权限的分数对照表
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
所以等一下我们设置权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:[root@withong ~]# chmod [-R] xyz 文件或目录 选项与参数: xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。 -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
在实际的系统运行中最常发生的一个问题就是,常常我们以vim编辑一个shell的文字批处理文件后,他的权限通常是 -rw-rw-r-- 也就是664,如果要将该文件变成可可执行文件,并且不要让其他人更改,那么就需要-rwxr-xr-x这样的权限,此时就得要下达:“chmod 755 test.sh”的指令啰!
-
符号类型改变文件权限
借由u, g, o来代表三种身份的权限!此外,a则代表all亦即全部的身份!那么读写的权限就可以写成r, w, x,也就是可以使用下面的方式来看:| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |
假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
[root@study ~]# chmod u=rwx,go=rx .bashrc #注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空白字符! [root@study ~]# ls -al .bashrc -rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:
[root@study ~]# ls -al .bashrc -rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc [root@study ~]# chmod a+w .bashrc [root@study ~]# ls -al .bashrc -rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
[root@study ~]# chmod a-x .bashrc [root@study ~]# ls -al .bashrc -rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc [root@study ~]# chmod 644 .bashrc # 测试完毕得要改回来喔!
目录与文件之权限意义
现在假设“文件是一堆文件数据夹”,所以你可能可以在上面写/改一些数据。而“目录是一堆抽屉”,因此你可以将数据夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿出/放入数据夹喔!现在让我们汇整一下数据:
对一般文件来说,rwx 主要是针对“文件的内容”来设计权限,对目录来说,rwx则是针对“目录内的文件名列表”来设计权限。
例题 有个目录的权限如下所示:
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh
系统有个帐号名称为vbird,这个帐号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中?
答:
vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限,亦即vbird没有这个抽屉的钥匙啦!因此vbird并不能切换到此目录内!【能不能进入某一个目录,只与该目录的x权限有关啦!】
例题 假设有个帐号名称为dmtsai,他的主文件夹在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。若在此目录下有个名为the_root.data的文件,该文件的权限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
请问dmtsai对此文件的权限为何?可否删除此文件?
答:
由于dmtsai对此文件来说是“others”的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容。但是由于这个文件在他的主文件夹下, 他在此目录下具有rwx的完整权限,因此对于the_root.data这个“文件名”来说,他是能够“删除”的!
注意:w也具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录,是个很重要的参数
使用者操作功能与权限案例
假设两个文件名,分别是下面这样:
- /dir1/file
- /dir2
假设你现在在系统使用dmtsai这个帐号,那么这个帐号针对 /dir1,/dir1/file1,/dir2 这三个文件名来说,分别需要“哪些最小的权限”才能达成各项任务?
上面很多动作中,你只要具有x即可(打开摸黑也能拿到呀)!r是非必备的(抽屉里的灯光)!只是,没有r的话,使用[tab] 时,他就无法自动帮你补齐文件名了!