linux–centos用户、组和权限管理概念介绍以及命令的使用方法,附上8道练习题!

用户、组和权限管理概念(centos发行版)

  • 用户概念的介绍:

用户类别:

  1. 管理员,拥有最高权限的用户,不受权限的限制。root
  2. 普通用户,普通用户又分为系统用户和登录用户
  • 系统用户:为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统。
  • 登录用户:登录系统进行权限内的实际操作的用户。通过交互式方式登录

用户标识:UserID, UID
UID的范围是16bits二进制数字:2^16=0-65535
管理员:0
普通用户:1-65635
系统用户:1-499(CentOS6), 1-999(CentOS7)
登录用户:500-60000(CentOS6), 1000-60000(CentOS7)

用户名称与UID之间的解析方法:

根据名称解析库进行:/etc/passwd

test5:x:4011:4011:TEST5,office,111,222:/home/test5:/bin/zsh

  • 用户组概念的介绍:

用户组类别:

  1. 管理员组:root
  2. 普通用户组
    系统组:给系统用户使用的组
    登录组:给登录用户使用的组
  3. 登录组
    用户的基本组:创建用户时默认创建的与用户名同名的组(也叫私有组),也可使用选项指定基本组
    用户的附加组:基本组以外的组
  4. 私有组:创建用户时默认创建的与用户名同名的组,且仅包含一个用户。

 

  • 用户或用户组认证方式:

1、认证过程简述:

通过比对事先存储在密码库中的密码,与登录时提供的密码是否一致;
password library:

/etc/shadow 用户密码库

/etc/gshadow 用户组密码库加密算法

2、加密算法:

  • 对称加密:需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用

 

  • 非对称加密:非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;反之亦然,因为加密和解密使用的是两个不同的密钥。

密钥对:

公钥:public key

私钥: private key

 

  • 单向散列算法:只能加密,不能解密;又称hash函数,Hash函数(也称杂凑函数或杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一般用于产生消息摘要,对密钥进行加密等

定长输出:输出长度是固定的,根据目前的计算技术应至少取128bits长,以便抵抗生日攻击

雪崩效应:预映射值单个位的改变,将引起散列值中一半位的改变。

不可逆:已知一个散列值,要找到预映射的值,使它的散列值等于已知的散列值在计算上是不可行的

算法:此处对算法的编号,能在密码库中找到对应的位。

1、md5:

2、sha:

3、sha224

4、sha256

5、sha384

6、sha512

单向散列算法加解密过程:在计算之时加salt(添加的随机数);设置密码时添加的随机数会被记录下来,当用户使用密码登录时,将随机数添加至密码中再进行加密计算,计算的结果与保存的相同,则认证通过。

3、用户的信息库/etc/passwd

文件格式
name:password:UID:GID:GECOS:directory:shell

各字段介绍:

name: 用户名
password:可以是加密的密码,也可是占位符x;出现x代表密码存在/etc/shadow
UID:用户ID号
GID:用户所属的主组(基本组)的ID号;
GECOS:注释信息,家庭地址,家庭电话等
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;

4、用户密码库/etc/shadow

test1:$6$KgNQWeiK$QehCZac76DUurrSIwge97Bpi3HXTE5nZ/hvM.rqW78PNgRFEpclCcYT2Dv.JkxmEPpPu5MvEmnDEIdrSBm.bX1:17177:0:99999:7:::

各字段介绍:

用户名:test1

加密算法:第1个$和第2个$之间的数字代表加密算法(上文有6个算法)此位的6表示该密码采用sha512加密算法

随机数:第2个$和第3个$之间的“KgNQWeiK”字符串代表salt随机数

加密的密码:第3个$到第1个:之间的所有字符串代表加密后的密码

QehCZac76DUurrSIwge97Bpi3HXTE5nZ/hvM.rqW78PNgRFEpclCcYT2Dv.JkxmEPpPu5MvEmnDEIdrSBm.bX1

最近一次修改密码的时间17177:显示的数字表示从1970年1月1日到更改密码日期之间的天数

最短使用期限0:要等多长时间才能被允许再次修改密码

最长使用期限99999:建议在期限之前修改密码,过期未修改,会发出警告

警告期限7:    密码过期之前,提前警告用户的天数,空字段或0表示没有密码警告期。

非活动期限:过期之后的宽限期,需要修改密码后才能正常登陆,在此期限之间仍未修改密码,则用户被锁定,需要联系管理员才能解锁。空字段表示没有强制密码过期

过期期限:用户过期的日期,表示从1970年1月1日开始的天数。注意:账户过期不同于密码过期,账户过期时,用户将不被允许登陆;密码过期时,用户将不被允许使用其密码登录;空字段表示账户永不过期。可以预先设置账号的有效期

保留字段

5、用户组信息库/etc/group

文件格式
group_name:X:GID:user_list

各字段介绍:

group_name: 用户基本组名
X:可以是加密的密码,也可是占位符x;出现x代表密码存在/etc/shadow
GID:该组的ID号;
user_list:该组的用户成员;以此组为附加组的用户的用户列表;

6、用户组密码库/etc/gshadow

test100:$6$53jWs/UZaFs4y$n7nZZXaT1L4cI96.FqnU8Yw6LIiX4A11OKSbFve/z6zyzTglIjHbOi6F29YUmIL/gHYXZEquTelbZx13J3dAQ/::

各字段介绍:

用户组名:test100

加密算法:第1个$和第2个$之间的数字代表加密算法(上文有6个算法)此位的6表示该密码采用sha512加密算法

随机数:第2个$和第3个$之间的“53jWs/UZaFs4y”字符串代表salt随机数

加密的密码:第3个$到第1个:之间的所有字符串代表加密后的密码n7nZZXaT1L4cI96.FqnU8Yw6LIiX4A11OKSbFve/z6zyzTglIjHbOi6F29YUmIL/gHYXZEquTelbZx13J3dAQ/

管理员:必须是一个逗号分隔的用户名列表,管理员可以更改组密码和成员,管理员也有成员一样的权限

成员:必须是一个逗号分隔的用户名列表,成员可以免密码访问组。

  • 用户和用户组命令的使用方法

  • 用户相关命令useradd、usermod、userdel、passwd、chage

  • useradd命令:创建用户

使用语法:useradd [选项] 登录用户名

选项:

-u, –uid UID:指定UID;默认是上一个用户的UID+1

-g, –gid GROUP:指定基本组ID,此组得事先存在;

-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;将某个用户添加至附加组后,在tail/etc/group时显示的user_list参数的位置会出现刚添加至附加组的用户

-c, –comment COMMENT:指明注释信息;

-d, –home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;

-s, –shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;

-r, –system:创建系统用户;

-f,–inactive 修改密码过期之后的宽限期,0表示立即禁用,-1表示禁用这个功能(永不禁用,即使过了密码宽限期,登录时修改密码后就可以正常使用)

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

注意:创建用户时的诸多默认设定配置文件为/etc/login.defs 

  •         useradd -D:显示创建用户的默认配置;
  • 创建用户时的诸多默认设定配置文件为/etc/login.defs

~]#cat /etc/login.defs

