博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下用户组和权限管理
阅读量:5880 次
发布时间:2019-06-19

本文共 5288 字,大约阅读时间需要 17 分钟。

前言:此次验证操作环境为CentOS7.3,及CentOS6.9。

人员账号的管理是身为运维人员必要掌握的技能之一。其工作中的用途甚至比文件安全、软件配置更为广泛。对用户组及其相关权限有个清晰的认识,有利于我们工作学习的开展。下面就我个人理解,在此斗胆做个总结。

我们知道,当用ll或ls –l去查看目录下文件时,往往会得到如下的结果。

drwxrwxr-x. 2 magedu magedu 6 Jul 21 21:03 magedu 

-rw-r--r--. 1 root   root   0 Jul 22 09:26 test

以文件test为例,我们将其对应表示内容整理如下:

-:文件类型,-为普通文件,d为目录,如文件magedu,b为装置文件里面的可供存储的接口设备,c为字符设备(键盘、鼠标),l为软链接文件,s为套接字文件socket,p为管道文件pipe 

rw-:文件属主的权限;r--:文件属组的权限; 
r--:其他用户(非属主、属组)的权限。 
.:文件有隐藏属性(可隐藏,不表示已隐藏) 
1:数字表示文件被硬链接的次数 
root:文件的所有者(属主) 
root:文件的属组 
0:文件的大小,单位是字节(bytes); 
Jul 22 09:26:文件最近一次被修改的时间 
test:文件名 

注意:r表示可读,w为可写,x为可执行,-则无权限。rwx所在的位置是固定的,若没有该项权限,则以-表示。如文件test拥有者的权限为可读可写不可执行,其同组用户权限为可读不可写不可执行,非同组的其他用户权限为可读不可写不可执行。

 

Linux中,/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件与用户组的关系密切相关。从四个文件入手,是系统了解用户及组、权限管理的有效方法。

由于我们的主题是用户及组的权限管理,这里相关文件就不详细说了。但这几个文件又是学习用户和组管理的关键,所以了解又是很必要的。

我们新建一个用户saber,并以此为例进行操作。在此之前,本机仅有root用户和magedu用户。

1.新建saber,用ll查询家目录,果然,/home/下多了一个saber的文件夹。

用finger和id命令查看,我们会得到这样的结果:

用cat浏览/etc/passwd,在/etc/passwd的结尾我们看到了这样的信息。

saber:x:1001:1001::/home/saber:/bin/bash

由finger和id所得的信息,我们很容易理解。其内容以:为间隔对应位如下:

login name:登录用名(saber)

passwd:密码(x),真实密码加密后放在/etc/shadow

UID:用户身份编号 (1001)  

GID:登录默认所在组编号 (1001)  

GECOS:用户全名或注释(这里为空)

home directory:用户主目录 (/home/saber)  

shell:用户默认使用shell (/bin/bash)

我们已经知道用useradd可以创建用户,那么想要自定义创建用户相关信息由如何实现呢?我们先来看看useradd可以实现的功能

useradd 

    -u uid username 创建用户时指定uid(如不指定则Centos:500-60000, Centos7: 1000-60000) 
    -o -u uid username 创建用户时指定uid(可以与已存在用户的uid相同) 
    -g groupname username 创建用户时指定主组为某个已存在的组。(将不会再创建与用户同名的组) 
    -c "描述" username  创建用户时指定描述信息。 
        chfn ... username 
    -d path username 指定用户的家目录(确保指定的家目录所在的上级目录要存在,且家目录本身不能存在) 
    -s /sbin/nologin username 指定用户的默认shell 
    -G group1[,group2] username 指定用户的辅助组 
    -N username 设置用户的主要组为默认组(users,uid=100) 
    -r username 创建系统用户 
        /etc/default/useradd 
        /etc/login.defs 
    -D -s /sbin/nologin 修改默认设置(以上两文件)

创建用户使用useradd,修改用户信息我们可以使用usermod

