《Linux系统》之"皮毛系列"(四) 用户权限管理

总有人问,Linux系统为什么比windows系统相对安全呢?我们可以总结如下:

(1)使用Linux系统的人数少,尤其在国内,很少有人关注Linux。
(2)因为Linux开源,任何的系统漏洞都会被民间高手,或者是官方人员很快的发现。从漏洞的发现到补丁的放出,时间相当短,没有时间给病毒或者黑客作乱的机会。
(3)然后就是linux的权限管理,linux的权限管理很严格。病毒或者黑客想修改系统文件或者系统日志,除非有管理员密码。所以就算中了病毒,病毒的危害也非常的小,重要的系统文件都不会被破坏。所以发现了病毒稍做处理就搞定了。
(4)还有就是linux系统的程序管理。linux安装程序,基本都是利用程序管理软件,比如ubuntu、debian下的软件中心、centos,fedora和红帽的yum。linux系统安装程序基本上都是用软件管理程序,从程序开发者官网上或者是相应的发行版社区直接下载安装。不会有被恶意篡改的软件被安装到使用者的电脑上。

今天,我们来看一下权限管理的相关知识点......................................................

一、linux系统的用户

Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)的分时操作系统。每当我们使用用户名登录操作系统时,Linux都会对该用户进行认证、授权审计等操作。正因为是多用户的操作系统,常常不可避免的当然还是多个用户在同一时间段内使用同一台主机,因此,用户的隐私权就必须格外的被重视,这就涉及到文件的所有者这个概念了。

1、文件的所有者

文件的所有者(英文:owner),一般指的是文件的创建者;当某个用户新创建了一个文件,那么这个用户天生就是这个文件的拥有者。再比如,如果这个用户使用者哪天离职了,在离职前,他也可以使用命令来修改文件的所有者。

文件的所有者,可以很方便的来解决权限问题。比如,你将你的秘密转成文件后,存入到你的主目录中。你总不希望其他人看到你的秘密吧!这个时候,你就可以设置只有文件的所有者才能查看和修改这个文件的内容。即使其他人知道你有这么个“神秘”的文件,由于你的适当设置,他们也无法知道里面的内容。

2、用户组

用户组(英文:group)这个概念设计,其实是用来进一步扩展文件的授权与管理的。特别适合在公司团队开发资源的时候。比如在一台主机上,有10个用户,用户A,B,C,D,E是一个团队,他们在开发一个金融项目,用户H,I,J,K,L是一个团队,在开发一个公司规划项目。团队内部的用户可以互相查看和修改文件内容,而其他团队的用户是不应该查看和修改本团队的文件内容的。因此引用了“用户组”的概念。

拥有了用户组这个概念后,你就可以轻松的设置你所在的用户组的其他成员有能够看和修改你自己的文件内容,非本组成员不能对你的文件查看和修改等等。

3、其他人

除了文件的拥有者,文件的所属用户组之外的用户,我们统称为其他人(英文:others)。你的文件对其他人也可以很好的统一设置相应的权限,比如,可以对除了你和本组成员外的老板,总监等等其他人设置只能查看你的文件的权限。

我们可以使用ls -l来查看文件的所有者,用户组。

二、Linux系统的文件权限

了解了用户和用户之后,接下来,我们要着重学习一下文件的权限如果针对“用户”和“用户组”来设置呢!这一部分格外重要,尤其是对初学者来说,文件的权限和属性是学习Linux的一个相当重要的关卡。如果不明白这一部分的概念,那么你一定不会明白别人在讲什么。当你的屏幕上出现了“Permission denied”的时候,别慌,一定是权限设置问题。

1、Linux文件属性

我们知道,当使用ls -la等命令时,会出现以下七列信息:

michael@admin test]$ ls -l
总用量 4
-rw-rw-r--.    1    michael    michael      0   12月 15 06:27    a.txt
-rw-rw-r--.    1    michael    michael      0   12月 15 06:27    b.java
drwxrwxr-x.    2    michael    michael   4096   12月 15 06:27    test
[    1    ]  [ 2 ]  [  3  ]    [  4  ]   [ 5 ]  [     6     ]    [  7  ]

依次是权限,连接数,所有者,用户组,文件大小,修改时间,文件名

第一列代表这个文件的类型和权限。我们不难发现,它是由10个字符组成的。下面我们来解析一下这10个字符:

第一个字符:代表这个文件的类型,如,d表示目录,-表示普通文件,l表示链接文件等,之前的文章里有讲过【点击进入
接下来的9个字符,每三个为一组。
第一组为文件所有者的权限设置,第二组为本用户组的权限设置,第三组为其他人的权限设置。

在Linux系统中,文件的权限有三种表现形式,分别是“读”,“写”,“执行”,可以总结如下表:

权限 代表字符 对文件的含义 对目录的含义
r 可以查看文件的内容 可以列出目录的内容
w 可以修改文件的内容 可以在目录内进行创建、删除文件
执行 x 可以执行文件 可以进入目录

比如举个例子,见下图:

小贴士:每一组的rwx位置是不会变的,有该权限就显示字符,如果是减号-,就表示无此权限。

2、Linux文件权限的重要性

Linux系统与windows系统的区别就是,每一个文件都加了很多属性,尤其是“用户组”这个概念,这样有什么用途呢?其实,最大的用途在于“数据安全”上。