MAIL_DIR /var/spool/mail <==用户默认邮件信箱放置目录

PASS_MAX_DAYS 99999 <==/etc/shadow 内的第 5 栏,多久需变更密码日数

PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏,多久不可重新设定密码日数

PASS_MIN_LEN 5 <==密码最短的字符长度,已被 pam 模块取代,失去效用!

PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏,过期前会警告的日数

UID_MIN 1000 <==使用者最小的 UID,意即小于 1000 的 UID 为系统保留

UID_MAX 60000 <==使用者能够用的最大 UID

SYS_UID_MIN 201 <==保留给用户自行设定的系统账号最小值 UID

SYS_UID_MAX 999 <==保留给用户自行设定的系统账号最大值 UID

GID_MIN 1000 <==使用者自定义组的最小 GID,小于 1000 为系统保留

GID_MAX 60000 <==使用者自定义组的最大 GID

SYS_GID_MIN 201 <==保留给用户自行设定的系统账号最小值 GID

SYS_GID_MAX 999 <==保留给用户自行设定的系统账号最大值 GID

CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立用户家目录?

UMASK 077 <==用户家目录建立的 umask ,因此权限会是 700

USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组

ENCRYPT_METHOD SHA512 <==密码加密的机制使用的是 sha512 这个机制

  • useradd -D:显示创建用户的默认配置;

使用语法:~]# useradd –D 参数

参数含义:

GROUP=100新建账号的初始基本组使用与账号同名的基本组即私有组。

系统上面 GID 为 100 者即是 users 这个群组,此设定项目指的就是让新设使用者账号的初始群组为 users 这一个的意思。 但是我们知道 CentOS 上面并不是这样的,在 CentOS 上面预设的群组为与账号名相同的私有组。

HOME=/home用户创建时在/home下创建一个与用户名相同的家目录

INACTIVE=-1禁用非活动期限,密码过期后是否会失效的设定值,0 代表密码过期立刻失效,-1则是代表密码永远不会失效,如果是数字,如 30 ,则代表过期 30 天后才失效

EXPIRE=账号失效的日期,空字段表示账户永不过期。通常不会设定此项目,但如果是付费的会员制系统,或许这个字段会被设定。

SHELL=/bin/bash默认使用的 shell 程序文件名,系统默认的 shell 就写在这里。假如你的系统为 mail server ,你希望每个账号都只能使用 email的收发信件功能, 而不许用户登入系统取得 shell ,那么可以将这里设定为 /sbin/nologin ,如此一来,新建的使用者预设就无法登入! 也免去后续使用 usermod 进行修改的手续

SKEL=/etc/skel用户家目录参考基准目录,vbird1 家目录/home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的,该用户的环境变量~/.bashrc 就设定妥当的话,您可以到 /etc/skel/.bashrc 去编辑一下,也可以建立 /etc/skel/www 这个目录,那么未来新增使用者后,在他的家目录下就会有 www 那个目录了

