Linux作为多用户操作系统, 用户拥有不同的根目录, 文件访问权限, 命令权限, bash.
Linux使用用户组来管理用户, 每个用户拥有唯一的uid, 每一个用户组均有唯一的gid.
Linux有且只有一个超级用户root, root拥有系统所有权限, 它的uid为0.
contents:
用户配置文件
passwd 和 shadow
/etc/passwd
和/etc/shadow
是管理用户两个重要配置文件./etc/passwd
存储用户的基本信息, /etc/shadow
的主要作用是存储用户密码的hash值.
因为许多程序需要利用/etc/passwd
将uid转换为用户名, 所以通常/etc/passwd
是所有用户可读的.
但是, 这样处理即使密码进行了hash操作仍有被试出的危险.而/etc/shadow
只有拥有权限的管理员才可以阅读.
-rw-r--r-- 1 root root /etc/passwd-rw-r----- 1 root shadow /etc/shadow
/etc/passwd
每行是一个用户的记录, 字段之间使用:
分隔:
username:password:uid:gid:comment:home:bash
例如root用户:
root:x:0:0:root:/root:/bin/bash
可以看到password字段为x, password的hash值实际存放在/etc/shadow
中.
在/etc/shadow
中同样是一行对应一个用户的记录:
用户名:加密口令:上次修改时间:两次修改口令之间的最小天数:口令有效天数:口令失效前警告天数:口令失效后账户宽限天数:账户失效时间:保留字段
所有时间均采用unix时间戳表示, 操作系统不仅可以限制两次修改口令之间的最小天数, 也可以限定口令有效的天数.
口令失效前用户必须重新设置口令才能继续登录, 在失效前指定天数系统会向用户发出警告.
宽限天数则是在口令失效后用户仍可以使用该密码登录, 不过登录后必须先重新设置密码才能继续工作.
若宽限天数之后用户仍未重新设置口令那么需要联系管理员了.
实际上很多域并未指定:
root:*:16951:0:99999:7:::
group 与 gshadow
/etc/group
存储了用户组的基本信息, 而/etc/gshadow
则是存储用户组密码的配置文件.
/etc/group
中每一行是一个用户组的记录:
groupname:password:gid:users
password字段通常显示x, 密码的hash值被放入gshadow中, 这个密码通常是为用户组管理员准备的.
users字段中将会列出属于该用户组所有用户的用户名.
用户和用户组之间是多对多的关系, 使用groups
指令可以查看当前用户所属的用户组.在/etc/passwd
中每个用户拥有一个gid字段指定了它的初始用户组, 用户登录后即可获得初始用户组权限.
当用户想要使用自己所属的其它用户组的权限时, 可以使用newgrp [GRP]
命令进行切换.
用户管理命令
新建用户useradd
useradd [option] username
选项:
-c
添加comment-d
指定home目录-g
指定初始用户组-G
指定用户组-s
指定用户使用的shell-u
指定uid
示例:
useradd -s /bin/sh -g group –G adm,root gem
修改用户usermod
usermod [option] username
选项含义基本与useradd相同, 用于修改已存在用户的属性
删除用户userdel
userdel [option] username
选项:
-f
强制删除, 即使用户已经登录也会被删除-r
同时删除用户的主目录
管理口令passwd
passwd [option] [username]
选项:
-l
锁定账号, 禁止登录-u
解锁账号-d
删除账号口令-f
强制用户下次登录时修改口令
在不使用选项时表示修改指定用户的口令, username缺省时为当前用户:
$ passwdOld password:New password:Re-enter new password:
root可以强制修改任意用户的口令:
# password user1New password:Re-enter new password:
用户组管理命令
新建用户组groupadd
groupadd [option] groupname
选项:
-g
指定gid-o
与-g
一同使用,表示gid可以与已有gid相同
删除用户组groupdel
groupdel groupname
修改用户组groupmod
groupmod [option] groupname
-g
重设gid-o
允许gid重复-n
重设组名称
查看用户所属的组groups
groups [username]
默认为当前用户
切换用户组newgrp
newgrp [group]
将当前用户切换到指定用户组, 只有在用户已经是组成员的情况下才会生效.
权限管理命令
切换用户su
su [option] [username]
su指令用于切换用户身份, 在未指定username时指定为root.
使用su命令切换用户需要验证目标用户的口令.
选项:
-c command
以新身份执行command指令, 执行完毕返回原身份-l
登录交互终端-s
指定shell
以另外用户的身份执行sudo
su指令将获得全部root权限, 这在多管理员系统上非常不便, sudo指令则授权某些用户可以用root的身份执行命令。
/etc/sudoers
文件指定了可以使用sudo指令的用户, 使用visudo
命令可以编辑该文件。
sudo指令是当前用户以root的身份执行命令, 系统需要检验执行者是否是sudoer本人.所以需要验证当前用户密码而非root密码.
sudo命令拥有一个有效期, 在验证成功后开始计时. 在超时之前执行者可以一直使用sudo执行命令无需反复验证.
sudo [option] command
选项:
-v
重置sudo失效计时, 若sudo指令15min后失效, 执行此命令后重置倒计时为15min.-k
下次执行sudo时强制进行身份验证-u
以指定的用户身份执行命令, 默认为root-l
列出当前用户的权限, 该权限由/etc/sudoer
文件配置-b
在后台执行指令-s
以子进程形式打开新用户的终端,sudo -s
则打开了root的终端
sudo -s
指令以子进程的形式打开root终端, 使用exit
命令可以退出当前进程, 即退出root终端.
可以执行su
指令的sudoer可以使用sudo su
命令将自己切换为root, 拥有修改/etc/sudoer
权限的用户则可以进行用户权限管理.
拥有ALL权限(或可以使自己获得ALL权限)的sudoer的访问权限与root基本无异, 很多发行版使用随机root密码, 并给用户ALL权限以代替root进行管理.