Linux用户组文件权限管理详解

2021-5-7
wanghongrong

1.文件目录简介

Linux:一切皆文件

1.1文件系统目录结构

示例:CentOS7.6

[root@CentOS7 ~]$ tree / -L 1
/
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── swap
├── sys
├── tmp
├── usr
└── var

1.2文件类型

- 普通文件
d 目录文件directory
b 块设备block
c 字符设备character
| 符号链接文件link
p 管道文件pipe
s 套接字文件socket

示例:

[root@CentOS7 ~]$ ll
total 8
drwxr-xr-x. 2 root root    6 May  6 17:04 Desktop # 目录文件
-rw-r--r--. 1 root root 1852 Apr 30 22:10 initial-setup-ks.cfg # 普通文件

2.用户及组管理

用户组管理命令

#用户相关命令
useradd 新增用户
userdel 删除用户
usermod 修改用户
#用户组相关命令
groupadd 新增用户组
groupdel 删除用户组
groupmod 修改用户组

centos用户及组主要配置文件说明

/etc/passwd  #此文件保存着:用户名:密码:UID:GID:用户描述:主目录:登录shell
/etc/shadow  #此文件记录的行与passwd中的行一一对应,保存着:用户名:密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group   #此文件保存着:用户组名称:用户组密码:GID:用户列表(多个用户之间用,分隔)
/etc/gshadow #此文件与/etc/group文件中的行对应,保存着:用户组名:加密码后的密码:组管理员(多个用,分隔):组成员(多个用,分隔)
/etc/default/useradd #此文件主要保存着创建账户时的默认值,使用useradd –D查看到的内容就是这个文件中的内容
/etc/skel    #他是一个目录,相当于windows中公用的账号环境设置,比如,可以在这个目录里放一个文本文件,当创建用户时,在每个用户的家目录里都可以看到这个文件,当然也可以放置公共的配置文件,创建用户时就可以延用这个配置。 
/etc/login.defs #这个是用来设置用户帐号限制的配置文件,比如密码的最大过期天数,长度等,但优先级小于/etc/shadow
/etc/profile #该文件主要用来保存环境变量的,是全局的,由系统管理员管理. 
~/.bashrc  .bash_history  .bash_profile  .bash_logout #这些文件主要用来定义用户的环境变量的

示例:

[root@CentOS7 ~]# ll /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/default/useradd /etc/login.defs /etc/profile 
-rw-r--r--. 1 root root  119 Mar  5  2015 /etc/default/useradd
-rw-r--r--. 1 root root  544 Apr 28 05:52 /etc/group
----------. 1 root root  436 Apr 28 05:52 /etc/gshadow
-rw-r--r--. 1 root root 2028 Mar  5  2015 /etc/login.defs
-rw-r--r--. 1 root root 1098 Apr 28 05:14 /etc/passwd
-rw-r--r--. 1 root root 1750 Jun  7  2013 /etc/profile
----------. 1 root root  665 Apr 28 05:14 /etc/shadow
[root@CentOS7 ~]# ll .bashrc .bash_history  .bash_profile .bash_logout 
-rw-------. 1 root root 1365 May  8 05:06 .bash_history
-rw-r--r--. 1 root root   18 Dec 28  2013 .bash_logout
-rw-r--r--. 1 root root  176 Dec 28  2013 .bash_profile
-rw-r--r--. 1 root root  210 May  8 04:49 .bashrc

2.1添加用户和组

[root@CentOS7 ~]# useradd --help
Usage: useradd [options] LOGIN
       useradd -D
       useradd -D [options]

Options:
  -b, --base-dir BASE_DIR       base directory for the home directory of the
                                new account
  -c, --comment COMMENT         GECOS field of the new account
  -d, --home-dir HOME_DIR       home directory of the new account
  -D, --defaults                print or change default useradd configuration
  -e, --expiredate EXPIRE_DATE  expiration date of the new account
  -f, --inactive INACTIVE       password inactivity period of the new account
  -g, --gid GROUP               name or ID of the primary group of the new
                                account
  -G, --groups GROUPS           list of supplementary groups of the new
                                account
  -h, --help                    display this help message and exit
  -k, --skel SKEL_DIR           use this alternative skeleton directory
  -K, --key KEY=VALUE           override /etc/login.defs defaults
  -l, --no-log-init             do not add the user to the lastlog and
                                faillog databases
  -m, --create-home             create the user‘s home directory
  -M, --no-create-home          do not create the user‘s home directory
  -N, --no-user-group           do not create a group with the same name as
                                the user
  -o, --non-unique              allow to create users with duplicate
                                (non-unique) UID
  -p, --password PASSWORD       encrypted password of the new account
  -r, --system                  create a system account
  -R, --root CHROOT_DIR         directory to chroot into
  -s, --shell SHELL             login shell of the new account
  -u, --uid UID                 user ID of the new account
  -U, --user-group              create a group with the same name as the user