CREATE_MAIL_SPOOL=yes建立使用者的 mailbox,是否给用户创建邮件缓冲队列。若是yes

则在/var/spool/mail/目录下创建与用户同名的邮桶用来存放用户接收的邮件。

~]# ls /var/spool/mail/

root  test  test14  test5

  •  useradd -D 选项: 修改默认选项的值;修改的结果保存于/etc/default/useradd文件中;
  • useradd -D [option] 参数: 修改默认选项的值;

只带 -D 选项使用时,useradd 将显示当前的默认值。-D 和其它选项配合使用时,useradd

将为指定的选项更新默认值。有效的“更改默认值”选项有:

-b, –base-dirBASE_DIR

新用户主目录的路径前缀。如果创建新账户时,没有使用 -d 选项,用户的名称将会缀在 BASE_DIR

的后边形成新用户的主目录名。这个选择在 /etc/default/useradd 中设置 HOME 选项。

-e, –expiredateEXPIRE_DATE

禁用此用户账户的日期。此选项在 /etc/default/useradd 中设置 EXPIRE 变量。

-f, –inactiveINACTIVE

密码过期到账户被禁用之前的天数。这个选项在 /etc/default/useradd 中设置 INACTIVE 变量。

-g, –gidGROUP

新用户初始组的组名或 ID (使用了 -N/–no-user-group 或者 /etc/login.defs 中的变量 USERGROUPS_ENAB设置为 no 时)。给出的组必须存在,并且数字组 ID 必须有一个已经存在的项。 这个选项在 /etc/default/useradd 中设置 GROUP 变量。

-s, –shellSHELL

新用户的登录 shell 名。这个选项在 /etc/default/useradd 设置 SHELL 变量。

 

注意:系统管理员负责将默认的用户文件放在 /etc/skel/ 目录中(或者命令行上、/etc/default/useradd

       中指定的任何其它目录)。

修改的结果保存于/etc/default/useradd文件中;

 

  • 示例1:-u创建一个用户名为test且UID为3000的用户

~]# useradd -u 3000 test

~]# tail -1 /etc/passwd

test:x:3000:3000::/home/test:/bin/bash

 

  • 示例2:-g创建用户usercloud并加入到cloud组

~]# useradd -g cloud usercloud

useradd:“cloud”组不存在,  注意组要事先存在

~]# groupadd cloud

~]# tail -1 /etc/group

cloud:x:5003:

~]# useradd -g cloud usercloud

~]# tail -1 /etc/passwd

usercloud:x:4004:5003::/home/usercloud:/bin/bash

 

  • 示例3:-c创建用户dcuser并指定注释信息

~]# useradd -c “duchao 15563966667” duuser

~]# tail -1 /etc/passwd

duuser:x:4005:4005:duchao 15563966667:/home/duuser:/bin/bash

 

  • 示例4:-G创建用户abclinux并添加至附加组mygroup中

~]# groupadd mygroup

[root@localhost ~]# tail -1 /etc/group

mygroup:x:5004:

~]# useradd -G mygroup abclinux

[root@localhost ~]# tail -2 /etc/group

mygroup:x:5004:abclinux

abclinux:x:4006:

 

  • 示例5:-d创建用户test14并将其家目录设置在/tmp/test14

~]# useradd -d /tmp/test14 test14事先不能有/tmp/test14目录

useradd: cannot set SELinux context for home directory /tmp/test14因为selinux设置的原因报错,

~]# tail -1 /etc/passwd

test14:x:4010:4010::/tmp/test14:/bin/bash但是显示用户已经创建,且家目录位置也对,都是假象

~]# su – test14

su: 警告:无法更改到 /tmp/test14 目录: 没有那个文件或目录

~]# ls /tmp

mylinux并没有/tmp/test14

~]# userdel test14删除passwd信息库中test14信息。

~]# tail -1 /etc/passwd

test11:x:4009:4009::/tmp/test11:/bin/bash

~]# getenforce查看selinux状态

Enforcing开启状态

~]# setenforce 0关闭selinux(暂时处理办法)

~]# getenforce

Permissive关闭状态

~]# useradd -d /tmp/test14 test14

~]# ls /tmp

mylinux  test14

~]# su – test14

welcome centos,you have been logged in

Tue Aug 21 17:34:46 CST 2018

[test14@localhost ~]$

setenforce是Linux的selinux防火墙配置命令 执行setenforce 0 表示关闭selinux防火墙。

setenforce命令是单词set(设置)和enforce(执行)连写,另一个命令getenforce可查看selinux的状态。

 

  • 示例6:-s创建用户test5并指定默认shell为sh

先检查当前可用的shell

~]# cat /etc/shells 显示当前系统可用shell

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin

/bin/zsh

安装zsh方法:~]# yum install -y zsh

~]# useradd -s /bin/zsh test5

~]# tail -1 /etc/passwd

