Linux系统的权限管理
Linux系统是一个多用户多任务的操作系统,多用户是指系统资源可以被不同用户各自拥有,即每个用户对自己的资源有特定的权限,用户之间互不影响。Linux系统有一套权限管理机制,文件不允许非授权用户访问或修改。这种机制的实现是通过用户和组的形式实现的。
5.1 Linux安全机制
账户管理是Linux安全机制的核心部分。登录Linux系统的用户都会被分配一个的用户账户。用户对系统上文件的访问权限取决于他们登录系统时使用的账户。每个用户的权限是通过创建用户时分配的用户ID来实现跟踪的,每个用户的UID是唯一的。而用户登录系统时使用的不是UID而是用户名和相应的密码。
在Linux系统中,通过特定的文件跟踪和管理系统上的用户账户等信息,这个文件是/etc/passwd。
/etc/passwd文件:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin … rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin yarn:x:500:500:yarn:/home/yarn:/bin/bash |
Linux系统通过/etc/passwd文件将用户的登录名对应到用户的UID值,如:root用户的UID值为0,yarn用户的UID值为500。这个文件包含了登录系统用户的相关信息。但是需要注意的是,/etc/passwd文件中除了登录系统的用户信息外,Linux系统会为特定的功能组件创建不同的用户账户,这些账户不是正真意义上的用户账户,通常被称作系统账户,是系统上运行的各种服务进程访问资源时要用到的特殊账户。注意:所有运行在后台的服务都需要用一个系统用户账户首先登录到Linux系统上。
Linux系统预留了500以下的值作为备用系统账户的UID值,普通用户账户的UID值从500开始。如:yarn用户的UID值为500。同样,为了系统的安全,一些系统服务要使用特定的UID才能正常工作。
/etc/passwd文件中包含以下信息:
字段 |
说明 |
登录用户名 |
yarn |
用户密码 |
x 注:在其他文件中加密保存,此处是占位符 |
用户账户ID:UID |
500 |
用户账户组ID:GID |
500 |
用户全名或备注 |
yarn |
用户默认工作目录 |
/home/yarn |
用户的默认Shell程序 |
/bin/bash |
可以看到,账户的密码都设置成了x,这不是正真的密码,只是一个占位符。在Linux系统中,系统将用户账户的密码保存到了另一个单独的文件/etc/shadow中。只有特定的程序才能访问这个文件,如用户登录系统时。
对于/etc/passwd文件,不要手动修改或添加用户信息。因为这个文件是系统读写的,手动添加或修改账户信息可能会找出系统登录失败。
通过/etc/shadow文件系统对用户的登录密码进行管理和保护。
/etc/shadow:
root:$6$MqHv7L6nSiQpy7sm$O61Sd1Taw7WW0SzpXzWDHxcDz6UAv95jn43PipDYqFXdyJ6ITsEF45.ioMcuWyyTKUXErg/jPwHNLXTZrRNP5/:16736:0:99999:7::: bin:*:15628:0:99999:7::: daemon:*:15628:0:99999:7::: adm:*:15628:0:99999:7::: lp:*:15628:0:99999:7::: … rpcuser:!!:16736:::::: nfsnobody:!!:16736:::::: gdm:!!:16736:::::: sshd:!!:16736:::::: tcpdump:!!:16736:::::: yarn:$6$urFnNzBVwCHO7zwk$PW9oqYo0q.ZM3iyr5jDDu8Mng3o820geQCv4EoH.qY1v0d5easqDnQ.e/8NYdl8/gUNw9T/4QpK7rq4to0ncS0:16736:0:99999:7::: |
注意:只有root用户才有权限访问/etc/shadow文件,这比/etc/passwd文件更加安全。
/etc/shadow文件字段信息:
字段 |
说明 |
登录用户名 |
yarn |
加密后的密码 |
|
1970.1.1到当前天数 |
16736 |
多少天后才能更改密码 |
0 |
多少天后必须更改密码 |
99999 |
密码过期前提前多少天提醒用户更改密码 |
7 |
密码过期后多少天禁用用户账户 |
|
用户账户被禁用的日期 |
|
预留 |
5.2 用户管理
5.2.1 添加新用户
在Linux中添加新用户的命令是useradd,这个命令可以创建一个新用户账户并且创建用户的工作目录。用useradd命令创建新用户使用的是系统默认的系统配置,通过下面的命令可以看到默认情况下创建用户账户时的默认配置信息。
命令:
useradd -D |
控制台显示:
GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes |
字段含义:
默认值 |
说明 |
GROUP=100 |
新用户会添加到GID为100的公共组 |
HOME=/home |
新用户的工作目录在/home目录下 |
INACTIVE=-1 |
新用户的账户过期后不会被禁用 |
EXPIRE= |
新用户不设置过期日期 |
SHELL=/bin/bash |
新用户的默认Shell解释器 |
SKEL=/etc/skel |
系统会将/etc/skel目录下的文件复制到用户工作目录下 |
CREATE_MAIL_SPOOL=yes |
为新用户创建接收邮件的文件夹 |
注意:创建用户时,系统会将/etc/skel目录下的文件复制到新用户的工作目录下。下面是/etc/skel目录下的文件。
/etc/skel目录下的文件:
drwxr-xr-x. 4 root root 4096 2月 11 11:51 . drwxr-xr-x. 111 root root 12288 2月 20 09:38 .. -rw-r--r--. 1 root root 18 2月 22 2013 .bash_logout -rw-r--r--. 1 root root 176 2月 22 2013 .bash_profile -rw-r--r--. 1 root root 124 2月 22 2013 .bashrc drwxr-xr-x. 2 root root 4096 11月 12 2010 .gnome2 drwxr-xr-x. 4 root root 4096 10月 28 22:12 .mozilla |
注意:创建新用户需要使用root用户的权限,命令如下:
创建一个新用户:
useradd user01 useradd -m user01 |
useradd命令常用的参数:
参数 |
说明 |
-g GID |
为账户指定组 |
-p password |
为用户同时设置密码 |
-u UID |
为用户指定UID |
创建新账号时通常创建工作目录,有些Linux版本需要参数-m才会创建账号的工作目录。
5.2.2 删除用户
删除用户需要使用userdel命令,默认情况下删除账户不同时删除工作目录,如果想同时删除账户的工作目录,需要参数-r,命令如下:
删除用户:
userdel user01 userdel -r user01 |
需要注意的是,在删除账户时,要确认工作目录下是否有重要文件,以防删除重要文件。
5.2.3 修改用户
修改用户相对较复杂,Linux提供了不同的命令用来修改账户信息,如下表:
命令 |
说明 |
usermod |
修改账户字段的值 |
passwd |
修改账户密码 |
usermod命令可以修改/etc/passwd文件中大多数的字段,只要命令后面跟上相应的参数就可以了。如下所示。
修改账户登录名:
usermod -l newName oldName |
将账户登录名user01修改为userbak。
usermod命令常用的参数:
参数 |
说明 |
-l newloginname |
修改登录名 |
-L |
锁定用户 |
-U |
解锁用户 |
passwd命令用来修改账户的登录密码,使用方式较简单,如果修改当前用户的密码,直接输入passwd命令即可,如果要修改其他用户密码,需要root用户的权限,命令如下。
修改用户登录密码:
passwd passwd user01 |
5.3 用户组管理
用户账户对单个用户管理相对较方便,但是对于多个相同类型的账户同时进行管理就不太方便了,所以有了组的概念。组允许多个用户共享一组共享的权限,用相同的权限访问系统上的文件或目录。
不同的Linux版本略有不同,有的系统会将所有的用户同属于一个组,这样出现的问题是一个用户的文件同组的其他用户都可以访问。有的系统为每个用户创建一个组,这样更安全些。在系统中每个组有唯一的GID和组名。类似于/etc/passwd文件,系统上所有的组信息都保存到/etc/group文件中,如下所示:
/etc/group:
root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon sys:x:3:bin,adm adm:x:4:adm,daemon … tcpdump:x:72: slocate:x:21: yarn:x:500: |
/etc/group文件也有四个字段组成,组名称、组密码、GID和属于本组的用户。
5.3.1 创建组
创建一个新组时,默认情况下没有用户属于这个组,如果需要将用户添加到新组中,需要使用usermod命令。创建新组的命令groupadd,命令格式如下。
创建一个新组group01:
groupadd group01 groupadd group02 -g 800 |
创建新用户并指定组:
useradd user02 -g group01 |
为yarn用户添加附加组:
usermod -G group01 yarn |
注意:需要使用root权限。
5.3.2 修改组
因为组信息相对较少,所以通过groupmod命令可以修改组名称和GID,命令如下:
修改组名称:
groupmod -n newName oldName |
修改GID:
groupmod -g 550 group01 |
5.3.3 删除组
删除组的命令是groupdel,使用较简单,但是删除组时要谨慎,如果组中已经存在用户,要先删除组中的所有用户后才能删除组。
删除一个组:
groupdel group01 |
5.4 文件权限说明
首先执行ls命令,显示当前目录下的文件信息列表。
命令格式:
ls -l |
控制台显示:
drwxrwxr-x. 3 yarn yarn 4096 2月 16 17:06 bash01 -rwxrw-r--. 1 yarn yarn 224 2月 16 17:07 bash01.sh drwxrwxr-x. 2 yarn yarn 4096 12月 24 10:01 class20151221 drwxrwxr-x. 4 yarn yarn 4096 1月 20 12:05 hdfs01 drwxrwxr-x. 3 yarn yarn 4096 11月 24 14:40 mapreduce01 drwxrwxr-x. 3 yarn yarn 4096 11月 3 19:59 mapreduce02 |
在Linux系统中每一个文件和目录都有相应的访问许可权限。我们可以用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为可读、可写、和可执行三种,分别以r w x 表示,其含义为:
对象 |
r |
w |
x |
文件 |
可以读取文件内容,如使用cat命令显示文件内容 |
可以通过vi编辑器编辑文件内容 |
文件的执行权限 |
目录 |
可以浏览目录下的文件信息内容,可以拷贝目录下的文件到其他目录 |
可以创建文件或目录,删除文件或目录,剪切文件或目录 |
是否有权限进入目录 |
文件和文件夹有三类用户:
1. 文件所有者
2. 文件所有者所在的组
3. 其他临时用户
Linux文件的详细显示格式说明:
例:下面两条信息一个是目录文件信息,一个是文件信息。
drwxrwxr-x. 3 yarn yarn 4096 2月 16 17:06 bash01 -rwxrw-r--. 1 yarn yarn 224 2月 16 17:07 bash01.sh |
信息的第一列内容是:drwxrwxr-x和-rw-r--r--,说明文件的读写权限,共有十个字符的组成。第一位是文件的类型,d代表目录,-代表文件。第二位到第四位是文件所有者的权限。r是读权限,w是写权限,x是执行权限。第五位到第七位是文件所属组的权限,第八位到第十位是临时用户的权限。第三列是文件的所属用户和所属组。第四列是文件的大小显示的是字节数。第五列是最后修改时间。最后一列是文件的名称。
5.5 文件权限管理
如果想修改一个文件或目录的已有权限,首先文件的属主是当前用户或者是超级用户root,如果是其他用户的文件是没有权限进行修改的。如果要修改文件的权限,需要使用chmod命令,有两种使用方式,下面进行说明。
命令格式一:
chmod [用户] [运算符] [权限] 文件/目录名 |
用户:
u 表示文件所有者 g 表示同组用户 o 表示其它用户 a 表示所有用户 |
运算符:
+ 添加某个权限 - 取消某个权限 = 赋予给定的权限并取消原有的权限 |
权限:
r 可读 w 可写 x 可执行 |
给/home/yarn目录下的hadoop.txt文件所有者和所在组添加读写权限
chmod ug+rw /home/yarn/hadoop.txt |
取消临时用户的执行权限
chmod o-x /home/yarn/hadoop.txt |
给临时用户重新设置读权限
chmod o=r /home/yarn/hadoop.txt |
命令格式二:
chmod [权限] 文件/目录名 |
第二种方式更加简单,采用二进制方式设置:
文件所有者 |
文件所有者所在组 |
其他临时用户 |
值 |
||||||
r |
w |
x |
x |
r |
w |
x |
r |
w |
/ |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
777 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
750 |
同时设置三种类型用户的权限
chmod 777 /home/yarn/hadoop.txt |
同时设置三种类型用户的权限
chmod 750 /home/yarn/hadoop.txt |
对目录进行权限的设置,如果目录内的文件同时设置权限,需要使用递归方式,需要使用参数-R。
同时将目录下的所有文件设置权限
chmod -R 777 /home/yarn/dir |
第二种方式更加简单。
5.6 文件所属管理
改变文件的属主需要使用root用户的权限,使用的命令是chown,下面进行说明。
命令格式:
chown[参数] 用户名 文件/目录名 chown[参数] 用户名:所属组名 文件/目录名 |
更改文件的所有者,将文件 hadoop.txt的所有者更改yarn。用户yarn可以使用 chmod 命令允许或拒绝其他用户访问 hadoop.txt文件
chown yarn /home/yarn/hadoop.txt |
将/home/yarn目录下的dir1目录的所有者和所有组更改成yarn和yarngroup,需要注意dir1目录下的文件所有者和所有组不会更新
chown yarn:yarngroup /home/yarn/dir1 |
将/home/yarn目录下的目录dir1的所有者和所有组更新为yarn和yarngroup,参数-R递归实现dir1目录下的所有文件的所有者和所有组都进行了修改
chown -R yarn:yarngroup /home/yarn/dir1 |