示例:创建组和用户,并指定UID和GID,设置密码和过期日期

[root@CentOS7 ~]# groupadd distro --gid 2019
[root@CentOS7 ~]# useradd mandriva -g distro --uid 1005 --password mageedu --expiredate 7
[root@CentOS7 ~]# id mandriva
uid=1005(mandriva) gid=2019(distro) groups=2019(distro)

示例:创建账号,指定UID,家目录以及密码

[root@CentOS7 ~]# useradd mageia --uid 1100 --home-dir /home/linux --password mageedu
[root@CentOS7 ~]# id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)
[root@CentOS7 home]# ll
total 0
drwx------. 2 mageia   mageia 59 May  8 06:13 linux
drwx------. 2 mandriva distro 59 May  8 06:10 mandriva

示例:创建用户并增加附加组,指定shell环境

[root@CentOS7 linux]# groupadd peguin
[root@CentOS7 linux]# useradd slackware --uid 2002 -g distro -G peguin --shell /bin/tcsh
[root@CentOS7 linux]# id slackware
uid=2002(slackware) gid=2019(distro) groups=2019(distro),2020(peguin)
[root@CentOS7 linux]# groupadd admins
[root@CentOS7 linux]# usermod slackware -G admins   #给用户添加附加组
[root@CentOS7 linux]# id slackware
uid=2002(slackware) gid=2019(distro) groups=2019(distro),2021(admins)
[root@CentOS7 linux]# cat /etc/passwd
slackware:x:2002:2019::/home/slackware:/bin/nologin   #修改为没有登录权限

3.文件目录基本操作

#文件操作基本命令
ls 	 显示文件或目录名称
ll 	 显示文件基本信息
stat 显示文件元数据信息
file 查看文件类型
touch 创建文件
cp    复制文件
mv    移动和重命名文件
rm    删除文件
shred 安全删除文件
ln    创建连接文件
#目录操作基本命令
pwd  显示当前shell目录绝对路径
cd   切换目录
tree  显示目录树
mkdir 创建目录
rmdir 删除空目录

3.1cp命令详解

cp - copy files and directories

[root@CentOS7 ~]$ cp --help
Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE... 
Options
  -a, 常用于复制目录,保留链接、文件属性,并复制目录下所有内容。
  -d,复制时保留链接。及Windows中的快捷方式。
  -f, --force ,覆盖已经存在的目标文件而不给出提示。
  -i, --interactive,与-f相反,覆盖目标之前给出提示,提供交互。
  -p, 除复制文件内容外,还把修改时间和访问权限也复制到新文件中。
  -R, -r, --recursive,若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件
  -l, 不复制文件,只是生成链接文件。
  --help     display this help and exit
  --version  output version information and exit

示例:将data目录下的所有文件复制到新目录newdata下

[root@CentOS7 ~]# cp -r data/ newdata

3.2mv命令详解

mv - move (rename) files

[root@CentOS7 ~]# mv --help
Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Options
  -b,当前目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
  -f, --force,覆盖前不提示。
  -i, --interactive,如果源和目标文件同名,则会先询问是否覆盖旧文件。
  -n, --no-clobber,不要覆盖任何已存在的文件或目录。
  -u, --update,当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
  --help     display this help and exit
   --version  output version information and exit

mv 参数设置与运行结果

命令格式 运行结果
mv source_file dest_file 将源文件名改为目标文件名
mv source_file dest_dir 将文件移动到目标目录中
mv source_dir dest_dir 目录名存在,移动到目标目录中;目录名不存在则修改目标目录名
mv source_dir dest_file 报错,不符合逻辑

4.文件目录权限详解

普通权限中,用户对文件只有三种身份,就是属主、属组和其他人;每种用户身份拥有读(read)、写(write)和执行(execute)三种权限。

[root@CentOS7 ~]# ll initial-setup-ks.cfg 
-rw-r--r--. 1 root root 1852 Apr 30 22:10 initial-setup-ks.cfg
# 权限    链接数 所有者 所属组 大小 创建和修改时间   文件名

4.1文件所有者属组权限管理

文件目录权限基本命令:

chown - change file owner and group
       chown [OPTION]... [OWNER][:[GROUP]] FILE...        
chgrp - change group ownership
       chgrp [OPTION]... GROUP FILE...
chmod - change file mode bits
       chmod [OPTION]... MODE[,MODE]... FILE... 

文件权限作用对象:

owner 属主,u
group 属组,g
other 其他,o

文件权限定义:

r, readable   4 可使用文件查看工具查看内容
w, writable   2 可修改其内容
x, excutable  1 可以把文件作为内核进程,运行此文件

4.2默认权限管理

