1.LINUX帐号与群组
UID , GID ( User id , Group id )
/etc/passwd : 用户档案 ( 账号信息 )
例如 : 帐号1 (root) : root : x : 0 : 0 : root : /root : /bin/bash
帐号名 x(原来是密码,现在全部是x,只是个代表) 0 : Uid , 0 : G id , root (描述) , /root ( 家目录) , /bin/bash ( shell 目录 )
帐号2 (haha) : haha : x : 502 : 503 : : /home/haha : /bin/bash
帐号名 x(原来是密码,现在全部是x,只是个代表) 502 : Uid , 503 : Gid , 描述为空 , /home/haha ( 家目录) , /bin/bash ( shell 目录 )
登录时,1,首先寻找 /etc/passwd 里边是否有你输入的账号,如果没有就直接跳出,如果有,则将该账号对应的UID与GID( etc/group )读出来,另外,该账号的家目录与shell 设定也一并读出。2,再来则是核对密码表,这时LINUX会进入 /etc/shadow里面找出对应的账号与UID,然后核对一下刚刚输入的密码是否相符,3,一切都OK的话,就进入了SHELL。
/etc/shadow : 用户密码 ( 一般会有 9 个字段 )
账号( root ) : root : 真实密码: 最近变更密码日期 : 密码不可变动天数 : 密码需要变更天数 : 密码需要变更警告天数 : 密码过期后账号的宽限天数 : 账号失效日期 : 保留
详细说明 :
真实密码 : 经过加密的
最近变更密码日期 : 是从 1970年1月1日开始计算,每天 + 1
密码不可变动天数 : 0 随时都可以变动, 比如 20,则是设定密码后,20天内不可以变动
密码需要变更天数 : 99999(273年) 表示没有限制, 比如20,则表示 20 天后密码将过期
/etc/group : 群组档案
例如 : dba : x : 502 : oracle
组名, 组密码(通常不需要), Gid , 帐户名( 可以增加帐户名, 这样就直接拥有这个组的权限了, 用户之间用,逗号分开,注意不能有空格)
群组 ( 初始群组, 有效群组 )
初始群组 : /etc/passwd 文件中的群组, 即当此用户登陆 linux时, 立刻就拥有此群组的权限了.
如果一个用户有很多个群组, 那么这个用户同样具有这两个群组的权限, 那么如果是创建一个目录或者档案时, 究竟是哪个组呢? 这就要看创建时的有效群组了!
有效群组 : 登陆后, 直接输入 groups命令 就可以看到此用户支持的所有群组, 第一个即是有效群组, newgrp users ( 切换有效群组 ) , 切换之后如果想返回, 必须使用 exit, 有点类似之前的shell . ( 因为shell环境变了,原来shell环境是 kevin:kevin 变成了 kevin : user,所以要使用 exit 退出现在的变更后的环境 )
/etc/gshadow , 这个文件有点类似 /etc/group文件, 只是第2格, 如果是有 ! 号, 表示此群组没有群组管理员 .
可以使用命令 usermod ( root 使用 ) gpasswd ( 群组管理员使用 ) 将某个用户加入到新的群组
gshadow 这个档案最大的功能就是建立群组管理员
/etc/gshadow
1.组名
2.密码,同样的,开头为!表示无合法密码,所以无群组管理员
3.群组管理员的账号(相关信息在 gpasswd 中介绍 )
4.该群组所属的账号(与 /etc/group内容相同!)
例如 usermod -G dba arthur
2. 帐号管理
useradd 相关配置文件 passwd , usermod, userdel
useradd : useradd -u( 特定 UID号码) -g( Initial group ) -G ( 还可以加入的组 ) -d ( 家目录, 绝对路径 ) -r ( 建立一个系统帐号, 默认不会创建家目录)
使用ueradd 建立帐号时, 至少参考 : /etc/default/useradd /etc/login.defs /etc/skel/* , 但是其实建立用户最重要的是 /etc/passwd , /etc/shadow , /etc/group
passwd : passwd -l ( lock ) -u ( unlock ) -S ( 列出密码相关参数 ) -n ( 多久不可修改密码天数 ) -x ( 多久内必须修改密码 ) -w ( shadow 密码过期天数 ) -i ( 密码失效日期 )
chage : chage -l vbird2 ( 列出 vibrd2用户密码的详细参数 ) , 具体还有一些其他参数, 修改 vbird2 密码 .
usermod : 修改帐号登陆信息, ( 和 useradd 非常类似, 是用来微调 useradd 的 )
userdel : userdel -r ( 连同家目录一起删除 )
一般用户使用指令 : finger , id ,
finger 查阅用户信息 finger [-s] username
id username
groupadd , groupdel , groupmod , gpasswd
groupadd [-g gid] [-r] 组名
groupmod 微调 groupadd 命令
groupmod -g 201 -n mygroup group1 尽量不要随意动 gid
groupdel [groupname]
gpasswd [-A user1] [-M user3] groupname 其中将 user1设定为群组管理员, user3 添加到该群组
gpasswd -rR groupname 其中 -r 是删除密码 , -R 将密码失效
3. ACL ( access control list ) 由于unix不支持,所以就算了
ACL : 用来设置针对单一用户, 群组, 默认属性 只是针对某一个用户或者是特定的群组
首先要确认文件系统是否支持 ACL : unix like 系统不支持ACL, 如果发现不支持, 那么在linux中可以设置其为支持, 具体方法为 : mount -o remount ,acl / 或者永久性修改文件vi /etc/fstab ( 确认是否设置成功 : mount , 看到主要硬盘情况, 例如根目录下边, 出现 ( rw, acl )
ACL : 设定
- getfacl : 取得某个档案/目录的ACL权限.
- setfacl: 设定某个目录/档案的ACL权限. setfacl -m u:vbird1:rx acl_tes1(其中 vbird1是用户名, rx是权限)
getfacl filename ( acl_test1 )
4. 使用者身份切换
- 使用一般账号管理系统, 需要更改环境变量时, 再切换账号.
- 用较低的权限启动系统服务 ( 例如软件 apache , 那么创建一个用户 apache, 用来启动 apache软件, 这样即便apache系统被黑, 也没关系, 系统没事 )
- su - oracle , 切换用户
- sudo
su : 若要完整切换到新使用环境( su - username 或 su - l username ) 如果只是1次执行root命令, 可以使用 su --c "指令串" , 使用 root切换成任何使用者并不需要输入新用户密码( 虽然 su 很好用, 但是如果使用主机人太多, 而都想使用root用户, 则就会有很多人知道root密码, 危险 )
sudo : 只有 /etc/sudoers内的用户才可以执行 sudo 这个指令, visudo ( 专门修改的指令 )
sudo [-b] [-u 新使用者账号]
-b : 将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
-u : 后面可以接欲切换的使用者,若无此项则代表切换身份为 root
1. 当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜索该使用者是否有执行 sudo 的权限
2. 若使用者具有可以执行 sudo 的权限后,便让使用者 输入用户自己的密码 来确认
3. 若密码输入成功,便开始进行 sudo 后续接的指令 ( root 执行sudo时,不需要输入密码 )
4. 若欲切换的身份与执行者身份相同,那也不需要输入密码.
查看 /etc/sudoers 这个档案,使用命令 visudo
本身就有的文件 : root ALL=(ALL) ALL
增加 vbird ALL=(ALL) ALL
%wheel ALL=(ALL) ALL 表示 所有在 wheel 这个群组以内的用户全部可以
myuser1 ALL=(root) /user/bin/passwd 意思是 myuser1 可以使用passwd 这个指令
特殊的 shell , /sbin/nologin
系统账号,系统账号是不需要登录的,同样,他们也无法操作 bash 等shell, 他们所使用的shell就是 /sbin/nologin
5. PAM ( Pluggable Authentication Modules )
一套应用程序编程接口,提供了以连串的验证机制,
就相当于 API ( application programming Interface ) , 提供一个验证接口, 只要使用者将验证阶段的需求告之PAM后, PAM就能够回报使用者验证的结果 ( 成功与失败 )
以passwd为例, 呼叫PAM流程 :
- 用户执行 /usr/bin/passwd 这支程序, 并输入密码
- passwd 呼叫 PAM 模块进行验证
- PAM模块会到 /etc/pam.d/ 寻找与程序( passwd) 同名的配置文件
- 依据 /etc/pam.d/passwd 的内容设定, 引用相关的 PAM 模块逐步进行验证分析
- 将验证结果( 成功, 失败及其他讯息) 回传给 passwd 这支程序
- passwd 这支程序会根据 PAM 回传的结果决定下一个动作 ( 重新输入新密码或者通过验证 )
验证类别 :
- auth ( authentication )
- account ( 帐号 )
- session ( 会话 )
- passwd ( 密码 )
6. LINUX中用户信息传递
w , who, last, lastlog,
w 查看登陆者情况 , 跟 who 差不多
last 查看最近主机启动关闭情况
lastlog 是用户登陆日志
write, mesg, wall ( 用户之间通信)
write 使用者账号 [用户所在终端接口]
mesg n 拒绝接收信息,( root 发的例外 )
wall 广播,对系统上所有用户发消息,例如 wall " i will shutdown my linux server ... "
传送离线消息,mail ( 即如果用户不在线的话,可以类似留言)
mail vbird -s "nice to mee you" "邮件标题" 使用 . 小数点结束, Cc: 就是 cc 给别人
利用数据流重定向,因为有时候书写错误很难删除 mail vbird -s "nice to mee you" < /tmp/bird_mail
然后比如,bird登录了linux , 输入mail 可以查看留言,然后是 & 这个可以接很多指令,例如 &? 就可以查看mail
- write : write root pts/1 ( 回车, 然后输入写入内容, ctrl + d 终止对话 )
- mesg n ( 不接收别人发来的信息 ) mesg y ( 直接输入 mesg 就知道目前状况 )
- wall ( wall " are you ready now ? " ) 向所有的人广播
7. 手动建立一个帐号 ( 不推荐 )
pwck ( 检查 /etc/passwd 中的家目录, 与实际的家目录是否存在 )
pwconv ( 主要目的是将 /etc/passwd 内的帐号与密码, 移动到 /etc/shadow当中 )
pwunconv ( 将 /etc/shadow内的密码栏数据写回 /etc/passwd , 并且删除 /etc/shadow )
建立帐号步骤 :
- 建立所需群组
- 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv )
- 建立帐号的各个属性 ( vi /etc/passwd )
- 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv )
- 建立该帐号的密码 ( passwd accountname )
- 建立用户家目录 ( cp -a /etc/skel /home/accountname )
- 更改用户家目录属性 ( chown -R accountname.group /home/accountname )