当前位置: 代码迷 >> Linux/Unix >> 「学习札记——Linux」Linux账号管理与ACL权限设定
  详细解决方案

「学习札记——Linux」Linux账号管理与ACL权限设定

热度:8291   发布时间:2013-02-26 00:00:00.0
「学习笔记——Linux」Linux账号管理与ACL权限设定

Linux账号管理与ACL权限设定

Table of Contents

  • 1 Linux的账号与群组
    • 1.1 UID和GID
    • 1.2 /etc/passwd结构
    • 1.3 /etc/shadow结构
    • 1.4 /etc/group结构
    • 1.5 群组的一些概念
    • 1.6 /etc/gshadow结构
  • 2 账号管理
    • 2.1 新建账号
    • 2.2 修改密码
    • 2.3 忘记密码
    • 2.4 修改账号数据
    • 2.5 查阅账号信息
    • 2.6 群组管理
  • 3 主机的细部权限规划:ACL的使用
    • 3.1 什么是ACL
    • 3.2 ACL的启用
    • 3.3 ACL的设定
  • 4 使用者身份切换
    • 4.1 为什么要身份切换
    • 4.2 身份切换方法
  • 5 用户的特殊shell与PAM模块
    • 5.1 特殊的shell,/sbin/nologin
    • 5.2 PAM
    • 5.3 passwd工作原理
  • 6 Linux主机上用户讯息传递

1 Linux的账号与群组

1.1 UID和GID

  • UID:User ID;GID:Group ID;
  • 一个文件的权限,靠UID,GID来识别,UID与账号之间的对应关系存储在/etc/passwd里面

1.2 /etc/passwd结构

$ head -n 4 /etc/passwd root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/sh
$cat /etc/passwd | grep minix007minix007:x:1000:1000:minix007,,,:/home/minix007:/bin/bash
  • 账号名称
  • 密码(此字段为x,真正的密码放在/etc/shadow里了)
  • UID
    • 0:系统管理员
    • 1~499:系统账号
    • 500~65535:可登入账号
  • GID
  • 用户信息说明
  • 家目录
  • Shell

1.3 /etc/shadow结构

# cat /etc/shadow | grep minix007minix007:$6$Uk9abd2a7z.qWQQW0CNBsqeZvpx9UcyQ1:15597:0:99999:7:::
  • 账号名称
  • 加密后的密码
  • 最近修改密码的日期
  • 密码不可变动的天数
  • 密码需要变动的天数
  • 密码需要变动前的警告天数
  • 密码过期后账号宽限天数
  • 账号失效日期
  • 保留

1.4 /etc/group结构

$ head -n 4 /etc/grouproot:x:0:daemon:x:1:bin:x:2:sys:x:3:
  • 组名
  • 组密码
  • GID
  • 此组支持的账号

1.5 群组的一些概念

  • 初始群组:账号一登录就成为此群组成员,这个属性在/etc/passwd里的GID确定
  • 非初始群组:除了初始群组外,一个账号还会属于其它群组,这就是由/etc/group里此组支持的账号确定
  • 有效群组:账号所属群组中的一个,如果账号新建一个文件,这个文件的群组就由当前账号的有效群组确定
  • groups: 通过这个指令可以知道当前用户账号属于哪些群组,第一个群组就是有效群组
  • newgrp: 有效群组的切换

1.6 /etc/gshadow结构

# head -n 4 /etc/gshadowroot:*::daemon:*::bin:*::sys:*::
  • 组名
  • 密码
  • 群组管理员账号
  • 该群组所属账号

2 账号管理

2.1 新建账号

  • useradd
    • $useradd minix006 #按默认设置建立一个普通账号
    • $useradd -r matrix007 #建立一个系统账号
    • $useradd -D #显示useradd默认值
$ useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/shSKEL=/etc/skelCREATE_MAIL_SPOOL=no

2.2 修改密码

  • passwd
    • #passwd minix006 # root账号修改其它账号密码
    • $passwd # 自己修改自己密码
    • $passwd -S # 列出密码参数(修改日期,失效日期 etc.)
  • usermod
    • #usermod -e "2013-10-10" minix006 # 设置minix006账号的失效日期