新建文件和目录的权限,用umask实现。

  • 新建文件默认权限:666-umask,如果所得结果某位存在执行权限,则将其权限+1,偶数不变
  • 新建目录默认权限:777-umask

示例:

root@CentOS7 ~]# umask
0022
[root@CentOS7 ~]# touch hong.log 
[root@CentOS7 ~]# ll hong.log
-rw-r--r--. 1 root root 0 May  7 22:26 hong.log   # 644=666-022
[root@CentOS7 ~]# mkdir hong;
[root@CentOS7 ~]# ll
total 8
drwxr-xr-x. 2 root root    6 May  7 22:28 hong    # 755=777-022

备注:

非特权用户umask默认是002

root的umask默认是022

修改umask值:

#临时修改
[root@CentOS7 ~]# umask 033
[root@CentOS7 ~]# umask
0033
#永久修改
#全局设置:/etc/bashrc
#用户设置:~/.bashrc
[root@CentOS7 ~]# vim .bashrc
# .bashrc
# User specific aliases and functions
umask 033

4.3特殊权限

SUID权限:

运行某程序时,相应进程的属主是程序文件自身的属主,而不是用户本身了,只对二进制程序有效,执行者对于程序需要有x权限。

chmod u+s file

SGID权限:

对于文件:运行某程序时,相应进程的属组是程序文件自身的属组,而不是用户本身的基本组.

对于目录:用户对此目录有rx权限可以进入目录,用户进入此目录后,有效用户组会变成该目录的用户组,若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同.

chmod g+s dir...
chmod 2xxx dir
chmod g-s dir...

Sticky权限:

只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件或目录,只有自己与root才可以删除.在一个公共目录,每个人都可以创建文件,删除自己的文件,但是不能删除别人的文件.

chmod o+t dir...

文件特殊属性:

chattr
lsattr

[root@CentOS7 data]# chattr --help
Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...

ACL权限功能:

ACL是Access Control List(访问控制列表)的缩写,不过在Linux系统中,ACL用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。

getfacl
setfacl

[root@CentOS7 test]# setfacl --help
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  -m, --modify=acl        modify the current ACL(s) of file(s)
  -M, --modify-file=file  read ACL entries to modify from file
  -x, --remove=acl        remove entries from the ACL(s) of file(s)
  -X, --remove-file=file  read ACL entries to remove from file
  -b, --remove-all        remove all extended ACL entries
  -k, --remove-default    remove the default ACL
      --set=acl           set the ACL of file(s), replacing the current ACL
      --set-file=file     read ACL entries to set from file
      --mask              do recalculate the effective rights mask
  -n, --no-mask           don‘t recalculate the effective rights mask
  -d, --default           operations apply to the default ACL
  -R, --recursive         recurse into subdirectories
  -L, --logical           logical walk, follow symbolic links
  -P, --physical          physical walk, do not follow symbolic links
      --restore=file      restore ACLs (inverse of `getfacl -R‘)
      --test              test mode (ACLs are not modified)
  -v, --version           print version and exit
  -h, --help              this help text

示例:

[root@CentOS7 linux]# useradd user1
[root@CentOS7 linux]# useradd user2
[root@CentOS7 linux]# useradd user3
[root@CentOS7 /]# mkdir /data/test
[root@CentOS7 data]# ll
total 0
drwxr-xr-x. 2 root root 6 May  8 06:40 test
[root@CentOS7 data]# chown user1:user1 test/   #修改文件夹属主和属组
[root@CentOS7 data]# ll
total 0
drwxr-xr-x. 2 user1 user1 6 May  8 06:40 test
[root@CentOS7 data]# chmod o=rw test/  #修改目录为其他用户读写权限
[root@CentOS7 data]# ll
total 0
drwxr-xrw-. 2 user1 user1 6 May  8 06:40 test
[user1@CentOS7 test]$ touch /data/test/a{1..4}.sh #用user1账户创建文件
[user1@CentOS7 test]$ ll
total 0
-rw-rw-r--. 1 user1 user1 0 May  8 06:47 a1.sh
-rw-rw-r--. 1 user1 user1 0 May  8 06:47 a2.sh
-rw-rw-r--. 1 user1 user1 0 May  8 06:47 a3.sh
-rw-rw-r--. 1 user1 user1 0 May  8 06:47 a4.sh
[root@CentOS7 data]# chattr +i test/
[root@CentOS7 data]# lsattr
----i----------- ./test
[root@CentOS7 test]# rm -rf a2.sh 
rm: cannot remove ‘a2.sh’: Permission denied
[root@CentOS7 test]# rm -rf a3.sh 
rm: cannot remove ‘a3.sh’: Permission denied
[root@CentOS7 test]#

Linux用户组文件权限管理详解

上一篇:linux系统awk命名拆分文件


下一篇:TransMac工具制作MacOS启动U盘