test5:x:4011:4011::/home/test5:/bin/zsh

注意:若指定的shell不在/etc/shells的列表中,在安全检查相对严格的时候会报错。

 

示例7:-r创建系统用户

~]# useradd -r -M -g mariadb -s /bin/nologin mariadb

~]# tail -1 /etc/passwd

mariadb:x:998:898::/home/mariadb:/bin/nologin虽然此处看到有家目录,但是home中不存在。

~]# ls /home

abclinux  Core  dc1  duuser  fedora  gentoo  test  test5  usercloud

  • usermod命令:修改用户属性

使用语法:usermod [选项] 登录用户名

选项:

-u, –uid UID:修改用户的ID为此处指定的新UID;

-g, –gid GROUP:修改用户所属的基本组;

-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;

-a, –append:与-G一同使用,用于为用户追加新的附加组;

-c, –comment COMMENT:修改注释信息;

-d, –home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;

-m, –move-home:只能与-d选项一同使用,用于将原来的家目录内容移动到新的家目录;

-l, –login NEW_LOGIN:修改用户名;

-s, –shell SHELL:修改用户的默认shell;

-L, –lock:锁定用户密码;即在用户原来的密码字符串之前添加一个”!”;

-U, –unlock:解锁用户的 密码;

最常用的是usermod –a –G username为用户添加新的附加组,其他实用选项使用方法与useradd相似

  • userdel命令:删除用户

使用语法:userdel [选项] 登录用户名

选项:

-r:删除用户时一并删除其家目录。

  • 示例1:创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001);
    ~]#groupadd -g 5000 distro
    ~]#groupadd -g 5001 peguin
    ~]#useradd -u 4001 -G 5000,5001 gentoo

 

  • 示例2:创建用户fedora,其注释信息为”Fedora Core”,默认shell为/bin/tcsh;
    ~]#useradd -c “Fedora Core” -s /bin/sh fedora

 

  • 示例3:修改gentoo用户的家目录为/var/tmp/gentoo;要求其原有文件仍能被用户访问;~]#usermod -m -d /var/tmp/gentoo gentoo

 

  • 示例4:为gentoo新增附加组netadmin;
    ~]#usermod -G -a netadmin gentoo

 

  • passwd命令:修改用户密码相关参数
  • passwd:修改用户自己的密码;
  • 示例:

~]# passwd

Changing password for user vbird2.

New UNIX password: 这里直接输入新的密码,屏幕不会有任何反应

Retype new UNIX password:  再输入一次同样的密码

 

  • passwd USERNAME:
  • 示例:

~]#passwd vbird2

Changing password for user vbird2.

New UNIX password: 这里直接输入新的密码,屏幕不会有任何反应

BAD PASSWORD: The password is shorter than 8 characters  密码太简单或过短的错误!

Retype new UNIX password:  输入一次同样的密码

passwd: all authentication tokens updated successfully.  竟然还是成功修改了。

当我们要给指定用户修改密码时,通过 root 来设定即可。 root 可以设定各式各样的密码,系统几乎一定会接受,但是用户自己给自己修改密码就要严格遵守密码规则

注意:修改指定用户的密码,但仅root有此权限;root修改其他用户不需要原密码

 

选项:

–stdin :可以透过来自前一个管线的数据,作为密码输入,此种方法设置的密码不需要输入2次密码,缺点是可以通过history命令查看到密码。

-l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;

-u :与 -l 相对,是 Unlock 的意思!

-d: 清除用户密码串

-e : 过期期限,日期;

-S :列出密码相关参数,亦即 shadow 文件内的大部分信息。

-n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数

-x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码

-w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数

-i :后面接『日期』,shadow 的第 7 字段,密码失效日期

 

  • 示例1:使用–stidn修改vbird2的密码为abc543CC

~]#  echo “abc543CC” | passwd  — stdin vbird2

Changing password for user vbird2.

passwd: all authentication tokens updated successfully.

~]# history | tail -2

1012  echo “abc543CC” | passwd  — stdin vbird2

1013  history | tail -2

 

  • 示例2:让 vbird2 每 60 天需要变更密码, 密码过期后 10 天未修改密码就宣告账号失效

~]#  passwd -x 60 -i 10 vbird2

~]#  passwd -S vbird2

vbird2 PS 2015-07-20 0 60 7 10 (Password set, SHA512 crypt.)

密码设定规则:

  密码不能与账号相同;

  密码尽量不要选用字典里面会出现的字符串;

  密码需要超过 8 个字符;

  密码不要使用个人信息,如身份证、手机号码、其他电话号码等;

  密码不要使用简单的关系式,如 1+1=2, Iamvbird 等;

  密码尽量使用大小写字符、数字、特殊字符($,_,-等)的组合。

 

  • chage命令:更改用户密码过期信息

使用语法:chage [选项] 登录名

 

选项:

-l :列出该账号的详细密码参数;

-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD

-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD

-I :后面接天数,修改 shadow 第七字段(密码失效日期)

