Linux文件权限读书笔记

来源:互联网 发布:侠客风云传mac移植 编辑:程序博客网 时间:2024/06/07 00:48

一、Linux的安全性

1/etc/passwd文件

将用户的登录名匹配到对应的UID,举例:

[test@localhost ~]$ head -6 /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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

字段解释如下:

登录用户名:(1)用户密码:(2)用户账户的UID:(3)用户账户的GID:(4)用户账户的文本描述(称为备注字段):(5)用户HOME目录的位置:(6)用户的默认shell

 

2/etc/shadow文件

/etc/shadow文件能对Linux系统如何管理密码有更多的控制。只有root用户才能访问/etc/shadow文件,这让它看起来比/etc/passwd安全许多。

/etc/shadow文件为系统的每个用户账户保存一条记录。如下:

[root@localhost ~]# tail -6 /etc/shadow

sshd:!!:16749::::::

tcpdump:!!:16749::::::

yuanmin:$1$L03S.Oze$8aQnQEbZ2rHKWVljX7xAF0:16749:0:99999:7:::

test:$1$Al1RAGlM$LIDybaXIB/WjAe71Oy2al.:16813:0:99999:7:::

test1:!!:16813:0:99999:7:::

test2:!!:16813:0:99999:7:::

字段解释如下:

1)与/etc/shadow文件中的登录名对应的登录名:加密后的密码:(2)自197011日(上次修改密码的日期)到当天的天数:(3)多少天后才能更改密码:(4)多少天后必须更改密码:(5)密码过期前提前多少天提醒用户更改密码:(6)密码过期后多少天禁用账户:(7)用户账户被禁用的日期,用自197011日到当天的天数表示:(8)预留字段,给将来使用

 

3、添加新用户

(a) useradd –D

useradd命令加-D参数来查看你的Linux系统的系统默认值

[root@localhost ~]# useradd –D或者 /user/sbin/useradd –D

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

字段解释:

1)新用户会被添加到GID100的公共组;

2)新用户的HOME目录将会位于/home/loginname;

3)新用户账户密码在过期后不会被禁用;

4)新用户账户未被设置为某个日期后就过期;

5)新用户账户将bash shell作为默认的shell

6)系统会将/etc/skel目录下的内容复制到用户的HOME目录下;

7)系统为该用户账户在mail目录下创建一个用于接收邮件的文件。

 

(b) useradd –m test  #创建test账户

[root@localhost ~]# useradd -m test

[root@localhost ~]# ls -al /home/test  #查看home目录

total 32

drwx------. 4 test test 4096 Jan 13 09:33 .

drwxr-xr-x. 6 root root 4096 Jan 13 09:17 ..

-rw-------. 1 test test    5 Jan 12 20:17 .bash_history

-rw-r--r--. 1 test test   18 Dec  2  2011 .bash_logout

-rw-r--r--. 1 test test  176 Dec  2  2011 .bash_profile

-rw-r--r--. 1 test test  124 Dec  2  2011 .bashrc

drwxr-xr-x. 2 test test 4096 Nov 12  2010 .gnome2

drwxr-xr-x. 4 test test 4096 Nov 11 03:07 .mozilla

 

(c)useradd –D –s /bin/tsch  #举例:更改默认值

 

4、删除用户

userdel命令,可以从系统中删除用户

a)默认情况下,userdel只会删除/etc/passwd文件中的用户信息,不会删除系统中属于该账户的任何文件

b)如果加上-r参数,userdel会删除用户的HOME目录以及mail目录。然后,系统上仍可能存有归于已删除用户所有的其它文件。这在有些环境中会造成问题。

举例:

[root@localhost ~]# /usr/sbin/userdel -r test

userdel: user test is currently logged in

如何解决?

方案一:重启,重新执行上面语句;

[root@localhost ~]# userdel -r test

方案二:待续

 

5、修改用户

常用命令:usermodpasswd

1usermod

参数说明:

-l:用来修改用户账户的登录名;

-L:用来锁定账户,这样用户就无法登录了;

-p:用来修改账户密码

-U:用来接触锁定,接触后用具就可以登录了

2passwd

改变用户密码的一个简便方法就是passwd命令:

[root@localhost home]# passwd test

Changing password for user test.

New password:

BAD PASSWORD: it is WAY too short

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updated successfully.

 

6、查看

查看/etc/passwd文件记录,可以看到如下结果

