650)this.width=650;"src="https://img.baidu.com/hi/jx2/j_0059.gif"alt="j_0059.gif"/>650)this.width=650;"src="https://i"/>

Linux用户,组和权限管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux用户,组和权限管理相关的知识,希望对你有一定的参考价值。

技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享

用户,组,权限


技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享




一、了解什么是用户,组和权限

1.对于linux系统来说,简单明了的特点就是多用户,多任务,也就是说一台linux系统的主机上面可以同时允许多个用户登录,当通过多个终端登录时可以同时使用这台linux的系统,然而对于linux习题来说,一切皆文件,别人和自己的工作任务都是以文件的形式存在的,不同的用户之间岂不是没有隐私或者安全而言,其实在linux上不是这样的,我们可以理解linux把每一个用户分配一间屋子,没有钥匙即权限我们是进不去浏览以及修改文件的,但是既然是一间屋子,那当然也可以允许很多人在一起做实验,而我们在linux中把这样的一子人称为"组";这样解释你们是否就很容易明白了?或者我们可以这样看

二、用户管理

当我们添加一个用户的时候,信息都写在什么地方?

/etc/passwd

#

[[email protected] ~]# head -n 3 /etc/passwd
	root:x:0:0:root:/root:/bin/bash
	bin:x:1:1:bin:/bin:/sbin/nologin
	daemon:x:2:2:daemon:/sbin:/sbin/nologin
	[[email protected] ~]#


#

分析一下用户信息文件的格式:

name:password:UID:GID:GECOS:directory:shell(man 5 passwd命令会显示出passwd文件的信息格式)

用户名:密码(当然是加密的):用户ID:组ID:注释:家目录:用户的shell

当然学习用户管理无非也就是这几个常用的简单命令:

useradd命令:添加用户

useradd  [选项]  登录名

添加一个普通的用户

[[email protected] ~]# useradd www1
[[email protected] ~]#


对于添加用户,我们可以有这样的几种添加方式,

-c, --comment COMMENT:注释信息,一般为Full Name(全名);

[[email protected] ~]# useradd -c "YOUR NAME" www1
[[email protected] ~]#


下面一些简单的命令就不在于演示了:

-d, --home  directory:家目录路径;目标路径不能事先存在,指定一个目录为该用户的家目录;

-g, --gid GROUP:指定用户的基本组组名或GID;

-G, --groups GROUP1(当然这里可以有多个组,[组1,组2...]):用户所属的附加组列表,彼此间用逗号隔开,中间没有空格;

-m, --create-home:强制创建家目录; 

-M:不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes;

-r, --system:创建一个系统账户

[[email protected] ~]# useradd -r www2

###此时注意观察www2的UID,一定是小于999的,因为管理员的UID是1-999

-s, --shell SHELL:用户的登录 shell 名,默认为留空,让系统根据 /etc/default/useradd 中的 SHELL 变量选择默认的登录shell;

[[email protected] ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[[email protected] ~]#


-u, --uid UID:用户 ID 的数字值,用户的UID在centos7版本以上在1000以上,逐渐递增的

注意:创建登录用户时,为其自定义的shell程序必须为可登录shell,且要位于/etc/shells文件中;

下面是一些不常用的选项

useradd -D:显示创建用户时的默认设置;

useradd -D  选项:设置某默认选项;

-e, --expiredate  EXPIRE_DATE:用户账号的过期期限;过期后会被锁定;日期以 YYYY-MM-DD 格式指定

-f, --inactive INACTIVE:密码过期后,账户被彻底禁用之前的天数。0 表示立即禁用,-1 表示禁用这个功能。

有增加就会修改和删除,我们来看一下:

usermod命令:修改账号信息,其实就是和添加用户的功能很相似

-c, --comment  COMMENT

-d, --home  HOME_DIR:修改家目录为新的位置,但一般应该同时使用-m选项以保证原家目录中的文件会移动到新目录中;

-g, --gid GROUP

-G, --groups  GROUP1[,GROUP2,...[,GROUPN]]]:修改时会覆盖原有的附加组;一同使用-a选项,表示为用户添加新的附加组;

-l, --login  NEW_LOGIN:修改当前用户的用户名;

-s, --shell  SHELL更改用户的shell

-u, --uid  UID重新指定用户的UID

-L, --lock:锁定用户的密码。这会在用户加密的密码之前放置一个“!”

-U, --unlock:解锁用户的密码。这将移除加密的密码之前的“!”

userdel命令:删除用户账号

userdel [选项]  登录名

-r, --remove:用户主目录中的文件将随用户主目录和用户邮箱一起删除


名称解析:groupname <--> gid 

解析库:/etc/group

group_name:password:GID:user_list

组名称:组密码:组ID:组成员

passwd命令:密码修改或者管理的命令

当登录的用户执行passwd表示修改自己的密码

[[email protected] ~]# passwd
Changing password for user root.
New password: 
BAD PASSWORD: The password contains the user name in some form
Retype new password: 
passwd: all authentication tokens updated successfully.
[[email protected] ~]#