-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)

-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)

-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

 

示例:

~]#chage –W 7 test5

  • 用户组相关命令groupadd、groupmod、groupdel、gpasswd、newgrp

  • groupadd命令:添加组

使用语法:groupadd [选项] group_name

选项:

-g GID:指定GID;默认是上一个组的GID+1;

-r: 创建系统组;创建系统组时若不指定GID,默认是上一个系统组的GID-1

 

示例1:新建2个用户组,名称为 gp1和gp2

~]#  groupadd –g gp1

~]# tail -1 /etc/group

gp1:x:1200:

 

~]#  groupadd gp2

~]# tail -2 /etc/group

gp1:x:1200:

gp2:x:1201:

 

示例2:创建2个系统组gp3和gp4

~]#  groupadd –r –g 900 gp3

~]# tail -1 /etc/group

gp3:x:900:

 

~]#  groupadd –r gp4

~]# tail -2 /etc/group

gp3:x:900:

gp4:x:899:

  • groupmod命令:修改组属性

使用语法:groupmod [选项] GROUPname

选项:

-g GID:修改GID;

-n new_name:修改组名;

 

示例1:修改gp1的GID号

~]# groupmod -g 1300 gp1

~]# grep gp1 /etc/group

gp1:x:1300:

 

示例2:

~]# groupmod -n gp10 gp1

~]# grep gp10 /etc/group

gp10:x:1300:

  • groupdel命令:删除组

使用语法:groupdel [选项] GROUP

 

示例1:

~]# tail -1 /etc/group

gp10:x:1300:

~]# groupdel gp10

~]# tail -1 /etc/group

gp7:x:899:

  • gpasswd命令:修改组密码

组密码文件位置:/etc/gshadow

使用语法:gpasswd [选项] groupname

示例:

gpasswd test10

正在修改 test100 组的密码

新密码:

请重新输入新密码:

选项:

-a USERNAME:向组中添加用户

-d USERNAME:从组中移除用户

-r :将 groupname 的密码移除

-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)

-M :将某些账号加入这个群组当中

除了 -A 和 -M 选项,其它选项不能联合使用

 

示例:

~]#gpasswd –a test5 mygroup

~]#gpasswd –d test5 mygroup

  • newgrp命令:临时切换指定的组为基本组

只有设定好密码的基本组才能被切换,若是此组就是该用户的附加组,则切换时不需要输入密码,附加组是否设定密码也无所谓。

使用语法:newgrp [-] [group]

 

-: 会模拟用户重新登录以实现重新初始化其工作环境;

使用-切换后命令行提示符变为~%

exit退出当前临时基本组

示例1:

[test5@localhost]/% newgrp test100

密码:

welcome centos,you have been logged in

 

2018年 08月 22日 星期三 01:15:51 CST

[test5@localhost]/%

 

示例2:

[test5@localhost]/% newgrp – test100

密码:

welcome centos,you have been logged in

Wed Aug 22 01:26:20 CST 2018

[test5@localhost]~%

 

  • 用户和用户组辅助命令介绍:id、finger、chfn、whoami、pwck

  • id命令:显示用户的真和有效ID;

使用语法:id [OPTION]… [USER]

选项:

-u: 仅显示有效的UID;

-g: 仅显示用户的基本组ID;

-G:仅显示用户所属的所有组的ID;

-n: 显示名字而非ID;

 

  • finger 可以查阅很多用户相关的信息,大部分都是在 /etc/passwd 这个文件里面的信息!不过,这个指令有点危险,所以centos7版本中已经默认不安装这个软件

安装方法:yum install finger

 

由于 finger 类似指纹的功能,他会将用户的相关属性列出来,其实他列出来的几乎都是 /etc/passwd 文件里面的东西。列出的信息说明如下:

  Login:为使用者账号,亦即 /etc/passwd 内的第一字段;

  Name:为全名,亦即 /etc/passwd 内的第五字段(或称为批注);

  Directory:就是家目录了;

  Shell:就是使用的 Shell 文件所在;

  Never logged in.:figner 还会调查用户登入主机的情况喔!

  No mail.:调查 /var/spool/mail 当中的信箱资料;

  No Plan.:调查 ~vbird1/.plan 文件,并将该文件取出来说明

 

不过是否能够查阅到 Mail 与 Plan 则与权限有关了!因为 Mail / Plan 都是与使用者自己的权限设定有关, root 当然可以查阅到用户的这些信息,但是 vbird1 就不见得能够查到 vbird3 的信息,因为 /var/spool/mail/vbird3 与 /home/vbird3/ 的权限分别是 660, 700 ,两个文件的其他用户无任何权限,那 vbird1 当然就无法查阅的到。

 

选项:

-s :仅列出用户的账号、全名、终端机代号与登入时间等等;

示例:

~]# finger test5

Login: test5                    Name: TEst5

Directory: /home/test5                  Shell: /bin/bash

Office: TESToffice, 110         Home Phone: 119

