linux文件权限管理和用户,组管理常用命令应用实例

用户和组概念简述

用户一般指使用计算机的人,GNU/linux通过用户和用户组实现对计算机的文件访问和设备使用控制。

用户分类
1.管理员root(类似皇帝,权力最大)
2.普通用户:分为系统用户和普通登录用户。系统用户不登录,常用于发起一些进程提供服务,防止进程被劫持带来的风险,所以尽量减少以root身份发起进程对外提供服务。
3.用户标识UID。管理员的UID为0。
系统用户UID为1-499(centos6),1-999(centos7)。
普通用户UID500-6000(centos6),1000-60000(centos7)。

组:按标识分管理员组0,系统用户组1-499(centos6),1-999(centos7)。
普通用户组500-6000(centos6),1000-60000(centos7)。
还可以分基本组和附加组,一个用户是可以属于多个组,比如一个家庭和一个公司,你所在的家庭好比一个基本组,你所在的某个公司上班,就好比一个附加组。
用户名和组名相同,叫私有组。一个组包含多么成员,也叫公共组。

1. 用户信息库文件/etc/passwd和用户密码文件/etc/shadow文件详细说明

  • 用户信息库文件/etc/passwd:
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin

    QQ图片20171002160107.png

    以:号分隔,共七列

1.name: 用户名
2.password:可以是加密的密码,也可是占位符x;
3.UID:用户ID号
4.GID:用户所属的主组的ID号;
5.GECOS:注释信息,可以加入用户地址,家庭电话等
6.directory:用户的家目录;
7.shell:用户的默认shell,登录时默认shell程序;
  • 用户密码文件/etc/shadow

Image 2.png

以:号分隔,共9列

1.用户名
2.加密的密码
3.最近一次修改密码的时间,以1970.1.1起累加的日期
4.最短使用期限,密码需要经过几天才可以被变动,是0,随时可以改动
5.:最长使用期限,必须要在这个时间内改动密码,否则账号会过期,9999为永久
6:账户变更期限前警告期段,表示再过几天你的密码到期,要重新设定密码提示天数。
7:过期宽限时间,也就是宽限期,这时候登入需要你必须改密码。
8:账户失效日期
9.保留字段,看是否有新功能加入

第二列加密了密码说明:
1.$6$表示使用的加密算法,这个是sha512。
2.第二个$到第三个$间的字符是随机数,避免相同密码加密后的得到相同密文。
3.第三个$后面字符到第二个冒号前的字符,不包括冒号,是用户设定的密码的密文。

加密算法简述
linux对用户密码加密使用的是单向加密,不能解密的。
特性:定长输出。雪崩效应,密码微小的改变,加密后的密文也跟着一连串随变化。
常用的加密算法有:

1.md5: message digest, 128bits
2.sha:secure hash algorithm(安全的哈希算法), 160bits
3.sha224
4.sha256
5.sha384
6.sha512

使用密码策略
1、使用随机密码;
2、最短长度不要低于8位;
3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
4、定期更换;
密码存储格式:单向加密,并借助于salt(随机数)完成

2.组信息库文件/etc/group和组密码文件/etc/gshadow文件详细说明

  • 组信息库文件/etc/group

mail:x:12:postfix 以:号分隔,共4列

group_name:password:GID:user_list 这个比较简单,从左往右分别是:
组名:组密码:组ID:用户列表

  • 组的密码库文件/etc/gshadow:

[root@dxlcentOS ~]# cat /etc/gshadow
root:::
mail:::postfix 号分隔,共4列

从左往右分别是:
组名:组密码(以!开头,表示无合法密码,无群组管理员):群组管理员账号:用户列表

用户管理相关一些的命令

1.useradd添加用户,不加任何选项则创建一个登录用户,和组名相同,

useradd [选项] 登录名