系统保护的功能:举个例子,在linux系统中,关于系统服务的文件通常只有root才能读写或者是执行,例如/etc/shadow这一个账号管理的文件,该文件内存储了系统中所有账号的数据, 因此是很重要的一个配置文件,当然不能让任何人读取(否则密码会被窃取),只有root才能够来读取。所以该文件的权限被设置成为[ -rw------- ]。

团队开发软件或数据共享的功能:再如你所在的一个软件开发团队,你希望团队成员都可以使用某一些目录下的文件, 而非你团队的其他人不予开放,那么你就可以将团队所需的文件权限设置为[ -rwxrwx--- ]。

未将权限设定妥当的危害:如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞。 例如本来只有root才能做的开关机、新增或删除用户等等的指令,若被你改成任何人都可以执行的话, 那么如果使用者不小心给你重新启动,删除某用户等等操作,那么你的系统就会常常莫名其妙的故障! 而且万一你的用户的密码被其他不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些root的工作!

因此,在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变的!千万注意!接下来我们来处理一下文件属性与权限的变更!

3、如何改变文件属性和权限

我们可以使用以下常用的三个命令来修改文件属性和权限。注意:u表示所有者,g表示用户组,o表示其他人


1)chmod命令

命令原意:change the permissions mode of a file        命令路径:/bin/chmod             执行权限:所有用户
功能描述:改变文件或目录权限
语法:chmod [{ugo}{+-=}{rwx}] [文件或目录]
                       [mode=421] [文件或目录]
案例1:  赋予文件file1所属组写权限
               chmod g+w file1
案例2:取消所有者,用户组,其他人三个部分对file1的写权限
               chmod ugo-w file1
案例3:设定目录dir1为所有用户具有全部权限
               chmod 777 dir1


2)chown命令

命令原意:change  file  ownership                               命令路径:/bin/chown              执行权限:root
功能描述:改变文件或目录的所有者
语法:chown [用户] [文件或目录]
案例1:改变文件file1的所有者为nobody
           chown  nobody  file1
案例2:将install.log的拥有者与群组改回为root 
            chown root:root install.log

chown还可以顺便直接修改群组的名称!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可!

案例3:修改目录dir1及其子目录和文件的拥有者为michael.
           chown -R michael: dir1;
案例4:修改目录dir1的用户组为root
           chown .root dir1

小贴士: 用户和用户组必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。


3)chgrp命令

命令原意:change  file  group ownership                  命令路径:/bin/chgrp                    执行权限:root
功能描述:改变文件或目录的所属组
语法:chgrp [用户组] [文件或目录]
案例1:  改变文件file1的所属组为adm
            chgrp  dam  file1
案例2:修改目录dir1及其子目录和文件的用户组为michael
            chgrp -R michael dir1


4、权限数字    

Linux系统在文件权限上,除了使用“r”,"w","x"这样的字符来代表外,其实也使用了二进制的数字来替代(原则:rwx位置顺序固定,根据位置对应关系,对应三位数的二进制,有权限的位置上为1,无权限的位置上为0),见下表

代表字符 二进制表现形式 十进制数字
r 100 4
w 010 2
x 001 1

于是,我们可以使用权限的数字之和来设置文件的所有者,用户组或其他人的权限。比如6,只能是4与2的和,表示拥有读和写权限,再如3,也只能是2与1的和,表示拥有写和执行的权限。因为所有者,用户组,其他人三个概念在Linux上也是固定顺序,可以表示为ugo,那么就可以使用三个连续的数字来表示对应用户的权限。如:755,表示u为7,g为5,o为5,即所有者有rwx权限,用户组有r_x权限,其他人有r_x权限。

案例1:修改目录dir1为所有用户为全部权限
             chmod 777 dir1
案例2:修改文件file1为所有用户只有执行权限
             chmod 111 file1
案例3:chmod  7  file1     #表示其他人有全部权限,而所有者和用户组没有任何权限。一位数相当于前面有两个0,两位数相当于前面有一个0,   即    7 等价于007, 54等价于054.

5、umask命令

在Linux系统中,创建一个文件总是有一个默认权限的,那么这个权限是怎么来的?其实,这就是umask干的事情。umask设置了用户创建文件的默认权限。不过,umask设置的是权限的“补码”(也称掩码),它与chmod的效果刚好相反,chmod设置的是文件权限码。我们可以在 /etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。

查看系统默认权限补码:

[michael@master 桌面]$ umask
0022
           #  第一个0表示八进制,  后三位022才是真实补码

修改权限补码语法格式:umask  nnn,

[michael@master ~]$ umask nnn         #实际设置时,请将n设置为数字

此时的nnn就是权限的补码。Linux系统规定,不允许用户在创建一个文件时就授予执行权限(创建后,可以使用chmod修改),因此n的最大值为6;而对于目录而言,n的最大值为7。因此:

文件的实际权限为:666-nnn

目录的实际权限为:777-nnn

举个例子,如果我们使用umask命令进行了如此操作:umask  022。那么系统的实际权限就是:

文件默认权限:666 - 022  为644,即 "r-xr--r--".

目录默认权限:777 - 022 为755, 即"rwxr-xr-x".

-------------------------------------------------------------------未完待续,敬请留言------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/Michael__One/article/details/85006165
今日推荐