[root@localhost home]# grep test /etc/passwd

test1:x:502:502::/home/test1:/bin/bash

test2:x:503:503::/home/test2:/bin/bash

test:x:504:504::/home/test:/bin/bash

注:

1)grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

2)语法与举例

[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename

选项与参数:

-a :将 binary文件以 text文件的方式搜寻数据

-c :计算找到 '搜寻字符串'的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串'内容的那一行!

--color=auto :可以将找到的关键词部分加上颜色的显示喔!

举例:

[root@localhost home]# grep --color=auto test /etc/passwd

test1:x:502:502::/home/test1:/bin/bash

test2:x:503:503::/home/test2:/bin/bash

test:x:504:504::/home/test:/bin/bash

 

二、使用Linux组

1/etc/group文件

组信息文件,查看语法:

[root@localhost home]# tail -6 /etc/group

tcpdump:x:72:

slocate:x:21:

yuanmin:x:500:

test1:x:502:

test2:x:503:

test:x:504:

字段解释:

1)组名:(2)组密码:(3GID:属于改组的用户列表

2、创建新组

groupadd命令用来在系统上创建新组:

[root@localhost home]# /usr/sbin/groupadd shared  #创建新组shared

[root@localhost home]# tail -6 /etc/group   #查看

slocate:x:21:

yuanmin:x:500:

test1:x:502:

test2:x:503:

test:x:504:

shared:x:505:

[root@localhost home]# /usr/sbin/usermod -G shared test  #添加用户到组

[root@localhost home]# /usr/sbin/usermod -G shared test1  #添加用户到组

[root@localhost home]# tail -6 /etc/group  #查看

slocate:x:21:

yuanmin:x:500:

test1:x:502:

test2:x:503:

test:x:504:

shared:x:505:test,test1

3、修改组

    groupmod命令可以修改已有组的GID(加-g参数)或组名(加-n参数):

[root@localhost home]# /usr/sbin/groupmod -n sharing shared  #将组名shared修改为sharing

[root@localhost home]# tail /etc/group

[root@localhost home]# tail -6 /etc/group

slocate:x:21:

yuanmin:x:500:

test1:x:502:

test2:x:503:

test:x:504:

sharing:x:505:test,test1

 

三、理解文件权限

1、使用文件权限符

举例:

[root@localhost home]# ls -l

total 16

drwx------.  4 test    test    4096 Jan 13 10:15 test

drwx------.  4 test1   test1   4096 Jan 13 09:16 test1

drwx------.  4 test2   test2   4096 Jan 13 09:17 test2

drwx------. 28 yuanmin yuanmin 4096 Jan 13 10:14 yuanmin

1)输出结果的第一个字段是描述文件和目录权限的码

-:代表文件;

d:代表目录

l:代表链接

c:代表字符型设备

b:代表块设备

n:代表网络设备

2)之后33字节码,每一组三字符码表示三重访问权限

r:代表对象是可读的

w:代表对象是可写的

x:代表对象是可执行的

如果没有某种权限,在该权限位会出现单破折线。这3组三字码分别对应对象的3个安全级别:

1)对象属主;

2)对象属组;

3)系统其他用户

 

2、默认文件权限

1umask命令用来设置用户创建文件和目录的默认权限:

[test2@localhost ~]$ touch newfile  #创建文件

[test2@localhost ~]$ ll    #查看权限

total 0

-rw-rw-r--. 1 test2 test2 0 Jan 13 11:05 newfile

 2umask命令可以显示和设置这个默认权限:

[test2@localhost ~]$ umask

0002

注:umask值只是个掩码。它会屏蔽不想授权该安全级别的权限

3)可以用umask命令为默认umask设置指定一个新值:

[test2@localhost ~]$ umask 0022 #指定新值

[test2@localhost ~]$ touch newfile1  #创建文件

[test2@localhost ~]$ ll     #查看权限

total 0

-rw-rw-r--. 1 test2 test2 0 Jan 13 11:05 newfile

-rw-r--r--. 1 test2 test2 0 Jan 13 11:11 newfile1

[test2@localhost ~]$ mkdir newdir  #创建目录

[test2@localhost ~]$ ll  #查看权限,可见对目录也同样适用

total 4

drwxr-xr-x. 2 test2 test2 4096 Jan 13 11:12 newdir