On since 三 8月 22 00:39 (CST) on pts/2 from 192.168.1.104

1 hour 15 minutes idle

Last login 三 8月 22 01:27 (CST) on pts/0

No mail.

No Plan.

 

~]# finger -s test5

Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host

test5     TEst5      pts/2    1:23  Aug 22 00:39 TESToffice 110            (192.168.1.104)

test5     TEst5      pts/0       *  Aug 22 01:27 TESToffice 110

 

  • chfn命令:用户辅助信息修改工具

这个指令说实在的,除非是你的主机有很多的用户,否则倒真是用不着这个程序

使用语法:chfn [-foph] [账号 名]

选项:使用选项可以单独修改某项参数

-f :后面接完整的大名;

-o :您办公室的房间号码;

-p :办公室的电话号码;

-h :家里的电话号码!

 

示例1:

[test5@localhost]/% chfn -f TEST5

Changing finger information for test5.

密码:

Finger information changed.

 

示例2:注意选输入用户的密码,验证通过修改的参数才能生效。

[test5@localhost]/% chfn

Changing finger information for test5.

名称 [TEst5]: Test5

办公 [TESToffice]: office

办公电话 [110]: 111

住宅电话 [119]: 222

 

密码:

Finger information changed.

 

  • whoami命令:显示当前进程的用户名

[test5@localhost]/% whoami

test5

 

  • pwck命令:检查用户的密码文件/etc/passwd是否有问题

pwck 这个指令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息,

还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错误时,

会提示使用者修订

[root@localhost ~]# pwck

用户“ftp”:目录 /var/ftp 不存在

用户“avahi-autoipd”:目录 /var/lib/avahi-autoipd 不存在

用户“Core”:程序 /bin/tcsh 不存在

用户“fedora”:目录 /var/tmp/fedora 不存在

用户“test11”:目录 /tmp/test11 不存在

pwck:无改变

注意:有些账号是系统账号,确实也不需要家目录,所以,那是正常的错误。

 

  • 用户和用户组权限管理命令的使用方法

使用ls -l查询一个命令时如下字段就是 用户和用户组权限字段
rwxrwxrwx

左三位:定义user(owner)的权限
中三位:定义group的权限;
右三位:定义other的权限

  • 进程安全上下文:
    进程对文件的访问权限匹配顺序模型:
    进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
    否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
    否则,就只能应用other的权限;
  • 权限:
    r:readable, 读
    w:writable, 写
    x:excutable,执行
  • 文件权限含义:

r:可获取文件的数据;

w: 可修改文件的数据;

x:可将此文件运行为进程;默认情况文件不该有执行权限

 

  •  目录权限含义:

r:可使用ls命令获取其下的所有文件列表;但不包括详细信息,不能使用ls -l

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

x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;

  • 权限组合机制和8进制权限表示法
    — 000            8进制权限表示法0
    –x 001             8进制权限表示法1
    -w- 010           8进制权限表示法2
    -wx 011           8进制权限表示法3
    r– 100           8进制权限表示法4
    r-x 101           8进制权限表示法5
    rw- 110           8进制权限表示法6
    rwx 111           8进制权限表示法7

示例:8进制权限表示法

rw-rw-r–表示:664

rwxrwxr-x表示:775

rwxr-x—表示:750

rw——表示:600

rwxr-xr-x表示:755

  • 权限的反向掩码umask

umask:文件的权限反向掩码,遮罩码;

文件:666-umask

目录:777-umask

 

注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果反掩码中有执行权限,则需要将反掩码中拥有执行权限的位-1在用666去减;

umask: 023

666-023=644

777-023=754

 

umask命令:

umask:查看当前umask

~]# umask
0022

umask MASK: 设置umask

例如:

~]# umask 026
[root@localhost ~]# umask
0026

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

 

  • 权限管理命令chmod

chmod权限管理命令:

使用语法:

chmod [OPTION]… MODE[,MODE]… FILE…使用权限的原始表示法,rwx

chmod [OPTION]… OCTAL-MODE FILE…8进制权限表示法

chmod [OPTION]… –reference=RFILE FILE…参考其他文件的权限

 

三类用户:

u:属主

g:属组

o:其它

a: 所有

 

(1) chmod [OPTION]… MODE[,MODE]… FILE…

MODE表示法:

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

u=

g=

o=

a=

若有多类相同如:ug= 或uo=

示例:将/tmp/aabb的权限改为属主读和执行,属组读写,其他读

~]# ls -l /tmp/aabb

-rw——-. 1 root root 0 8月  22 03:44 /tmp/aabb

~]# chmod u=rx,g=rw,o=r /tmp/aabb

~]# ls -l /tmp/aabb

-r-xrw-r–. 1 root root 0 8月  22 03:44 /tmp/aabb

授权表示法:直接操作一类用户的一个或多个权限位r,w,x;

u+, u-

g+, g-

o+, o-

a+, a-

可以组合使用,如:ug+w,go-rx

示例:将/tmp/aabb的权限改为属主读写执行,属组写,其他无任何权限。