选项
-u 指定用户的UID,后接数字,直接指定一个特定的UID给这个账号
-g 后接组ID号或组名,为要创建的用户指定所属的基本组
-G 后接组ID号或组名,为要创建的用户指定附加组,要是指定多个附加组时则用逗号隔开,组需要事先存在。
-c 指定注释信息
-d 指定某个目录为用户家目录,不使用默认值,必须要使用绝对路径,
-s 指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中
-r 创建系统用户,默认不为系统用户创建家目录
-e 设定用户的失效日期,对应第八字段,接的日期格式为YYYY-MM-DD
-f 设定密码是否会失效,对应第七字段,0为立即失效,-1为永久不失效
-m 强制,建立用户家目录,一般用户默认
-M 强制,不建立用户家目录,系统用户默认
-D 显示创建用户的默认配置

基本用户创建时和useradd相关的文件:

1./etc/default/useradd 基本用户创建的默认设定值

  1. /etc/login.defs UID/GID,密码等参数等默认设定参考值
  2. /etc/ske 新建一个用户的时候,/etc/skel 目录下的文件,
    都会原封不动的复制到新建用户的家目录下
例如:创建用户mandriva,其ID号为1006,基本组为distro。
[root@dxlcentOS ~]# useradd mandriva -g distro -u 1006
[root@dxlcentOS ~]# id mandriva
uid=1006(mandriva) gid=2016(distro) 组=2016(distro)
[root@dxlcentOS ~]# tail -1 /etc/passwd
mandriva:x:1006:2016::/home/mandriva:/bin/bash

创建用户slackware,其ID号为2002,基本组为distro,附加组为peguin
[root@dxlcentOS ~]# useradd -u 2002 -g distro -G peguin slackware
[root@dxlcentOS ~]# id slackware
uid=2002(slackware) gid=2016(distro) 组=2016(distro),1101(peguin)

创建用户mageia,其ID号为1100,指定其家目录为/home/linux
[root@dxlcentOS ~]# useradd -u 1100 -d /home/linux mageia

创建用户fedora,其注释信息为"Fedora Core",默认shell为/bin/tcsh;
[root@dxlcentOS ~]# useradd -c "Fedora Core" -s /bin/tcsh fedora
[root@dxlcentOS ~]# tail -1 /etc/passwd
fedora:x:2004:2004:Fedora Core:/home/fedora:/bin/tcsh
创建系统用户,没有家目录,命令行提示符会改变,
很多命令无法输入执行。要是把某一普通用户的家目录删了,也是如此
▽root@dxlcentOS ~]# useradd -r userr
[root@dxlcentOS ~]# su - userr
su: 警告:无法更改到 /home/userr 目录: 没有那个文件或目录
-bash-4.2$ ls
ls: 无法打开目录.: 权限不够

2.userdel 删除用户

userdel [选项] 登录名
-r 连同用户家目录一起删除

 删除用户mandriva ,但保留其家目录
[root@dxlcentOS ~]# userdel mandriva
[root@dxlcentOS ~]# ls /home/
centos  dxl  dxll2  linux  mandriva  test1  www

3.usermod 修改用户属性

usermod [选项] 登录名
选项
-u 为用用户指定新的ID号
-g 修改用户所属的基本组
-G 修改用户所属的附加组,原来的附加组会被覆盖
-a 与-G一起使用。用于为用户追加新的附加组
-c 修改注释信息
-d 修改用户的家目录,原有的文件不会被转移到新位置
-m 只能与-d一起使用,用于将原来的家目录移动到新的家目录
-l 修改用户名
-s 修改用户默认的shell
-L 锁定用户密码,在用户原来密码字符串前加一个!号
-U 解锁用户密码

例如:为用户slackware新增root为附加组

[root@dxlcentOS ~]# usermod -a -G root slackware
[root@dxlcentOS ~]# id slackware                
uid=2002(slackware) gid=2016(distro) 组=2016(distro),0(root),2003(admins)

4.passwd修改用户密码

  • 直接passwd则是修改用户自己密码
  • passwd 用户名 修改指定用户密码,仅root有次权限。

常用选项
-l 锁定指定用户
-u 解锁指定用户
-d 清除用户密码串
-e 用户密码过期期限
-i 非活动期限
-n 密码最短使用期限
-x 密码使用最长使用期限
-w 警告期限
–stdin 从标准输入来指定用户密码
echo “密码” | passwd –stdin 用户名