-rw-rw-r--. 1 test2 test2    0 Jan 13 11:05 newfile

-rw-r--r--. 1 test2 test2    0 Jan 13 11:11 newfile1

 

四、改变安全性设置

1、改变权限

chom命令用来改变文件和目录的安全性设置。chmod命令的格式如下:

chom options mode file

     mode参数后可跟8进制模式或符号模式来设置安全性设置。

18进制模式权限设置

8进制模式设置非常直接,直接用期望赋予文件的标准的3位八进制权限码:

[test2@localhost ~]$ ll   #修改前权限查看

total 4

drwxr-xr-x. 2 test2 test2 4096 Jan 13 11:12 newdir

-rw-rw-r--. 1 test2 test2    0 Jan 13 11:05 newfile

-rw-r--r--. 1 test2 test2    0 Jan 13 11:11 newfile1

[test2@localhost ~]$ chmod 760 newfile #修改权限

[test2@localhost ~]$ ll      #修改后权限查看

total 4

drwxr-xr-x. 2 test2 test2 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2 test2    0 Jan 13 11:05newfile

-rw-r--r--. 1 test2 test2    0 Jan 13 11:11 newfile1

附:

对文件,目录权限采用八进制方式的来置标志

1. 0 4 0 0 文件属主可读

2. 0 2 0 0 文件属主可写

3. 0 1 0 0 文件属主可执行

4.

5. 0 0 4 0 属组用户可读

6. 0 0 2 0 属组用户可写

7. 0 0 1 0 属组用户可执行

8.

9. 0 0 0 4 其他用户可读

10. 0 0 0 2 其他用户可写

11. 0 0 0 1 其他用户可执行

按照上面查出与文件属主、属组用户和其他用户所具有的权限相对应的数字,并把它们加起来,就是相应的权限表示。
   
可以看出,文件属主、属组用户和其他用户分别所能够具有的最大权限值就是7

2)符号模式权限设置

符号模式下指定的权限的格式:

[ugoa…][[+-=][rwxXstugo…]]

第一组字符定义了权限作用的对象:

u:代表用户

g:代表组

o:代表其他

a:代表上述所有

下一步,后面跟着的符号表示你是想在现有权限基础上增加权限(+),还是在现有权限基础上移除权限(-),还是将权限设置成后面的值(=

最后,第3个符号代表作用到设置上的权限。这个值比rwx多,额外有如下几项:

X:如果对象是目录或者它已有执行权限,赋予执行权限;

s:运行时重新设置UIDGID

t:保留文件或目录

u:将权限设置为跟属主一样

g:将权限设置为跟数组一样

o:将权限设置为跟其他用户一样

   可以这么使用这些权限:

[root@localhost test]# touch newfile

[root@localhost test]# ll

total 0

-rw-r--r--. 1 root root 0 Jan 13 14:13 newfile

[root@localhost test]# chmod o+x newfile

#不管其他用户在这一安全级别之前都有什么权限,o+x添加了可执行权限

[root@localhost test]# ll

total 0

-rw-r--r-x. 1 root root 0 Jan 13 14:13 newfile

2、改变所属关系

应用场景:有时你需要改变文件的属组,比如有人离职或开发人员创建了一个在产品环境中运行时需要归属在系统账户下的应用。Linux提供了两个命令来完成这个功能:

a. chown命令用来改变文件的属组;

b. chgrp命令用来改变文件的默认属组

1chown命令的格式

chown option owner[.group] file

 

exp1:改变一个目录的默认属组

[root@localhost test2]# ll  #查看文件所属关系(属主和属组)

total 4

drwxr-xr-x. 2 test2 test2 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2 test2    0 Jan 13 11:05 newfile

-rw-r--r--. 1 test2 test2    0 Jan 13 11:11 newfile1

[root@localhost test2]# chown .test newfile #修改文件所属关系(属组)

[root@localhost test2]# ll   #查看修改后文件所属关系

total 4

drwxr-xr-x. 2 test2 test2 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2test    0 Jan 13 11:05 newfile

-rw-r--r--. 1 test2 test2    0 Jan 13 11:11 newfile1

exp2:可用登录名或UID来指定文件的新属主

[root@localhost test2]# chown test1 newfile1  #修改文件所属关系(属主)

[root@localhost test2]# ll

total 4

drwxr-xr-x. 2 test2 test2 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2 test     0 Jan 13 11:05 newfile

-rw-r--r--. 1 test1 test2    0 Jan 13 11:11 newfile1

exp3:同时改变文件的属主和属组

[root@localhost test2]# chown test.sharing newdir #同时改变文件的属主和属组

[root@localhost test2]# ll

total 4

drwxr-xr-x. 2 test sharing 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2 test       0 Jan 13 11:05 newfile

-rw-r--r--. 1 test1 test2      0 Jan 13 11:11 newfile1

exp4:如果你的Linux系统采用和用户登录名匹配的组名,就可以只用一个条目改变两者。

[root@localhost test2]# chown test. newfile1 #只用一个条目改变两者

[root@localhost test2]# ll

total 4

drwxr-xr-x. 2 test  sharing 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2 test       0 Jan 13 11:05 newfile

-rw-r--r--. 1 test test      0 Jan 13 11:11 newfile1

另外,chgrp可以很方便的更改文件或目录的默认属组

[root@localhost test2]# ll   #查看修改前所属关系

total 4

drwxr-xr-x. 2 test  sharing 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2test       0 Jan 13 11:05 newfile

-rw-r--r--. 1 test  test       0 Jan 13 11:11 newfile1

[root@localhost test2]# chgrp sharing newfile #更改文件或目录的默认属组

[root@localhost test2]# ll     #查看修改后所属关系

total 4

drwxr-xr-x. 2 test  sharing 4096 Jan 13 11:12 newdir

-rwxrw----. 1 test2 sharing    0 Jan 13 11:05 newfile

-rw-r--r--. 1 test  test       0 Jan 13 11:11 newfile1

 

五、共享文件

     解决的问题:创建新文件时,Linux会用默认UIDGID来给文件分配权限。想让其他人也能访问文件,要么改变其他用户所在安全组的访问权限,要么就给文件分配一个新的包含其他用户的默认属组。如果想在大的环境中创建文档并将文档与人共享,这会很繁琐。幸好有对应的简单解决方法。

Linux为每个文件和目录存储了3个额外的信息位

1)设置用户IDSUID):当文件被用户使用时,程序会以文件属主的权限运行;

