码迷,mamicode.com
首页 > 系统相关 > 详细

Linux篇 | 用户、组和权限(二)

时间:2019-03-18 17:03:09      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:...   删除组   灵活   cab   程序   text   userdel   上下   批量修改   

用户和组的管理命令

用户管理命令

  • useradd
  • usermod
  • userdel

    组账号维护命令

  • groupadd
  • groupmod
  • groupdel

    一.用户创建:useradd

    1.创建用户

    默认值设定:/etc/default/useradd(查看命令“useradd -D”)

    注释:
    1.当我们创建用户不使用参数时(例如useradd 用户名),用户的UID、家目录等信息有一个默认值,就存放在/etc/default/useradd文件里。
    2.当我们创建好用户,查看用户家目录会发现里面有一些隐藏文件,这些隐藏文件的模板就存放在/etc/skel文件夹里,并且这些模板也是隐藏文件,查看使用“ls -a /etc/skel”。重要的是,如果我们在/etc/skel文件夹里创建文件(不区别创建的是否是隐藏文件),在新建用户后,查看该用户家目录的隐藏文件,会发现你创建的那个文件。

显示或更改默认设置

创建用户的格式:
useradd [options] LOGIN
>[options]选项参数如下:
>-u UID
>-o 配合-u 选项,不检查UID的唯一性
>-g GID 指明用户所属基本组,可为组名,也可以GID
>-c "COMMENT“ 用户的注释信息
>-d HOME_DIR 以指定的路径(不存在)为家目录
>-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
>-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
>-N 不创建私用组做主组,使用users组做主组
>-r 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
>-m 创建家目录,用于系统用户
>-M 不创建家目录,用于非系统用户

创建用户的参数还可以搭配使用
>useradd -d
>useradd –d -s SHELL
>useradd –d –b BASE_DIR
>useradd –d –g GROUP

练习题

1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为
"Gentoo Distribution"
2.创建下面的用户、组和组成员关系:
名字为webs 的组
用户nginx,使用webs 作为附加组
用户varnish,使用webs 作为附加组
用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish,
mysql密码都是magedu

