Linux权限管理

基本知识

普通权限: r(read)    w(write)    x(execute)

用户类别: u(user)    g(group)   o(other)

对于每种用户都有一个指定的权限,分别用rwx这三个位表示,当用户没有该权限时就用 - 表示。

1 [root@compute ~]# ll /home/
2 总用量 496
3 drwx------.  2 root    root     16384 5月  26 14:12 lost+found
4 drwx------.  3    1010 user1     4096 7月  28 00:08 user1
5 drwx------.  3 user3   root      4096 7月  28 06:31 user3
6 drwx------.  3 user4   user4     4096 7月  28 00:29 user4

以上面的user1为例,d表示该文件为目录文件,d后面的rwx表示u(user)对其具有读写执行权限,之后的 - - - 表示g(group)里面的用对其没有任何权限,最后的 - - - 同理表示o(other)对其没有任何权限。

由于rwx这三个位只有两种状态——有这种权限或者没有这种权限——因此可以用0和1来对其进行编号

0 → 000 —— ---

1 → 001 —— --x

2 → 010 —— -w-

3 → 011 —— -wx

4 → 100 —— r--

5 → 101 —— r-x

6 → 110 —— rw-

7 → 111 —— rwx

因此以后可以直接用数字代表权限,比如 755 表示 rwxr-xr-x

改变文件的属主

# chown(change owner) 用法:chown  USERNAME  file1,file2...

1 [root@compute demo]# touch a
2 [root@compute demo]# ll
3 总用量 0
4 -rw-r--r--. 1 root root 0 7月  28 22:20 a
5 [root@compute demo]# chown user3 a
6 [root@compute demo]# ll
7 总用量 0
8 -rw-r--r--. 1 user3 root 0 7月  28 22:20 a

 -R :递归修改子目录和文件,默认情况下不会修目录里面的问价的信息。

--reference=path/to/file 将file1,file2...的属主设置成和path/to/file文件一样。

 1 [root@compute demo]# touch b
 2 [root@compute demo]# ll
 3 总用量 0
 4 -rw-r--r--. 1 user3 root 0 7月  28 22:20 a
 5 -rw-r--r--. 1 root  root 0 7月  28 22:32 b
 6 [root@compute demo]# chown --reference=a b
 7 [root@compute demo]# ll
 8 总用量 0
 9 -rw-r--r--. 1 user3 root 0 7月  28 22:20 a
10 -rw-r--r--. 1 user3 root 0 7月  28 22:32 b

chown不仅可以修改属主,还可以修改属组,用法: chown  USERNAME:GROUP  file1,file2...(如果只写 :GROUP 可以只修改属组,其中:可用 . 号代替)

改变文件的属组

# chgrp  用法:chgrp  GROUP  file1,file2... 

-R和--reference的用法和chown用法相同。

修改文件的权限

#chmod

1、修改三类用户的权限:chmod  MODE  file1,file2...  其中MODE是三位8进制数,比如 644 表示修改文件的权限为 rw-r--r--。注意如果位数不足,比如输入的MODE为32,默认解析为032,而不是320。

该命令同上面的chown命令一样支持 -R 和 --reference。

 2、修改某类用户的权限:用法:chmod  用户类别=权限  file1,file2... 。这里的用户类别为u(user), g(group), o(other), a(all)中的一个。权限为rwx的组合,如:chmod  g=rx hello.c 。更详细的用法参考下面的例子。

3、修改某类用户的某位权限:把用法2中的 = 号变成 -/+ 即可。如:给hello文件的user位加上执行权限 chmod  u+x  hello 。

 1 [root@compute demo]# ll
 2 总用量 0
 3 -rw-r--r--. 1 user3 root 0 7月  28 22:20 a
 4 -rw-r--r--. 1 user3 root 0 7月  28 22:32 b
 5 [root@compute demo]# chmod 777 a
 6 [root@compute demo]# ll
 7 总用量 0
 8 -rwxrwxrwx. 1 user3 root 0 7月  28 22:20 a
 9 -rw-r--r--. 1 user3 root 0 7月  28 22:32 b
10 [root@compute demo]# chmod go-x a
11 [root@compute demo]# ll
12 总用量 0
13 -rwxrw-rw-. 1 user3 root 0 7月  28 22:20 a
14 -rw-r--r--. 1 user3 root 0 7月  28 22:32 b
15 [root@compute demo]# chmod u=rwx,go=rw b
16 [root@compute demo]# ll
17 总用量 0
18 -rwxrw-rw-. 1 user3 root 0 7月  28 22:20 a
19 -rwxrw-rw-. 1 user3 root 0 7月  28 22:32 b

新文件的默认权限——umask

系统中有一个umask变量,它记录了一个三位8进制数,当创建目录时,新目录的默认权限就是777-umask,创建文件时,新文件的权限默认是666-umask。

注意这里的 “-” 不是算术中的减,是拿掉的意思,比如当umask为003时,其对应为--- --- -wx,这时创建文件的默认权限是在 666(rw- rw- rw-) 中拿掉 003(--- --- -wx) 得到 664(rw- rw- r--)。而不是用666-003得到663(rw- rw- -wx),这样会造成 x 权限无中生有。

对于管理员来说,umask默认为022,对于普通用户来说umask的默认值为002。

直接使用umask可以查看当前用户的umask值。使用 umask  OCT 可以改变umask的值(OCT为三位8进制数)

以是否登入为区分可将shell分为登入式shell和非登入式shell

登入式shell:

  正常通过终端登入的shell

  su - USERNAME

  su -l USERNAME

非登入式shell:

  su USERNAME

  图形界面下打开的虚拟终端

  自动执行的shell脚本

bash的配置文件

全局配置文件:/etc/profile, /etc/profile.d/*.sh, /etc/bashrc

个人配置文件:~/.bash_profile, ~/.bashrc

profile类的文件:设置环境变量,运行命令或脚本

bashrc类的文件:设置本地变量,定义命令别名

登入式shell读取配置文件的顺序:

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非登入式shell读取配置文件的顺序:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

在/etc/profile文件中有这样一段语句:

1 # By default, we want umask to get set. This sets it for login shell
2 # Current threshold for system reserved uid/gids is 200
3 # You could check uidgid reservation validity in
4 # /usr/share/doc/setup-*/uidgid file
5 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
6     umask 002 
7 else
8     umask 022 
9 fi

这段语句设置了不同用户在每次重新登入后的默认umask不同。

原文地址:https://www.cnblogs.com/flyor/p/7252902.html