usermod 修改用户信息 

    -u newuid username     修改用户的UID 
    -o -u newuid username 修改用户的uid(可以与已存在用户的uid相同)            
    -aG 加组名,可以追加辅助组而不用覆盖之前的组 
    -G "" username  或 usermod -G primarygroup username 清空用户所有的辅助组 
    -g groupname username 修改用户的主组 
    -s /sbin/nologin username 修改用户的默认shell 
    -c ...  username 修改用户时指定描述信息。 
        chfn ... username 
    -d /.../path username 修改用户的家目录(不会创建,只修改/etc/passwd当中的家目录信息) 
    -m -d /.../path username 修改用户的家目录信息,并将家目录移动到目的目录并改名。 
    -l newname oldname 修改用户名 
    -L 给用户/etc/shadow中的密码位加!使用户被锁定 
    -U 把!拿掉。 
    -e yyyy-mm-dd 设置一个帐户过期时间 
    f days 指定密码过期之后多少天帐户过期

删除用户一般使用userdel

userdel [-r] username 

    删除用户时,加上-r连同其家目录,mail一同删除

啊,我们差点忘了一个很重要的命令。用户创建好了,我们怎样切换呢?root想要以普通用户身份执行命令又要如何实现呢?su就可以哦。

su:switch user 

    su username 非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录 
    su - username 登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换 
    -c 'command' 以用户的身份执行命令而不登录(仅root) 

2.使用chage –l ,我们可以查看到一串关于saber的信息。这些信息对应的文件是/etc/shadow

用cat浏览/etc/shadow,其结尾如下:

saber:!!:17369:0:99999:7:::

其内容以:为间隔对应位如下:

登录用户名:(saber)

用户密码:一般用sha512加密(!与!!表示用户被锁定)

authconfig --passalgo=sha256 --update 修改密码加密方式

从1970年1月1日起到密码最近一次被更改的时间

密码再过几天可以被变更(0表示随时可被变更)

密码再过几天必须被变更(99999表示永不过期)

密码过期前几天系统提醒用户(默认为一周)

密码过期几天后帐号会被锁定

从1970年1月1日算起,多少天后帐号失效

我们知道chage –l可以查看用户帐户日期信息,那修改这些信息的可不可以呢?其实,chage的用途还有很多。

chage -l username 显示帐户的密码信息 

  -d 指定密码的上次修改时间(yyyy-mm-dd) 
      -d 0 强制用户下次登录时必须修改密码 
  -E 指定账户的过期时间 
  -I 密码过期之后多少天帐户过期 
  -m 设置最小存活时间 
  -M 设置最大存活时间 
  -W 设置密码过期前的提醒时间 
  -L 多少天帐户过期 
chage username 交互式修改用户的密码策略

chage多用于修改密码帐户存活期,那么又怎样设置修改用户的密码呢?既然建立了用户账号,不可能一直都是锁定状态吧。这里,passwd命令就派上用场了。

passwd [OPTIONS] UserName: 修改指定用户的密码,仅 root用户权限(普通用户可以 passwd:修改自己的密码)    

    -l:锁定指定用户 
    -u:解锁指定用户 
    -e:强制用户下次登录修改密码 
    -n mindays: 指定最短使用期限 
    -x maxdays:最大使用期限 
    -w warndays:提前多少天开始警告 
    -i inactivedays:非活动期限 
    --stdin:从标准输入接收用户密码 
    echo "PASSWORD" | passwd --stdin USERNAME从标准输入接收用户密码 

3.使用cat查看/etc/group,结尾如下:

saber:x:1001:

    组名:saber 
    密码位:x 
    GID: 
        CentOS6 1-499为系统用户,预留 
        CentOS7 1-999为系统组,预留 
    组成员:讲该组作为辅助组的成员列表,当成员先把该组当作辅助组,再转成主要组时,不改变。当成员离开该组时,被删除。

下面是组相关的常用命令:

getent group groupname查看某组/etc/group内信息

groups username 查看用户所属组 

    id username查看用户uid,gid