新建用户的相关文件和命令

  • /etc/default/useradd
  • /etc/skel/*
    上面两个文件在“注释”里已说明
  • /etc/login.defs

    此文件定义了新建用户账户全部的默认设置

  • newusers 批量创建用户,密码不会被同步,所以配合chpasswd批量创建密码

    命令格式:newusers 特定格式的文件
    批量创建用户示例:
    >1.在Linux系统centos7,复制/etc/passwd文件里的用户到新文件user.txt(注意用户格式)
    >2.将文件user.txt传输到另一个Linux系统centos6
    >3.在centos6上批量创建用户:newusers user.txt
    >4.查看是否批量创建成功:getent passwd
    >注意:这些批量创建的用户没有密码口令,所以要借助下面的命令“chpasswd”来批量创建口令。

  • chpasswd 批量修改用户的密码口令,一般配合上面的newusers使用

    单个修改用户密码口令
    >echo 用户名:密码 | chpasswd

    批量修改用户密码口令
    >1.创建一个密码文件passwd.txt(格式:每行“用户名:密码”)
    >2.批量修改密码 cat passwd.txt | chpasswd
    >3.验证(每设置或修改一个东西,都要验证,这样出错后立马就能知道,而且考试如果没有验证步骤直接挂)

2.修改用户属性

一般创建用户后不会经常修改用户的属性,在搭建服务用不同用户测试的时候可能会较多用到。

命令格式:usermod [OPTION] login
>[options]选项参数如下:
>-u UID: 新UID
>-g GID: 新主组
>-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被
覆盖;若保留原有,则要同时使用-a选项
>-s SHELL:新的默认SHELL
>-c ‘COMMENT‘:新的注释信息
>-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,
同时使用-m选项
>-l login_name: 新的名字
>-L: lock指定用户,在/etc/shadow 密码栏的增加"!"号
>-U: unlock指定用户,将 /etc/shadow 密码栏的"!"号拿掉
>-e YYYY-MM-DD: 指明用户账号过期日期
>-f INACTIVE: 设定非活动期限(即不登录多少天就锁住)

3.删除用户

命令格式:userdel [OPTION]... login
>[options]选项参数如下:
>-r: 删除用户家目录
>注意:带“r”删除用户,是删除用户和用户的数据
不带“r”删除用户,只删除用户,用户的数据删除不了。

4.查看用户相关的id信息

经常用来,判断这个用户存在不存在。

命令格式:id [OPTION]... [USER]
>[options]选项参数如下:
>-u: 显示UID
>-g: 显示GID
>-G: 显示用户所属的组的ID
>-n: 显示名称,需配合ugG使用

5.切换用户或以其他用户身份执行命令

切换用户分两种:“部分切换”和“完全切换”,二者不用比较用哪个好,根据不同的需求进行选择。区分二者,可以查看家目录进行区分,我一般喜欢用完全切换。重要的是,切换用户后,想退出,一定要输入“exit”退出,而不是“用切换命令切换到以前的用户”!

命令格式:su [options...] [-] [user [args...]
部分切换:su 用户名
完全切换:su - 用户名

  • 完全切换到管理员root:“su -”和“su - root”
  • root 切换至其他用户无须密码;非root用户切换时需要密码
  • "su -"与“su -l”和“su --login”的效果一样,但一般用"su -",比较方便。

有时候我们切换到root,只是想查看一个普通用户没有权限的文件,可切换过去,看完再切换回来会很麻烦,有一个“- c”的参数可以解决此问题。

示例:普通用户niubin切换root用户查看文件,查看完直接退出
格式:su - root -c "cat 文件路径"

6.设置密码

命令格式:passwd [OPTIONS] UserName
修改指定用户的密码,常用选项如下:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码,这个选项很常用,示例如下:
>echo "用户要设置的密码" | --stdin 用户名

7.修改用户密码策略

命令格式:chage [OPTION]... LOGIN
使用此命令和修改“/etc/shadow”文件一样,但建议使用命令修改,不要修改“/etc/shadow”文件。常用的选项如下:
-d LAST_DAY
-E --expiredate
-I --inactive
-m --mindays
-M --maxdays
-W --warndays
-l 显示密码策略

示例:
chage -d 0 tom 下一次登录强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom

二.组创建:group

1.用户组的创建

命令格式:groupadd [OPTION]... group_name
常用选项如下:
-g GID 指明GID号;
-r 创建系统组(CentOS 6: ID<500;CentOS 7: ID<1000)

2.修改组的属性

命令格式:groupmod [OPTION]... group
常用选项如下:
-n group_name: 新名字
-g GID: 新的GID

3.删除组

groupdel GROUP
注意:我们删除一个组时可能会报错说删除不了,是因为这个组是一个用户的主组,想要删除这个组,先把这个用户删除在删这个组。(或者把这个用户的主组指定到别的组)

4.更改组的密码(控制辅助组,不是主组)

命令格式:gpasswd [OPTION] GROUP
常用选项如下:
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表

临时切换主组(不常用)

newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码

5.更改和查看组成员(控制辅助组,不是主组)

命令格式:groupmems [options] [action]
常用选项如下:
>-g, --group groupname 更改为指定组 (只有root)

常用参数如下:
>-a, --add username 指定用户加入组
>-d, --delete username 从组中删除用户
>-p, --purge 从组中清除所有成员
>-l, --list 显示组成员列表

groups [OPTION].[USERNAME]... 查看用户所属组列表

传统文件权限

一.文件属性

技术图片

使用"ls -l 文件名"或"ll 文件名"查看文件的属性,如上图所示。下面我们具体聊聊文件属性格式7个分段的含义:

1.“文件所有者”和“文件所属组”

和表面意思一样,“文件所有者”和“文件所属组”不做多解释。重点需要知道怎么改“文件所有者”和“文件所属组”。

  • chown 设置文件的所有者
  • chgrp 设置文件的属组信息
修改文件的属主(所有者)和属组(所属组)

修改文件的属主:chown
>chown [OPTION]... [OWNER][:[GROUP]] FILE...
>chown [选项] [所有者]:[所属组] 文件 (冒号可以用“.”代替)
>选项有:-R 递归

修改文件的属组:chgrp
>chgrp [OPTION]... GROUP FILE...
>chgrp [选项] [所属组] 文件 (冒号可以用“.”代替)
>选项有:-R 递归

2.文件权限

文件的权限主要针对三类对象进行定义
  • owner 属主, u
  • group 属组, g
  • other 其他, o
每个文件针对每类访问者都定义了三种权限
  • r Readable (读取)
  • w Writable (修改)
  • x eXcutable(执行)

    文件:
    >r 可使用文件查看类工具获取其内容
    >w 可修改其内容
    >x 可以把此文件提请内核启动为一个进程

目录(文件夹):
>r 可以使用ls查看此目录中文件列表
>w 可在此目录中创建文件,也可删除此目录中的文件
>x 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录
>X 只给目录x权限,不给文件x权限

文件的类别

可以看到文件属性最开始的字符是“-”,这个代表文件,“d”代表目录,“”

3.文件权限操作

文件权限操作命令:chmod
文件权限(rwx|X)

技术图片

文件权限操作分两种:“模式法”和“数字法”

  • 重点:目录里的文件能不能删除,在于“用户对目录”有没有删除的权限,而不是“用户对目录里文件”有没有删除的权限。(删文件是修改了目录的属性如节点编号)
  • 大写“X”权限只能加在目录上,代表的含义是:给此目录和子目录添加“执行”权限,对于子文件,如果原来“属主、属组、其他人”这任意一个有“执行”的权限,那目录添加大写“X”权限后,子文件都有执行的权限;如果子文件原来没有执行权限,那目录添加大写“X”权限后,子文件不会有“执行”权限。
模式法

格式:chmod who opt per file
who:u(属主),g(属组),o(其他人),a(所有人,包含u,g,o)
opt:+(添加),-(删除),=(等于)
per:r(读取),w(修改),x(执行)
>示例:给文件f1.txt的属主添加“rw”的权限
>chmod u+rw f1.txt
>或者chmod u=rw f1.txt

数字法

原理:
>数字法是根据模式法来的。它把有权限的用1表示,没权限的用0表示,然后得出
>3组由0和1组合的数字。把这3组数字看做二进制,接下来我们把二进制转换为
>十进制,得出3个数字,如下面示例:
属主 属组 其它人
> rwx rw- r--
> 111 110 100(有权限的用1表示,没权限的用0表示)
> 7 6 4(转换为十进制)
>由上面总结得出:r=4;rw=6;rwx=7最后就是r=4,w=2,x=1

r = 4
w = 2
x = 1
例如:
640 rw-r-----
755 rwxr-xr-x
0 --------- (0表示什么权限都没有)

命令格式:chmod 数字 文件或文件夹

面试题

  • 提问:用户wang复制一个文件到一个目录,需要什么权限。
    答:用户wang对文件有读取的权限,对目录有写和执行的权限,这两个是最基础的。
  • 提问:用户mysql删除了自己的家目录,怎么恢复?
    答:分三步。
    1. cp -a /etc/skel /home/mysql 复制用户家目录的隐藏文件,每个用户都有,模板是"/etc/skel"文件夹里的隐藏文件。
    2. chown -R mysql:mysql /home/mysql/ 更改用户家目录其里面的文件和文件夹的“属主、属组"
    3. chmod 700 /home/mysql 更改用户mysql的家目录的“属主、属组”
      4.ls -alR /home 查看

3.文件和文件夹的默认权限

1.间接修改

有时候我们发现,“管理员root创建的文件和文件夹”与“普通用户创建的文件和文件夹”的权限不一样。比如说:root新建文件的权限都是“622”,普通用户新建的文件全是“755”。这是因为系统有一个指令“umask”,它间接的影响了新建文件和文件夹的权限。

直接输入umask可看到umask的值。

因为“执行”权限的操作很危险,如果一个病毒脚本拥有了“执行”权限,后果是你运行这个文件就会中病毒。可谁知道它是不是病毒文件呢?所以,系统默认将文件的“执行”权限都去掉了,文件夹如果去掉“执行”权限就进入不了文件夹,所以没被去掉。
而我们新建文件和新建文件夹的权限是怎么来的呢?就是(umask公式):

0777 - umask值 = 新建文件夹权限
0666 - umask值 = 新建文件权限

结论:umask的值越大,新建文件和文件夹的权限就越小,系统就越安全。

修改umask

  • 临时生效,退出后就会失效:umask 数字
  • 永久生效:只对当前用户永久生效。编辑用户家目录的隐藏文件“.bashrc”,添加“umask 数字”,退出重新登录后生效。如不想退出,使用“source 文件路径”可立马生效。
  • 对所有用户永久生效(不建议):修改“/etc/bashrc”,添加“umask 数字”,“source 文件路径”立马生效。但是,不建议修改此文件,会不稳定!!!
2.正确修改umask

上面说的umask公式其实不准确,是有错误的。比如说:

设置umask的值是145,那root新建文件的权限是666-145=521.
属主和其他人都有“执行”权限,这样很危险。
新建文件,查看权限可得出,权限是622,并不是521.
新建文件夹的权限是632.所以这个公式对文件夹是有效的,没问题的。

那新建文件的权限到底是怎么算出的呢?
原理:
假设设置umask的值是145,那么文件权限值的算法过程如下。
第一步:转换十进制为二进制“666转成110110110”,“145转成001100101”
第二步:将“umask的二进制”和“666的二进制”进行对位,“umask的二进制”是0的,“666的二进制”相应的位保持不变,例如是1就是1。“umask的二进制”是1的,“666的二进制”相应的位也是1,那么1变为0;如果不是1是0,那么保留“666的二进制”位。
转换前:
110110110
001100101
转换后:
110010010
第三步:将转换后的二进制,三个位为一组,在转换为十进制,得出结果是622.

简便算法:

权限值= “666 - umask值(结果有奇数,奇数加1;偶数保留)”

总结:

  1. 对目录:权限值 = 777 - umask值;对文件:权限值= “666 - umask值(结果有奇数,奇数加1;偶数保留)”
  2. umask -p 可用于重定向,比如重定向到用户的家目录的“.bashrc”文件。
  3. 用户家目录“.bashrc”文件里,如果有两条设置umask的命令,那么最下面那条生效。会覆盖上面的命令。
  4. 查看umask的值:umask(或者 umask -S )

特殊权限

  • SUID, SGID, Sticky
  • 数字法表示“SUID, SGID, Sticky”是“4,2,1”
  • 三种常用权限:r, w, x --> user, group, other
  • 安全上下文
  • 前提:进程有属主和属组;文件有属主和属组
    (1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有
    执行权限
    (2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
    (3) 进程访问文件时的权限,取决于进程的发起者
    (a) 进程的发起者,同文件的属主:则应用文件属主权限
    (b) 进程的发起者,属于文件属组;则应用文件属组权限
    (c) 应用文件“其它”权限

1.SUID权限

  • SUID作用:作用于二进制可执行的文件的所有者位上
  • SUID功能:执行此文件的用户将临时继承此文件所有者的权限

  • SUID只对二进制可执行程序有效
  • SUID设置在目录上无意义
  • 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有
    执行权限
  • 启动为进程之后,其进程的属主为原程序文件的属主
  • 有SUID权限的文件都是红色的

权限设定:
chmod u+s 文件路径
chmod u-s 文件路径

2.SGID权限

可执行文件上的SGID权限

  • SGID作用:作用于二进制可执行的文件的所属组位上
  • SGID功能:执行此文件的用户将临时继承此文件所属组的权限

  • 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有
    执行权限
  • 启动为进程之后,其进程的属组为原程序文件的属组

权限设定:
chmod g+s 文件路径
chmod g-s 文件路径

目录上的SGID权限

  • SGID作用:作用于目录的所属组位上
  • SGID功能:此目录中新建文件的所属组将自动从此目录继承

  • 默认情况下,用户创建文件时,其属组为此用户所属的主组
  • 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件
    所属的组为此目录的属组
  • 通常用于创建一个协作目录

权限设定:
chmod g+s 目录路径
chmod g-s 目录路径

3.Sticky

  • sticky作用:作用在目录
  • sticky功能:此目录的文件只能被所有者或root删除

  • sticky设置在文件上无意义
  • sticky只作用在“其它人”位上

设定文件特定属性

因为root账户权限太大,容易误删除。通过设定文件特定属性,约束root账户。

  • “chattr +i 文件路径” 使用此命令,所以用户包括root不能“删除、改名、更改”文件
    注释:“chattr”修改的不是文件的权限,而是文件的特殊属性
  • “chattr +a 文件路径” 只能追加内容,不能删除文件和修改文件里的内容。
  • "lsattr 文件路径" 显示文件特定属性

总结

特殊权限 和 特殊属性 依赖Linux的文件系统,如果换一个文件系统,使用特殊权限和特殊属性的命令将不生效,例如Windows系统的“NTFS32文件系统”

访问控制列表

上面的权限设置(基本权限、特殊权限、特殊属性)都属于“传统权限”,操作起来很麻烦,有的功能还无法实现(例如用root用户创建一个文件,在文件原有属性不变的情况下,让用户wang不能访问,传统的就不行,但ACL可以。),只能控制(属主、属组、其他人)简单的权限。不如ACL强大,下面我们来说明ACL。

  • ACL:Access Control List,实现灵活的权限管理
  • ACL生效顺序:所有者,自定义ACL用户,自定义ACL组,其他人
  • 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
  • CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
  • CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
    tune2fs –o acl /dev/sdb1
    mount –o acl /dev/sdb1 /mnt/test

1.添加ACL

setfacl -m u:用户名:权限 文件或目录
setfacl -m g:组名:权限 文件或目录

添加ACL权限后,查看文件属性会出现+号。并且,添加了ACL权限后,所属组的权限不是所属组了,是ACL中mask的权限,具体解释在下面的“查看ACL”。
技术图片

2.删除ACL

  • setfacl -x u:用户名 文件或目录
  • setfacl -X 文件或目录
  • 有时候使用“-x”参数删除ACL后,在查看文件或目录会看到“+”号依然存在,证明删除ACL不彻底,那么就可以使用setfacl -b 文件或目录(目录要加-R参数)就可以彻底清除ACL,达到还原文件或目录权限属性的效果。

3.查看ACL

getfacl 文件或目录

示例:

  • mount -o acl /directory因为Centos7之前的ACL不是默认安装,所以用到ACL需要安装。这个命令是“给目录挂载特殊权限ACL”,“-o”参数是挂载特殊权限的意思。
  • getfacl file |directory查看文件或目录的ACL
  • setfacl -m u:wang:rwx file|directory给用户设置ACL权限
  • setfacl -Rm g:sales:rwX directory递归的给目录及其里面的文件设置组的ACL
  • setfacl -M file.acl file|directory将ACL权限设置在文件里,通过调用文件,设置文件或ACL的权限。
  • setfacl -m g:salesgroup:rw file| directory给组设置ACL权限
  • setfacl -m d:u:wang:rx directory参数“-d”是给文件或目录设置默认的ACL权限,之后再次目录下创建文件会继承目录的权限,相当于“继承”的效果
  • setfacl -x u:wang file |directory删除用户ACL的权限
  • setfacl -X file.acl directory参数“-X”是删除“file.txt”文件里的权限,可参考“-M”参数

查看f1.txt的ACL,如下所示:

技术图片

注意:

设置了ACL后,“ll 文件”(查看文件属性),所属组的权限就不是所属组了,是mask的权限了

"mask"的作用

1.作用:
>限制文件或目录的最好权限,所用用户、组的权限都不能比mask的权限>高

2.适用性:
>比如一个文件给10个用户设置了ACL,我的用户权限高,有的低,后>来感觉不安全,要把10个用户的权限设置小一点,一般就得一个一个的去改,但是>直接设置mask的权限,所有用户不能超过mask权限,就能很快的解决问题,不用>再每一个去设置。

3.更改“mask”权限
>1.setfacl -m mask::权限(rwx) 文件---》两个“:”号之间的是mask原来的>>权限
>2.chmod g=rw 文件 --->设置“文件”的mask为“读写”的权限

4.总结:
>更改所属组的权限就是更改“mask”权限,所以用传统命令"chmod"更改所属组的>>权限后,“mask”权限也会被更改。
>更改文件ACL的权限后,“mask”权限也会更改
>更改“mask”权限后,其他所有的用户和组就不能超过“mask”权限。

4.备份和恢复ACL

1.备份或复制一个文件或目录,想保留原有的权限和属性,包括ACL,使用“-p”、“-a”参数。例如:cp -p 源文件/目录 目标文件/目录
2.主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是
tar等常见的备份工具是不会保留目录和文件的ACL信息
>恢复示例:
>getfacl -R /tmp/dir1 > acl.txt(把/tmp/dir1里的所有文件放到acl.txt文件)
>setfacl -R -b /tmp/dir1(彻底清空/tmp/dir1的ACL权限)
>setfacl -R --set-file=acl.txt /tmp/dir1(使用--set-file=acl.txt把/tmp/dir1的ACL权限恢复)
>setfacl --restore acl.txt(“--set-file=acl.txt”参数和“--restore acl.txt”效果等同)
>getfacl -R /tmp/dir1(查看/tmp/dir1里所有文件的ACL权限)

5.其他ACL命令参数:

setfacl -k 目录 (清除默认的ACL权限,可参考“-d”参数)
setfacl -b 文件 (清除所有ACL权限)
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含
UGO的设置,不能象-m一样只是添加ACL就可以
>示例:

>>setfacl --set u::rw,u:wang:rw,g::r,o::- file1

6.练习题

  • 在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:
    tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文
    件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹
  • 备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除
    /testdir/dir中所有ACL权限,最后还原ACL权限

Linux篇 | 用户、组和权限(二)

标签:...   删除组   灵活   cab   程序   text   userdel   上下   批量修改   

原文地址:https://blog.51cto.com/13465487/2364600

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!