linux用户 群组 拥有者,Linux篇 | 用户、组和权限(二)

用户和组的管理命令

用户管理命令

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]... 查看用户所属组列表

传统文件权限

一.文件属性

ec94206d2fbd4e4b5f9cc0fc92f412f1.png

使用"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)

94d5b572be6a18cdf477f1124fdef09b.png

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

重点:目录里的文件能不能删除,在于“用户对目录”有没有删除的权限,而不是“用户对目录里文件”有没有删除的权限。(删文件是修改了目录的属性如节点编号)

大写“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删除了自己的家目录,怎么恢复?

答:分三步。

cp -a /etc/skel /home/mysql 复制用户家目录的隐藏文件,每个用户都有,模板是"/etc/skel"文件夹里的隐藏文件。

chown -R mysql:mysql /home/mysql/ 更改用户家目录其里面的文件和文件夹的“属主、属组"

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;偶数保留)”

总结:

对目录:权限值 = 777 - umask值;对文件:权限值= “666 - umask值(结果有奇数,奇数加1;偶数保留)”

umask -p 可用于重定向,比如重定向到用户的家目录的“.bashrc”文件。

用户家目录“.bashrc”文件里,如果有两条设置umask的命令,那么最下面那条生效。会覆盖上面的命令。

查看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”。

ab64bbf2a6a6ceb9d9b3a128fcc6e7ff.png

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,如下所示:

417f00147519512988403b1600137c40.png

注意:

设置了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权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值