root可以修改所有人的密码

[[email protected] ~]# passwd www
Changing password for user www.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[[email protected] ~]#


由此可见,root修改用户的密码根本不用确定,当普通用户修改自己的密码时会首先要求验证当前的用户身份

passwd命令很简单,常用的几个选项:

选项:

-l:锁定密码

-u:解锁解密

-d:清除密码

从刚才的例子我们看出,修改的密码都是看不见的,因此我们可以通过管道的命令来确定我们输入密码的正确性,当然也有一定的风险,当然也只有root可以这样的使用

--stdin:从标准输入接收密码;

echo "PASSWORD" | passwd  --stdin  USERNAME
[[email protected] ~]# echo "passwd" | passwd --stdin www
Changing password for user www.
passwd: all authentication tokens updated successfully.
[[email protected] ~]#


这样是不是很清楚的呢?

当我们了解了用户相关用法后,我们要知道这两个文件,有关的配置文件

/etc/login.defs, /etc/default/useradd

同样,查看用户的基本信息命令还是很多的,比如

id命令:查看用户相关的id信息;

id  [OPTION]...  [USER]

-u:仅查看uid

-g:仅查看gid

-G:查看所属的所有组的ID;

-n:显示名称,而非ID;

su命令:switch user

切换用户时:我们一定要注意Linux中的一些细节问题

(1) 不读取目标用户的配置文件(非登录式切换,半切换);

su  USERNAME

(2) 读取目标用户的配置文件(登录式切换,完全切换);

su  -l  USERNAME

su  -  USERNAME

三、组管理

和用户一样,有普通用户和系统用户,组不仅有系统组,普通用户组,还有私有组和附属组

什么是私有组:

私有组就是在用户产生的时候生成的一个与用户名相同的组,只有自己一个人管理和使用

附加组:私有组是用户自己的组,但是用户可以参加到别人的创建的组中去,这样的组我们称之为附加组


一样我们先了解增加的组信息存放在什么地方

/etc/group