例如:给mageia指定密码为mageedu123
[root@dxlcentOS ~]# echo "mageedu123" | passwd --stdin mageia
更改用户 mageia 的密码 。
passwd:所有的身份验证令牌已经成功更新。

5.id命令 查看用户信息

id 用户名 (不用加选项基本把要显示的用户信息显示出来了)
可以查看用户的UID,GID,所在的主组,附加组等信息。
-u 仅显示有效的UID
-g 仅显示基本组ID
-G 显示所属所有组ID
-n 显示名字而非ID,和上面选项组合使用

例如
[root@dxlcentOS ~]# id slackware
uid=2002(slackware) gid=2016(distro) 组=2016(distro),0(root),2003(admins)
[root@dxlcentOS ~]# id -u  slackware 
2002
[root@dxlcentOS ~]# id -g  slackware   
2016
[root@dxlcentOS ~]# id -G  slackware 
2016 0 2003
[root@dxlcentOS ~]# id -Gn  slackware 
distro root admins

6.su switch user切换用户或者以其他用户身份执行命令

登录式切换:会读取目标用户的配置文件进行初始化
例如:su – 用户名 或者 su – l 用户名
非登录式切换:不会读取目标用户的配置文件进行初始化: su 用户名

组管理相关一些的命令

1.groupadd 添加组

-g 指定GID,默认是上一个组ID+1
-r 创建系统组

例如:创建组distro,其组ID为2016
[root@dxlcentOS ~]# groupadd -g 2016 distro
[root@dxlcentOS ~]# cat /etc/group | tail -1
distro:x:2016:

2.groupmod 要修改的

选项:
groupmod [选项] 组名
-g 修改GID
-n 修改组名

3.groupdel 删除组

groupdel [选项] 组名

4.gpasswd 群组管理员功能

gpasswd -a 用户名 组名 —> 向组中添加用户
gpasswd -d 用户名 组名 —> 向组中删除加用户
gpasswd -A 用户名 组名 —> 给群组添加一个用户做为该组的管理员。

例如: 添加用户slackware作为组 ttgoup的管理员
[root@dxlcentOS ~]# groupadd ttgoup
[root@dxlcentOS ~]# gpasswd ttgoup
正在修改 ttgoup 组的密码
新密码:
请重新输入新密码:
[root@dxlcentOS ~]# gpasswd -A slackware ttgoup

5.newgrp 临时切换的组为基本组

6.groupmems 主组成员管理命令

groupmems -a user_name | -d user_name | [-g group_name] | -l | -p
options
-g 更改为指定组
actions
-a 指定用户加入组
-d 从组中删除用户
-p 从组中清除所有成员
-l 显示组成员列表
例如
[root@dxlcentOS tmp]# groupmems -g distro -l 列出组distro成员列表
[root@dxlcentOS tmp]# groupmems -a www -g distro 把用户www加入distro组
[root@dxlcentOS tmp]# groupmems -g distro -l
dxl slackware www

总结:

在使用useradd命令创建用户的时侯可以用-g 和-G 指定用户所属组和附属组。
基本组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是基本组,不可以把用户从基本组中删除。在创建文件时,文件的所属组就是用户的基本组。
附加组:除了基本组之外,用户所在的其他组,都是附加组。用户是可以从附加组中被删除的。
用户不论为与基本组中还是附加组中,就会拥有该组的权限。一个用户可以属于多个附加组。但是一个用户只能有一个基本组。
用户必须有且只能有一个主组,可以有0个、1个或多个附属组,就如我们一定会有一个用来安家的房子(类同主组),还可以有n个用于投资或其他打算的房子(附属组)。

文件权限管理

概念:Linux一般将文件可存取访问的身份分为3个类别:owner(文件所有者。也叫属主)、group(文件属组)、others(其他人),且3种身份各有read读、write写、execute可执行等权限。例如:

ww.png

ww.png

rwxr-xr-x:
左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义others(其他人)

r:  readable  读
w:  writable  写
x:  excutable  可执行

不同权限位对文件和目录所代表的含义

00

