linux 用户和组管理

1 概述

Linux系统是一个多用户多任务的分时操作系统

任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。。

每个用户账号都拥有一个惟一的用户名和各自的口令。



2 用户账户管理

useradd 创建新用户

语法

useradd(选项)(参数)

选项

-d<登入目录>:指定用户登入时的启始目录;

-e<有效期限>:指定帐号的有效期限;

-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;

-g<群组>:指定用户所属的群组;

-G<群组>:指定用户所属的附加群组;

-r:建立系统帐号;

-s<shell>:指定用户登入后所使用的shell;

-u<uid>:指定用户id。

参数

用户名:要创建的用户名。

实例

新建用户加入组:

useradd –g sales jack –G company,employees

建立一个新用户账户,并设置ID:

useradd caojh -u 544

passwd 更改密码

语法

passwd(选项)(参数)

选项

-d:删除密码,仅有系统管理者才能使用;

-f:强制执行;

-k:设置只有在密码过期失效后,方能更新;

-l:锁住密码;

-s:列出密码的相关信息,仅有系统管理者才能使用;

-u:解开已上锁的帐号。

参数

用户名:需要设置密码的用户名。

存放用户信息的文件

/etc/passwd

/etc/shadow

存放组信息的文件

/etc/group

实例

[root@localhost ~]# passwd linuxde     # 更改或创建linuxde用户的密码;

Changing password for user linuxde.

New UNIX password:           # 请输入新密码;

Retype new UNIX password:    # 再输入一次;

passwd: all authentication tokens updated successfully.  # 成功;

userdel 删除用户

语法

userdel(选项)(参数)

选项

-f:强制删除用户,即使用户当前已登录;

-r:删除用户的同时,删除与用户相关的所有文件。

参数

用户名:要删除的用户名。

实例

userdel命令很简单,比如我们现在有个用户linuxde,其家目录位于/var目录中,现在我们来删除这个用户:

userdel linuxde       # 删除用户linuxde,但不删除其家目录及文件;

userdel -r linuxde    # 删除用户linuxde,其家目录及文件一并删除;

请不要轻易用-r选项;他会删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。

chown 变更文件或目录的拥有者或所属群组

只有文件主和超级用户才可以便用该命令。

语法

chown(选项)(参数)

选项

-c:效果类似“-v”参数,但仅回报更改的部分;

-f:不显示错误信息;

-h:只对符号连接的文件作修改,而不更改其他任何相关文件;

-R:递归处理,将指定目录下的所有文件及子目录一并处理;

-v:显示指令执行过程;

参数

用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;

文件:指定要改变所有者和工作组的文件列表。

实例

将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu:

chown -R liu /usr/meng

chmod 变更文件或目录的权限

chmod [OPTION]... MODE[,MODE]... FILE...

chmod [OPTION]... OCTAL-MODE FILE...

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

参数

mode:八进制数或符号组合。

file:指定要更改权限的一到多个文件。

选项

-c:当文件的权限更改时输出操作信息。

-f:抑制多数错误消息的输出。

-v:无论文件是否更改了权限,一律输出操作信息。

-R:对目录以及目录下的文件递归执行更改权限操作。

返回值

返回状态为成功除非给出了非法选项或非法参数。

例子

# 查看当前目录(包含隐藏文件)的长格式。

ls -la

  -rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules

# 第1位如果是d则代表目录,是-则代表普通文件。

# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。

# 第2到4位代表当前用户的权限。

# 第5到7位代表组用户的权限。

# 第8到10位代表其他用户的权限。

# 添加组用户的写权限。

chmod g+w ./test.log

# 删除其他用户的所有权限。

chmod o= ./test.log

# 使得所有用户都没有写权限。

chmod a-w ./test.log

# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。

chmod u=rwx, g=rw, o=r ./test.log

# 等价的八进制数表示:

chmod 754 ./test.log

# 将目录以及目录下的文件都设置为所有用户拥有读写权限。

# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!

chmod -R a=rw ./testdir/

# 根据其他文件的权限设置文件权限。

chmod --reference=./1.log  ./test.log

3 用户组管理

groupadd 创建新工作组

语法

groupadd(选项)(参数)

选项

-g:指定新建工作组的id;

-r:创建系统工作组,系统工作组的组ID小于500;

-K:覆盖配置文件“/ect/login.defs”;

-o:允许添加组ID号不唯一的工作组。