2)设置组IDSGID):对文件来说,程序会以文件数组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组;

3)粘着位:进程结束后文件还会在内存中

SGID位对文件共享非常重要。使能了SGID位,你能让在一个共享目录下创建的新文件都属于该目录的属组,也就是每个用户的组。

SGID可通过chmod命令设置,它会加到标准3位八进制之前(组成4为八进制值),或者在符号模式下用符号s

因此,要创建一个共享目录,是目录里的新文件都能沿用目录的属组,只需将该目录的SGUD位置位。

[test@localhost ~]$ su test

Password:

su: incorrect password

[test@localhost ~]$ ll

total 0

-rw-r--r-x. 1 root root 0 Jan 13 14:13 newfile

[test@localhost ~]$ mkdir testdir

[test@localhost ~]$ ll

total 4

-rw-r--r-x. 1 root root    0 Jan 13 14:13 newfile

drwxrwxr-x. 2 test test 4096 Jan 13 14:45 testdir

[test@localhost ~]$ chgrp sharing testdir

[test@localhost ~]$ ll

total 4

-rw-r--r-x. 1 root root       0 Jan 13 14:13 newfile

drwxrwxr-x. 2 test sharing 4096 Jan 13 14:45 testdir

[test@localhost ~]$ chmod g+s testdir #将目录的SGID位置位,保证目录中新文件都用sharing作为默认属组

[test@localhost ~]$ ll

total 4

-rw-r--r-x. 1 root root       0 Jan 13 14:13 newfile

drwxrwsr-x. 2 test sharing4096 Jan 13 14:45 testdir

[test@localhost ~]$ umask 002

[test@localhost ~]$ cd testdir

[test@localhost testdir]$ touch testfile

[test@localhost testdir]$ ll

total 0

-rw-rw-r--. 1 test sharing0 Jan 13 14:47 testfile

首先,用mkdir命令来创建希望共享的目录。其次,通过chgrp命令将目录的默认属组改为含有所需共享文件用户的组。最后,将目录的SGID位置位,以保证目录中新建文件都用sharing作为默认属组。

为了让这个环境能正常工作,所有组成员都需要把它们的umask值设置成文件对属组成员可写。在例子中,umask改成了002,所以文件对属组是可写的。

0 0
原创粉丝点击