例如:上面的图片tcsd.conf文件只要用户tss自己有读取和修改权限,组和其他人没有任何权限。terminfo目录,目录拥有者root可以对里面文件进行增删改的操作,组内的用户其他人只能对其查看文件列表和属性信息。

权限组合机制

01

总结:无权限表示为0,只要记住r=4,w=2,x=1,就可以在每一组的权限位相加,快速用数字表示表示权限。例如:rw-rw-r– =664:rw-=4+2+0,r–=4+0+0

进程对文件访问权限应用模型

进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
否则,就只能应用other的权限;

权限管理命令

1.chmod 改变权限
有三类用户权限:u文件所有者权限。g属组权限 。 o其他人权限。a代表u,g,o所有

  • chmod [-R] xyz 文件名或目录名
    直接用权限分数修改,例如要把文件abc权限改为 rwxr–r–,对应的权限分数为[4+2+1][4+0+0][4+0+0]=744
    ~]# chmod 744 abc
  • chmod [-R] u=权限位,g=权限位,o=权限位 文件名或目录名
    赋权表示法,直接操作一类用户的所有权限位rwx
    例如:把/tmp/functions 组权限改为rw-
    [root@dxlcentOS ~]# ll /tmp/functions
    -rw-r–r–. 1 root root 17500 9月 20 2015 /tmp/functions
    [root@dxlcentOS ~]# chmod g=rw- /tmp/functions
    [root@dxlcentOS ~]# ll /tmp/functions
    -rw-rw-r–. 1 root root 17500 9月 20 2015 /tmp/functions
    例如:把/tmp/functions 组和其他人权限改为r-x
    [root@dxlcentOS ~]# chmod go=r-x /tmp/functions
    [root@dxlcentOS ~]# [root@dxlcentOS ~]# ll /tmp/functions
    [root@dxlcentOS ~]# ll /tmp/functions
    -rw-r–r–. 1 root root 17500 9月 20 2015 /tmp/functions
    总结:u,g,o可以组合起来用。
  • chmod [ -R] (u,g,o,a)+(r,w,x) 文件名或目录名.
    授权表示法,直接操作一个用户的一个权限位
    例如:修改把文件my 组和其他人增加w权限

[root@dxlcentOS ~]# ll my
-rw-r–r–. 1 root root 0 10月 4 19:30 my
[root@dxlcentOS ~]# chmod go+wx my
[root@dxlcentOS ~]# ll my
-rw-rwxrwx. 1 root root 0 10月 4 19:30 my
为 /tmp/functions 文件都增加可执行权限
[root@dxlcentOS ~]# ll /tmp/functions
-rw-r–r–. 1 root root 17500 9月 20 2015 /tmp/functions
[root@dxlcentOS ~]# chmod a+x /tmp/functions
[root@dxlcentOS ~]# ll /tmp/functions
-rwxr-xr-x. 1 root root 17500 9月 20 2015 /tmp/functions
选项 : -R ,递归修改,用于把目里面的文件一起跟着修改。
普通用户仅能修改属主属于自己的文件权限

2.chown改变文件拥有者,仅root用户可改

chown [-R] 用户名 文件或目录名
chown [-R] 用户名:组名 文件或目录名
例如:把/tmp/functions 属主改为www
[root@dxlcentOS ~]# ll /tmp/functions
-rwxr-xr-x. 1 root root 17500 9月 20 2015 /tmp/functions
[root@dxlcentOS ~]# chown www /tmp/functions
[root@dxlcentOS ~]# ll /tmp/functions
-rwxr-xr-x. 1 www root 17500 9月 20 2015 /tmp/functions
[root@dxlcentOS ~]# chown dxl:distro /tmp/functions #把/tmp/functions 属主改为dxl,属组改为distro
[root@dxlcentOS ~]# ll /tmp/functions
-rwxr-xr-x. 1 dxl distro 17500 9月 20 2015 /tmp/functions
-R ,递归修改,用于把目里面的文件一起跟着修改。

3.chgrp 改变所属群组,仅root用户可改