groupadd 

    -g gid groupname 创建指定gid的组 
    -r groupname 创建系统组(小于1000)

groupmod 

    -n newgrpname oldgrpname  修改组名 
    -g newgid groupname 修改gid

groupdel groupname 删除组

groupmems -g admin -a libai (仅能一次加一个用户到组中) 

groupmems -g admin -d libai  将指定成员从组中删除 
groupmems -g admin -l 列出指定组的成员列表(辅助组) 
groupmems -p admin 消除指定组的所有成员。 

4.使用cat查看/etc/gshadow,结尾如下:

saber:!::

        组名:groupname 

        密码位: 
        gpasswd groupname 设置组密码 
        newgrp groupname(普通用户) 
            当用户不是该组的辅助组成员时,则需要输入密码,成功后可临时获得主要组成员身份加入该组 
            当用户是该组的辅助组成员时,无需输入密码,讲临时以主要组的身份加入该组,而其原有的主要组,则临时变为辅助组 
         管理员位:只能由root任命或撤销,可以同时由多名。以,为间隔。 
                 权利:可以修改组密码,可以将用户从该组(辅助组)内添加或删除 
         组成员位:将该组作为辅助组的成员列表,当成员先把该组当作辅助组,再转成主要组时,不改变。当成员离开该组时,被删除。

组密码与管理的相关命令;

getent gshadow [groupname]查看某组的gshadow信息

gpasswd -A username groupname任命用户为组管理员 

撤消所有管理员:gpasswd -A "" admin 
gpasswd -a libai admin 往组内添加用户 
gpasswd -d libai admin  将用户从组中删除 
gpasswd -r admin 删除组密码 
gpasswd -R admin 用!覆盖密码 ,限制非辅助组组成员进入 
gpasswd -M libai,luren admin 指定辅助组成员

 

5.linux的哲学思想之一——一切皆文件。所以以上的一切命令其实我们都可以通过修改最初的几个文件实现。诸如:

vipw = vim /etc/passwd 

vipw -s = vim /etc/shadow 
vigr = vim /etc/group 
vigr -s = vim /etc/gshadow 
pwck 检查/etc/passwd /etc/shadow 
grpck 检查/etc/group /etc/gshadow 

再者诸如,getent还可以又如下用法:

getent passwd username 查看用户的/etc/passwd信息 

getent shadow username 查看用户的/etc/shadow信息

此外还有:

chfn username修改用户描述信息

chsh 指定shell

newusers passwd格式文件 批量创建用户

chpasswd 批量修改用户口令

相关文档:/etc/default/useradd新建用户的默认信息文件 

                    /etc/skel/.*新建用户家目录内默认文件(别名等) 
                    /etc/login.defs

\
本文转自阿拉杜美美51CTO博客,原文链接:http://blog.51cto.com/amelie/1950034 ,如需转载请自行联系原作者
你可能感兴趣的文章
kbmmw 5.02发布
查看>>
杭电1285确定比赛名次
查看>>
BZOJ 2982 combination Lucas定理
查看>>
[sqoop] sqoop2 使用
查看>>
js延时函数setTimeout
查看>>
新手学JavaScript都要学什么?
查看>>
湖南省第九届大学生计算机程序设计竞赛 搞笑版费马大定理
查看>>
梦想永远那么近——《白箱》后日谈
查看>>
Activity启动过程源代码分析
查看>>
python调用shell命令之三慷慨法
查看>>
J2EE基础总结(5)——EJB
查看>>
优秀的相关站点留存-不定时更新
查看>>
.net中webconfig自定义配置
查看>>
【数据结构和算法16】堆排序
查看>>
PHP实现连接设备、通讯和发送命令的方法
查看>>
【HDOJ 5379】 Mahjong tree
查看>>
iOS UITableView表视图滚动隐藏UINavigationController导航栏
查看>>
SDL如何嵌入到QT中?!
查看>>
$(document).ready()
查看>>
RunLoop总结:RunLoop的应用场景(四)
查看>>