[[email protected] ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:


文件信息的格式:

root:$6$fUZ9o45Q$Hr99AVjiSppP9na6MvcjdgQmIc.sASPkArKakfd7T8PuYUqA54SPC7YHrD1xde5nrY/j9ShEj.KeoG89n59b9.:16866:0:99999:7:::

解析:loginname:加密的密码:密码使用的时间:允许密码修改使用最小时间:允许密码修改最大时间:密码警告时间

第一个$后面跟的是密码的算法等级

第二个$后面跟的是salt即产生的随机数

第三个$到"."是加密后的密码

【扩展延伸】

随机数:

熵池:就是存储随机输的地方

伪随机数:软件模拟产生;

用简单的话来说,加密后,我们会添加一些随机数进去,保证加密的等级,而首先我们就会在熵池中进行添加,当熵池中的随机数使用完,我们就需要软件模拟产生一些随机数,是不是有点模糊,了解一下

/dev/random:仅从熵池返回随机数,随机数耗尽时会阻塞进程;

/dev/urandom:先从熵池返回随机数,熵池耗尽时,则从伪随机数生成器返回随机数;


继续组的管理

groupadd命令:添加组

groupadd  [选项]  group

-g  GID:指明GID;

-r, --system:系统组;

groupmod命令:修改组信息

groupmod [选项] GROUP

-g  GID 

-n NEW_NAME:修改组名;

groupdel命令:删除组

groupdel [选项] GROUP

影子口令文件:/etc/shadow

登录名:密码:最近一次的修改时间:密码的最短使用期限:密码最长使用期限:提前警告的天数:非活动期限:账号的禁用日期:保留字段

密码:$加密算法$salt$加密的密码字符串

gpasswd命令:为组添加密码

组密码文件:/etc/gshadow

gpasswd [选项] group

-a USERNAME:把用户添加至组中;

-d USERNAME:从此组中移除此用户;

newgrp命令:登录到一个新组

[[email protected] ~]# newgrp linux
[[email protected] ~]# id
uid=0(root) gid=1004(linux) groups=1004(linux),0(root)
[[email protected] ~]#



chage命令:修改用户账号的各种期限;

四、权限管理:

文件或目录对用户显示的某种限制,比如读写执行,我的文件让谁看,让谁修改,让谁执行,这些都是有一定的权限,下面我们看看:

文件:

r:可获取文件的数据;

w:可修改文件的数据;

x:可将此文件运行为进程;

目录:

r:可使用ls命令获取其下的所有文件列表;但不可以使用“ls -l”去获取详细信息,也不可以cd至此目录中;

w:可修改此目录下的文件列表, 即可以在此目录下创建或删除文件;

x:可以使用"ls -l“命令来获取其下的文件的详细属性信息,也可cd至此目录中;

首先我们了解一写特殊的字符

u=user

g=group

o=other

a=(u+g+o)表示所有人

MODE:

赋权表示法:直接操作一类用户的所有权限位rwx;

u=

g=

o=

a=

[[email protected] test2]$ chmod u=rwx test2.txt 
[[email protected] test2]$ ll
total 0
-rwxrw-r-- 1 www www 0 Mar 12 10:48 test2.txt
[[email protected] test2]$

授权表示法:操作一类用户一位或多位权限(中间不使用逗号)

u+, u-

g+, g-

o+, o-

a+, a-

[[email protected] test]$ chmod a+x test.txt 
[[email protected] test]$ ll
total 0
-rwxrwxr-x 1 www www 0 Mar 12 10:47 test.txt
[[email protected] test]$

********************************************

[[email protected] test]$ chmod u-x,g-x,o-x test.txt
[[email protected] test]$ ll
total 0
-rw-rw-r-- 1 www www  0 Mar 12 10:48 test1.txt
drwxrwxr-x 2 www www 22 Mar 12 10:48 test2
-rw-rw-r-- 1 www www  0 Mar 12 10:47 test.txt
[[email protected] test]$

这样是不是更加的明白呢?

两类用户权限收授机制相同:ug+, ug-, ...

不同类的用户权限不同:u+,g+,o+

[[email protected] test]$ chmod ug-w test.txt
[[email protected] test]$ ll
total 0
-rw-rw-r-- 1 www www  0 Mar 12 10:48 test1.txt
drwxrwxr-x 2 www www 22 Mar 12 10:48 test2
-r--r--r-- 1 www www  0 Mar 12 10:47 test.txt
[[email protected] test]$

****************敲一敲代码看看是否一样呢?**************************

当然我们还是有别的表示方法的

r=4

w=2

x=1

[[email protected] test2]# chmod 646 test2.txt 
[[email protected] test2]# ll
total 0
-rw-r--rw- 1 root root 0 Mar 12 10:48 test2.txt
[[email protected] test2]#

常用选项:

-R, --recursive:递归修改;(小心使用哦)

[[email protected] tmp1]$ chmod -R a=rwx tmp2
[[email protected] tmp1]$ ll
drwxrwxrwx 2 www www 42 Mar 12 10:56 tmp2
[[email protected] tmp1]$ cd tmp2
[[email protected] tmp2]$ ll
-rwxrwxrwx 1 www www 0 Mar 12 10:56 1.txt
-rwxrwxrwx 1 www www 0 Mar 12 10:56 2.txt
-rwxrwxrwx 1 www www 0 Mar 12 10:56 3.txt
[[email protected] tmp2]$

chown命令:

chown [OPTION]... [OWNER][:[GROUP]] FILE...

chown [OPTION]... --reference=RFILE  FILE...

[[email protected] test2]# ll
total 0
-rwxrw-r-- 1 www www 0 Mar 12 10:48 test2.txt
[[email protected] test2]# chown root test2.txt
[[email protected] test2]# ll
total 0
-rwxrw-r-- 1 root www 0 Mar 12 10:48 test2.txt
[[email protected] test2]#

看看上面发生什么,文件已经不是www的了

 常用选项:

-R, --recursive:递归修改;

********************这一个就不演示了**************************

chgrp命令:

chgrp [OPTION]... GROUP FILE...

chgrp [OPTION]... --reference=RFILE FILE...

刚才我们把文件拥有者改了,那么组能不能改呢?

[[email protected] test2]# chgrp root test2.txt 
[[email protected] test2]# ll
total 0
-rwxrw-r-- 1 root root 0 Mar 12 10:48 test2.txt
[[email protected] test2]#


这完全可以说是自己创建的文件吗?哈哈 你看明白了吗

umask:显示或设定文件模式掩码

文件:

666-umask

[[email protected] test2]# ll
total 0
-rw-r--r-- 1 root linux 0 Mar 12 11:11 1.txt
[[email protected] test2]# umask
0022
[[email protected] test2]#

目录:

777-umask

[[email protected] test2]# ll
total 0
-rw-r--r-- 1 root linux 0 Mar 12 11:11 1.txt
drwxr-xr-x 2 root linux 6 Mar 12 11:14 nihao
[[email protected] test2]# umask
0022
[[email protected] test2]#


注意:之所以文件用666去减,表示文件默认不能有执行权限;如果减得的结果中,u,g或o有执行权限时,则需要加1;

那我们在终端中看的更加仔细点吧


显示:

umask

管理员和普通用户的掩码还是不一样的累

你看?

管理员:

[[email protected] /]# umask
0022
[[email protected] /]#

                                普通用户

[[email protected] ~]$ umask
0002
[[email protected] ~]$

设定:

umask MASK

[[email protected] test2]# umask
0022
[[email protected] test2]# umask 0023
[[email protected] test2]# umask
0023
[[email protected] test2]#

注意:此设定仅对当前shell进程有效;


本文出自 “Jasonforcto” 博客,请务必保留此出处http://xuelong.blog.51cto.com/10573089/1750184

以上是关于Linux用户,组和权限管理的主要内容,如果未能解决你的问题,请参考以下文章

用户,组和权限

Linux用户组和权限管理

linux学习—权限管理

Linux系统 用户群组和权限

权限管理与读写执行

linux的用户群组和权限