chown [-R] 组名 文件或目录名
-R ,递归修改,用于把目里面的文件一起跟着修改。
例如:把/tmp/mylinux目录属组改为distro
[root@dxlcentOS tmp]# ll -d mylinux
drwxr-xr-x. 2 root root 6 10月 2 15:17 mylinux
[root@dxlcentOS tmp]# chgrp distro mylinux
[root@dxlcentOS tmp]# ll -d mylinux
drwxr-xr-x. 2 root distro 6 10月 2 15:17 mylinux

总结:用户对目录有写权限,但对目录下的文件没有写权限时,不能改此文件内容,但是可以删除此文件。目录就好像你的抽屉,别人给你一份不能打开包装的文件,你可以放进抽屉,也可以扔到垃圾桶去,就这个道理。

umask:文件的权限反向掩码,遮罩码
umask MASK: 设置umask
[root@dxlcentOS tmp]# umask
0022 #第一个0是特殊权限位,后面再说
创建文件和目录时默认的权限:
文件:666-umask(022)=644(rw-r–r–)
目录:777-umask(022)=755(rwxr-xr-x)
例如

[root@dxlcentOS tmp]# touch uuu
[root@dxlcentOS tmp]# mkdir duu
[root@dxlcentOS tmp]# ll -d uuu duu
drwxr-xr-x. 2 root root 6 10月 4 20:12 duu
-rw-r–r–. 1 root root 0 10月 4 20:12 uuu

install命令
install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。

用法:
用法:install [选项]… [-T] 源文件 目标文件
或:install [选项]… 源文件… 目录
或:install [选项]… -t 目录 源文件…
或:install [选项]… -d 目录…
选项:
-b 类似–backup 但不接受参数
-c (忽略)
-C, –compare 比较每组源文件和目标文件,在一些情况下不修改目标文件
-d, –directory 将所有参数视为目录名称;为指定的目录创建所有组件
-D 创建目标目录的所有必要的父目录,然后将源文件复制至该目录
-g, –group=组 自行设置所属组,而不是进程目前的所属组
-m, –mode=模式 自行设置权限模式(像chmod),而不是rwxr-xr-x
-o, –owner=所有者 自行设置所有者(只适用于超级用户)
-p, –preserve-timestamps 修改源文件的访问/修改时间以与目标文件保持一致
-s, –strip 拆解符号表
–strip-program=程序 指定拆解二进制文件的程序
-S, –suffix=后缀 覆盖常用备份文件后缀
-t, –target-directory=目录 将源文件所有参数复制到指定目录
-T, –no-target-directory 将目标文件视为普通文件
-v, –verbose 创建目录时显示其名称
–preserve-context 保持SELinux 的安全环境
-Z, –context=CONTEXT 设置文件和目录的SELinux 安全环境
–help 显示此帮助信息并退出
–version 显示版本信息并退出

install和cp命令区别:
1、最重要的一点,如果目标文件存在,cp会先清空文件后往里写入新文件,而install则会先删除掉原先的文件然后写入新文件。这是因为往正在 使用的文件中写入内容可能会导致一些问题,比如说写入正在执行的文件可能会失败,比如说往已经在持续写入的文件句柄中写入新文件会产生错误的文件。而使用 install先删除后写入(会生成新的文件句柄)的方式去安装就能避免这些问题了;
2、install命令会恰当地处理文件权限的问题。比如说,install -c会把目标文件的权限设置为rwxr-xr-x;
3、install命令可以打印出更多更合适的debug信息,还会自动处理SElinux上下文的问题。
mktemp命令,用来创建临时文件供shell脚本使用。
用法:mktemp [OPTION]… [TEMPLATE]

选项
-q:执行时若发生错误,不会显示任何信息;
-u:暂存文件会在mktemp结束前先行删除;
-d:创建一个目录而非文件。
例如:不加-d,默认是创建临时文件
[root@dxlcentOS ~]# mktemp /tmp/tmpd..XXX
/tmp/tmpd..268
[root@dxlcentOS ~]# mktemp -d /tmp/tmpd..XXX
/tmp/tmpd..Hd6 创建临时目录

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:/87650

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐  万达娱乐主管QQ  万达注册  万达登录  万达招商QQ  guoqibee.com  测试  万达直属QQ  万达娱乐主管  万达主管