2.3 忘记密码

  • 普通用户忘记密码:使用root账号登录,再用passwd命令处理
  • root用户忘记:Live CD开机,挂载根目录,修改/etc/passwd,将root密码字段清空,再开机后root无须密码 即可登录,再用passwd修改root密码。

2.4 修改账号数据

  • userdel:删除账号数据
  • chsh:修改shell

2.5 查阅账号信息

  • finger :查阅/etc/passwd里的信息
  • id :查阅UID,GID信息

2.6 群组管理

  • 新建群组:groupadd
  • 修改群组信息:groupmod
  • 删除群组信息:groupdel
  • 建立群组管理员:gpasswd

3 主机的细部权限规划:ACL的使用

3.1 什么是ACL

ACL是Access Control List的缩写,主要的目的是提供传统的owner,group,others的read,write,execute 权限之外的细部权限设定,ACL可以针对单一使用者,单一档案或者目录来进行r,w,x权限的设定,对于需要 有特殊权限的使用状况非常有帮助。

3.2 ACL的启用

  • 查看ACL是否启用
$ mount/dev/sda7 on / type ext4 (rw,errors=remount-ro).../dev/sda10 on /home type ext4 (rw)...

括号里没有显示acl,说明acl没有启用

  • ACL的启用
# mount -o remount,acl /home

这样,再查看ACL是否启用时,就会得到

$ mount | grep home/dev/sda10 on /home type ext4 (rw,acl)

3.3 ACL的设定

  • getfacl
$ touch testacl$ ll testacl -rw-rw-r-- 1 minix007 minix007 0  2月  4 16:42 testacl$ getfacl testacl  # file: testacl # owner: minix007 # group: minix007user::rw-group::rw-other::r--
  • setfacl
    • 为特定用户设置权限
$ ll testacl -rw-rw-r-- 1 minix007 minix007 0  2月  4 16:42 testacl# setfacl -m u:minix007:rx testacl$ ll testacl -rw-rwxr--+ 1 minix007 minix007 0  2月  4 16:42 testacl*

可以看到,testacl的权限信息已经和以前不同了

4 使用者身份切换

4.1 为什么要身份切换

  • 平时用普通账号,有特别需要再用root,可以避免对系统破坏
  • 运行软件时,为此软件设置一个低权限账号,这样即使这个软件被攻破,也不至于影响整个系统

4.2 身份切换方法

  • su:任何身份切换
    • 完整切换到新身份:su -username
    • 只用root执行一次命令:su –c "指令串"
    • 由root切换到其它使用者时,无需密码
  • sudo

5 用户的特殊shell与PAM模块

5.1 特殊的shell,/sbin/nologin

nologin是一个特殊的shell,如果一个账号的shell是nologin,那么它是无法通过shell登录的,但是它可以使用 系统的资源,这样就限制了这个账号使用shell的权利。因为有些账号是不需要使用shell的,分给它们会让系统 陷入危险。

5.2 PAM

一部主机上可能很多地方都需要验证,他们有着不同的验证机制,有的时候这可能造成一些混乱,比如 一致性问题,PAM是一套应用程序编程接口,他提供了一系列验证机制,只要使用者将验证需要告诉PAM, PAM就能返回验证的结果。

5.3 passwd工作原理

  1. 用户使用passwd程序,输入密码
  2. passwd调用PAM模块验证
  3. PAM模块到/etc/pam.d/查找与passwd同名配置文件
  4. 根据配置文件的设定,引用PAM模块验证分析
  5. 将验证结果返回给passwd
  6. passwd根据结果决定下面的动作

6 Linux主机上用户讯息传递

  • who :目录登录到系统的用户
$ whominix007   tty7         2013-02-04 14:52minix007   pts/2        2013-02-04 15:15 (:0.0)
  • lastlog:所有账户最后登录时间
  • 使用者交谈:write,mesg,mail