~]# ls -l /tmp/aabb

-r-xrw-r–. 1 root root 0 8月  22 03:44 /tmp/aabb

~]# chmod u+w,go-r /tmp/aabb

~]# ls -l /tmp/aabb

-rwx-w—-. 1 root root 0 8月  22 03:44 /tmp/aabb

 

(2) chmod [OPTION]… OCTAL-MODE FILE…可以一步到位,即使某一位为0,0不能省略。

示例:将/tmp/aabb的权限改为属主读写,属组无权限,其他读。

~]# ls -l /tmp/aabb

-rwx-w—-. 1 root root 0 8月  22 03:44 /tmp/aabb

~]# chmod 604 /tmp/aabb

[root@localhost ~]# ls -l /tmp/aabb

-rw—-r–. 1 root root 0 8月  22 03:44 /tmp/aabb

 

(3) chmod [OPTION]… –reference=RFILE FILE… 参考其他文件的权限

示例

~]# ls -l /var/log/messages

-rw——-. 1 root root 263172 8月  22 06:01 /var/log/messages

~]# ls -l /tmp/aabb

—x—rw-. 1 root root 0 8月  22 03:44 /tmp/aabb

~]# chmod –reference=/var/log/messages /tmp/aabb

~]# ls -l /tmp/aabb

-rw——-. 1 root root 0 8月  22 03:44 /tmp/aabb

 

选项:

-R, –recursive:递归修改,同时修改目标目录下的所有子目录和文件的权限,此选项一般配合MODE表示法使用,控制的更详细。

 

示例:

~]# cp -r /etc/skel/ ./

~]# ls -la skel

总用量 20

drwxr-xr-x. 2 root root   72 8月  22 06:28 .

dr-xr-x—. 5 root root 4096 8月  22 06:28 ..

-rw-r–r–. 1 root root   18 8月  22 06:28 .bash_logout

-rw-r–r–. 1 root root  193 8月  22 06:28 .bash_profile

-rw-r–r–. 1 root root  231 8月  22 06:28 .bashrc

-rw-r–r–. 1 root root  658 8月  22 06:28 .zshrc

~]# chmod -R g=rw,o=rw skel递归修改,目录和目录下的文件或子目录的权限都被修改。

[root@localhost ~]# ls -la skel

总用量 20

drwxrw-rw-. 2 root root   72 8月  22 06:28 .

dr-xr-x—. 5 root root 4096 8月  22 06:28 ..

-rw-rw-rw-. 1 root root   18 8月  22 06:28 .bash_logout

-rw-rw-rw-. 1 root root  193 8月  22 06:28 .bash_profile

-rw-rw-rw-. 1 root root  231 8月  22 06:28 .bashrc

-rw-rw-rw-. 1 root root  658 8月  22 06:28 .zshrc

注意:用户仅能修改属主为自己的那些文件的权限;

 

  • 文件或目录从属关系管理命令:chown

  • chown命令:修改文件或目录的属主和属组

使用语法:

chown [OPTION]… [OWNER][:[GROUP]] FILE…修改文件的属主或属组

chown [OPTION]… –reference=RFILE FILE… 参考其他文件的属主属组

 

选项:

-R:递归修改

[root@localhost ~]# ls -la skel

总用量 20

drwxrw-rw-. 2 root root   72 8月  22 06:28 .

dr-xr-x—. 5 root root 4096 8月  22 06:28 ..

-rw-rw-rw-. 1 root root   18 8月  22 06:28 .bash_logout

-rw-rw-rw-. 1 root root  193 8月  22 06:28 .bash_profile

-rw-rw-rw-. 1 root root  231 8月  22 06:28 .bashrc

-rw-rw-rw-. 1 root root  658 8月  22 06:28 .zshrc

~]# chown -R test5:mygroup skel 或~]# chown -R test5.mygroup skel

[root@localhost ~]# ls -la skel

总用量 20

drwxrw-rw-. 2 test5 mygroup   72 8月  22 06:28 .

dr-xr-x—. 5 root  root    4096 8月  22 06:28 ..

-rw-rw-rw-. 1 test5 mygroup   18 8月  22 06:28 .bash_logout

-rw-rw-rw-. 1 test5 mygroup  193 8月  22 06:28 .bash_profile

-rw-rw-rw-. 1 test5 mygroup  231 8月  22 06:28 .bashrc

-rw-rw-rw-. 1 test5 mygroup  658 8月  22 06:28 .zshrc

若想只修改属组可以如此:

~]# chown -R :test5 skel ~]# chown -R .test5 skel

~]# ls -la skel

总用量 20

drwxrw-rw-. 2 test5 test5   72 8月  22 06:28 .

dr-xr-x—. 5 root  root  4096 8月  22 06:28 ..

-rw-rw-rw-. 1 test5 test5   18 8月  22 06:28 .bash_logout

-rw-rw-rw-. 1 test5 test5  193 8月  22 06:28 .bash_profile