参数

组名:指定新建工作组的组名。

实例

建立一个新组,并设置组ID加入系统:

groupadd -g 344 jsdigname

此时在/etc/passwd文件中产生一个组ID(GID)是344的项目。

id显示用户的ID以及所属群组的ID

语法

id [-gGnru]--[help][--version][用户名称]

选项

-g或--group   显示用户所属群组的ID。

-G或--groups   显示用户所属附加群组的ID。

-n或--name    显示用户,所属群组或附加群组的名称。

-r或--real    显示实际ID。

-u或--user    显示用户ID。

实例

[root@localhost ~]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

解释:用户root的UID号码 = 0,GID号码 = 0。用户root是下面组的成员:

root组GID号是:0

bin组GID号是:1

daemon组GID号是:2

sys组GID号是:3

adm组GID号是:4

disk组GID号是:6

wheel组GID号是:10

打印用户名、UID 和该用户所属的所有组,要这么做,我们可以使用 -a 选项:

[root@localhost ~]# id -a

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

4 用户相关系统文件

/etc/passwd

 Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。

这个文件对所有用户都是可读的。它的内容类似下面的例子:

# cat /etc/passwd

root:x:0:0:Superuser:/:

daemon:x:1:1:System daemons:/etc:

bin:x:2:2:Owner of system commands:/bin:

sys:x:3:3:Owner of system files:/usr/sys:

adm:x:4:4:System accounting:/usr/adm:

uucp:x:5:5:UUCP administrator:/usr/lib/uucp:

auth:x:7:21:Authentication administrator:/tcb/files/auth:

cron:x:9:16:Cron daemon:/usr/spool/cron:

listen:x:37:4:Network daemon:/usr/net/nls:

lp:x:71:18:Printer administrator:/usr/spool/lp:

sam:x:200:50:Sam san:/usr/sam:/bin/sh

从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

第一字段:用户名(也被称为登录名)。

第二字段:口令。

第三字段: UID

第四字段: GID

第五字段:用户名全称,这是可选的,可以不设置

第六字段:用户的家目录所在位置

第七字段:用户所用SHELL的类型

 

/etc/shadow

与/etc/passwd中的记录行一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生

第一字段:用户名(也被称为登录名)

第二字段:密码(已被加密)

第三字段:上次修改口令的时间

第四字段:两次修改口令间隔最少的天数

第五字段:两次修改口令间隔最多的天数

第六字段:提前多少天警告用户口令将过期

第七字段:在口令过期之后多少天禁用此用户

第八字段:用户过期日期

第九字段:保留字段

下面是/etc/shadow的一个例子:

# cat /etc/shadow

root:Dnakfw28zf38w:8764:0:168:7:::

daemon:*::0:0::::

bin:*::0:0::::

sys:*::0:0::::

adm:*::0:0::::

uucp:*::0:0::::

nuucp:*::0:0::::

auth:*::0:0::::

cron:*::0:0::::

listen:*::0:0::::

lp:*::0:0::::

sam:EkdiSECLWPdSa:9740:0:0::::

/etc/group

每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。

当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:

组名:口令:组标识号:组内用户列表

"口令"字段存放的是用户组加密后的口令字。这个字段一般为空,或者是*。

"组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。

"组内用户列表"是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

/etc/group文件的一个例子如下:

root::0:root

bin::2:root,bin

sys::3:root,uucp

adm::4:root,adm

daemon::5:root,daemon

lp::7:root,lp

users::20:root,sam

/etc/gshadow

组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。

首先,我们借助 Vim 命令查看一下此文件中的内容:

[root@localhost ~]#vim /etc/gshadow

root:::

bin:::bin, daemon

daemon:::bin, daemon

…………

lamp:!::

文件中,每行代表一个组用户的密码信息,各行信息用 ":" 作为分隔符分为 4 个字段,每个字段的含义如下:

组名:加密密码:组管理员:组附加用户列表

组名

同 /etc/group 文件中的组名相对应。

组密码

对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 "!",指的是该群组没有组密码,也不设有群组管理员。

组管理员

能将用户加入自己管理的群组中,也就免去麻烦 root 了。

不过,由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。

组中的附加用户

该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。

参考

https://www.php.cn/linux/linux-user-manage.html

http://c.biancheng.net/view/842.html

原文地址:https://www.cnblogs.com/ZhouJiaHao/p/13439175.html