一.umask权限模型

 

1.)umask是Linux中的权限模型,决定目录和文件被创建时的初始权限。如果是root用户创建目录的权限为755,文件权限为644。

root用户的umask值默认为022,就是上面将创建目录时使用777-022=755,文件则是666-022=644。

 

2.)755,644的权限是怎么来的?

目录的最大权限为777减去umask的022。而文件被创建时不应该有执行权限的,就是666减去umask的022。

-rw-r--r--.1 root root 18586 Oct 10  2013 functions

文件和目录的权限分为读(r),写(w),执行(x),如rwx对应的数字就是421,即为r=4,w=2,x=1。而文件或者目录又是分为三段,属主权限,属组权限,其他用户权限。每一段权限相加得出文件或者目录的权限为数字表示的,例如755,644。


可以看一下umask值为022的root创建目录,文件权限的大小。

# mkdir test_umask_dir
# touch test_umask_file
# ll
drwxr-xr-x 2 root root 4096 Aug  3 04:58 test_umask_dir
-rw-r--r-- 1 root root    0 Aug 3 04:58 test_umask_file
结合相对应的权限模型相加。


3.)接下来说说普通用户的umask值: 当普通用户的id与基本组id一致时,umask值为002。当普通用户的id与基本组id不一致时,umask值为022。

普通用户的id与基本组id相同:

# useradd gentoo
# passwd gentoo
# id gentoo
uid=501(gentoo) gid=501(gentoo) groups=501(gentoo)
$ whoami
gentoo
$ umask 
0002


普通用户的id与基本组id不同:

# usermod -g zhang gentoo
# id gentoo
uid=501(gentoo) gid=500(zhang) groups=500(zhang)
# su - gentoo
$ whoami 
gentoo
$ umask 
0022


二.修改文件,目录权限管理

1.)文件的rwx权限:

r:可以使用查看里面的数据。

w: 可以修改其内容。

x: 可以把他提交给内核启动为一个进程。


目录的rwx权限:

r: 可以使用ls命令查看属性,及里面的内容。

w: 可以在内部创建或者删除文件。

x: 可以切换进目录。


2.)如何修改目录或者文件的权限。

chmod命令:

操作指定类别使用者的权限:

u:属主    g:属组   o:其他   a:all
例如下面这个文件的默认权限:644。
-rw-r--r-- 1 root root    0 Aug 3 04:58 test_umask_file
# chmod g+w test_umask_file 
# ls -l test_umask_file 
-rw-rw-r-- 1 root root 0 Aug  3 04:58 test_umask_file
 
# chmod ugo+rwx test_umask_file 
-rwxrwxrwx 1 root root    0 Aug 3 04:58 test_umask_file
上面的命令也可以把ugo换成a。
还可以使用=号代替+号。


递归修改权限,把文件和目录的权限修改成一样的。

# chmod -R 755 test/
# ll
drwxr-xr-x  3root root 4096 Aug  3 04:58 test
# cd test/
# ll
total 4
drwxr-xr-x 2 root root 4096 Aug  3 04:58 test_umask_dir
-rwxr-xr-x 1 root root    0 Aug 3 04:58 test_umask_file


3.)修改文件或者目录的属主属组。

chown命令

drwxr-xr-x2 root root 4096 Aug  3 04:58test_umask_dir

 此目录的属主属组都是root,现在改成属主为gentoo。 

# chown gentoo: test_umask_dir/
# ll
total 4
drwxr-xr-x 2 gentoo zhang 4096 Aug  3 04:58 test_umask_dir
如果只是修改属主的话,上面的命令则是有问题的,看出来了吧,属组变成gentoo的基本组了。
要使用:
# chown root test_umask_dir/
# ll
total 4
drwxr-xr-x 2 root zhang 4096 Aug  3 04:58 test_umask_dir

现在修改此目录的属组为gentoo。

# chown :gentoo test_umask_dir/

# ll

total 4

drwxr-xr-x 2 root gentoo 4096 Aug  3 04:58 test_umask_dir

 

除root用户以外的组或者用户不允许访问test_umask_dir/。

# su - gentoo
$ cd /tmp/test/
$ ls
test_umask_dir test_umask_file
$ cd test_umask_dir/
$ pwd
/tmp/test/test_umask_dir
修改目录权限
# chmod go= test_umask_dir/
# ll
total 4
drwx------ 2 root zhang 4096 Aug  3 04:58 test_umask_dir
再次切换到gentoo用户时:
$ cd test_umask_dir/
-bash: cd: test_umask_dir/: Permission denied

4.)文件或者目录权限位之前的字母或者符号意义:

d: 代表为目录。

-:代表普通文件。

l:代表符号链接文件。

c:代表字符设备节点。

b: 代表块设备。

P:代表命名管道。

s: 代表为socket套接字。  



总结:文件被创建时没有执行权限,如果umask值为023的话,创建一个文件的权限不是643,而是644,文件权限自动加1。

如果umask值为024的话,创建的目录则是有执行权限的。仅文件不允许被创建是就有执行权限。

如果使用chmod+w的命令,仅属主会改变权限。如果chmod+x 或者 +r 则会同时改变属主属组权限。

如果给予一个文件执行权限,则所有用户都有执行权限。