-rw-rw-rw-. 1 test5 test5  231 8月  22 06:28 .bashrc

-rw-rw-rw-. 1 test5 test5  658 8月  22 06:28 .zshrc

 

示例2:参考/var/log/messages的属主属组

~]# chown -R –reference=/var/log/messages skel

 

示例3:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?

创建个用户abclinux,属组mygroup,复制/etc/fstab到/tmp/test200目录下,修改/tmp/test200目录的属组权限为可写,使用管理员账户将目录和文件/tmp/test200/和/tmp/test200/fstab的属组修改成mygroup,/tmp/test200/fstab的属组权限默认为只读。使用echo 123aaa >> /tmp/test200/fstab向/tmp/test200/fstab文件写数据,看提示。再删除/tmp/test200/fstab文件,看提示。

~]#groupadd mygroup

~]#useradd –G mygroup abclinux

~]# grep group /etc/group

mygroup:x:5004:abclinux

~]# mkdir /tmp/test200

~]# cp /etc/fstab /tmp/test200

~]# ls -al /tmp/test200

总用量 8

drwxr-xr-x.  2 root root   18 8月  22 07:01 .

drwxrwxrwt. 10 root root 4096 8月  22 07:01 ..

-rw-r–r–.  1 root root  541 8月  22 07:01 fstab

~]#chmod g+w /tmp/test200

~]#chown :mygroup /tmp/test200

~]#chown :mygroup /tmp/test200/fstab

~]# ls -la /tmp/test200

总用量 8

drwxrwxr-x.  2 root mygroup   18 8月  22 06:58 .

drwxrwxrwt. 10 root root    4096 8月  22 06:59 ..

-rw-r–r–.  1 root mygroup  541 8月  22 06:58 fstab

~]#su – abclinux

~]$ ls -la /tmp/test200

总用量 8

drwxrwxr-x.  2 root mygroup   18 8月  22 07:12 .

drwxrwxrwt. 10 root root    4096 8月  22 07:13 ..

-rw-r–r–.  1 root mygroup  541 8月  22 07:12 fstab

~]$ echo 123aaa >> /tmp/test200/fstab

-bash: /tmp/test200/fstab: 权限不够

~]$ rm /tmp/test200/fstab

rm:是否删除有写保护的普通文件 “/tmp/test200/fstab”?y

~]$ ls /tmp/test200/ -la

总用量 4

drwxrwxr-x.  2 root mygroup    6 8月  22 07:07 .

drwxrwxrwt. 10 root root    4096 8月  22 07:05 ..

结论:文件没有可写权限是不能编辑文件的,目录拥有可写权限,可以对目录内的文件和子目录进行创建和删除。

结尾词:详细了解用户和用户组的概念和权限管理可以对后期做项目时的规划起到很大帮助,而一个项目的规划制作的优秀,可以提高项目管理安全和效率。

 

练习题

  • 试题:

(1)、创建组distro,其GID为2016;
(2)、创建用户mandriva, 其ID号为1005;基本组为distro;
(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
(4)、给用户mageia添加密码,密码为mageedu;
(5)、删除mandriva,但保留其家目录;
(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
(7)、修改slackware的默认shell为/bin/tcsh;
(8)、为用户slackware新增附加组admins;

 

  • 答案:

(1)
~]# groupadd -g 2016 distro
~]# grep distro /etc/group
distro:x:2016:

(2)
~]# useradd -u 1005 -g 2016 mandriva
~]# grep mandriva /etc/passwd
mandriva:x:1005:2016::/home/mandriva:/bin/bash

(3)
~]# useradd -u 1100 -d /home/linux mageia
~]# fgrep mageia /etc/passwd
mageia:x:1100:1100::/home/linux:/bin/bash

(4)第一种方法:方便但是不安全,可以通过history查看到设置的密码
~]# echo mageedu | passwd –stdin mageia
更改用户 mageia 的密码 。
passwd:所有的身份验证令牌已经成功更新。
~]# fgrep mageia /etc/shadow
mageia:$6$yxExGPwV$FWqtPGGArOcAoNtDgoRwq12ytC0GnN2bg.ki274uigwYqc2HfV/MCbafIXrbaC86J8kDuCU7KXYVEjeCeKabl0:17765:0:99999:7:::
第二种方法:不方便但是安全。注意违反规则的密码只有管理员才能配置。
~]# passwd mageia
更改用户 mageia 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

(5)
~]# userdel mandriva
~]# ls /home | grep linux
linux

(6)
~]# useradd -u 2002 -g 2016 -G peguin slackware
~]# fgrep slackware /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/bash
~]# fgrep slackware /etc/group
peguin:x:5001:slackware

(7)
~]# usermod -s /bin/tcsh slackware
~]# fgrep slackware /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/tcsh

(8)
~]# usermod -a -G admins slackware
~]# fgrep slackware /etc/group
peguin:x:5001:slackware
admins:x:5006:slackware

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/112504

联系我们

400-080-6560

在线咨询

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

QR code