Linux基础之用户、组和权限管理
用户标识:UserID, UID 是16bits二进制数字: 0-65535
管理员:0
普通用户:0-65536
系统用户:
1-499(CentOS6)
1-999(CentOS7)
登陆用户:
500-60000(CentOS6)
1000-60000(CentOS7)
名称解析: Username <--->UID
名称解析是根据名称解析库/etc/passwd进行转换;
组类别可划分为:
组类别1:管理员组、普通用户组、系统组、登录组
组标识: GroupID, GID,同UID一样,16bits二进制数字: 0-65535
管理员组:0
普通用户组: 1-65535
系统用户组:
1-499(CentOS6)
1-999(CentOS7)
登陆用户组:
500-60000(CentOS6)
1000-60000(CentOS7)
名称解析: groupname <--> GID
名称解析是根据名称解析库/etc/group进行转换;
组类别2:用户的基本组、用户的附加组
组类别3:
私有组: 组名同用户名,且只包含一个用户;
公共组: 组内包含了多个用户;
认证信息:
通过比对事先存储的password,与登录时提供的信息是否一致:
/etc/shadow
/etc/gshadow
密码的使用策略:
- 使用随机密码;
- 最短长度不要低于8位;
- 应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
- 定期更换;
加密算法:
对称加密: 加密和解密使用同一个密码;
非对称加密:加密和解密使用的一对儿密钥;
公钥:public key 用于加密;
私钥:private key 用于解密;
单向加密: 只能加密,不能解密;提取数据特征码;
定长输出;雪崩效应
算法:
md5: message digest, 128bits
sha1: secure hash algorithm
sha224
sha256
sha385
sha512
在计算之时加salt, 添加的随机数,防止设置相同密码加密后出现一样的值;
/etc/passwd: 用户的信息库
[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
name: 用户名
password: 可以是加密密码,也可是占位符x;
UID: 用户ID
GID: 用户所属的主组的ID号
GECOS: 注释信息
Home directory: 用户家目录;
shell: 用户登录时默认shell程序;
/etc/shadow: 用户密码;
user1:$6$3RsDhRk/DfEsAv0L$dzlsVlqL.vxHU2wMVX8LBdfoE5WrQatxjRXIAg2uFqfaq8ckctZAF3zN4QmDGKfsaJlknW19FytnckyiOnrl21:18234:0:99999:7:::
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
$6$:表示加密的算法;
id为1时,采用md5算法加密
id为5时,采用SHA256算法加密
id为6时,采用SHA512算法加密
salt为随机偏移值,是对密码进行hash的一个干扰值
encrypted为散列值
$3RsDhRk/DfEsAv0L$ : salt, hash的偏移值
/etc/group: 组的信息库
group_name: password: GID: user_list
user_list: 该组的用户成员: 以此组为附加组的用户的用户列表
安全上下文:
进程以其发起者的身份运行;
进程对文件的访问权限,取决于发起此进程的用户权限;
系统用户:为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登系统;
groupadd: 添加组
groupadd [options] group
-g GID :指定GID, 默认是上一个组的GID+1;
-r: 创建系统组;
groupmod: 修改组属性
groupmod [options] GROUP
-g GID: 修改GID;
[]#tail /etc/group
newgrp:x:1007:
[]#groupmod -g 1005 newgrp
[]#tail /etc/group
newgrp:x:1005:
-n new_name: 修改组名;
[]#groupadd oldgrp
[]#groupmod -n newgrp oldgrp
groupdel: 删除组;
groupdel [options] GROUP
useradd: 创建用户
adduser:创建用户 (其实是指向useradd命令)
[]#file which adduser
/usr/sbin/adduser: symbolic link to `useradd‘
useradd [options] LOGIN
-u, --uid UID: 指定UID; 会自动创那家与UID一样的GID;
-g, --gid GID: 指定基本GID,此组要事先存在,不使用默认GID;
-G, --groups GROUP1 GROUP2…: 指明用户所属的附加组,多个组之间用逗号分隔;
[]#useradd -G eng,fin leo
[]#tail -3 /etc/group
eng:x:1013:leo
fin:x:1014:leo
leo:x:1015:
-c, --comment COMMENT: 指明注释信息;
-d, --home HOME_DIR: 以指定的路径为用户家目录, 通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s, --shell SHELL: 指定用户的默认shell, 可用的所有shell列表存存在/etc/shells文件中;
-r, --system: 创建系统用户;
-m, --create-home:
-M, --no-user-group: 不为用户创那家主目录;
-f, --inactive: 设定用户过期期限;
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
-D:
useradd -D 显示创建用户时的默认配置;
useradd -D 选项:修改创建用户时的默认配置;其修改的值保存于/etc/default/useradd文件中;
[]#useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[]#useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[]#useradd -D -d /tmp
[]#useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
usermod: 修改用户属性:
usermod [options] LOGIN
-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:解锁用户的密码;
userdel: 删除用户
userdel [options] LOGIN
-r: 删除用户时一并删除其家目录,默认不删除;
passwd: 密码管理
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
- passwd: 修改用户自己的密码;
- passwd USERNAME:修改指定用户的密码,但仅root有此权限;
-l, -u: 锁定和解锁用户;
-d, --delete:删除用户名密;
-e: 过期期限,日期;
-i DAYS: 非活动期限;(时间范围)
-n DAYS: 密码的最短使用期限;
-x DAYS: 密码的最长使用期限;
-w DAYS:警告期限;
--stdin:
[]#echo "gentoo" | passwd --stdin gentoo &> /dev/null (不显示输出)
]#echo "gentoo" | passwd --stdin gentoo
Changing password for user gentoo.
passwd: all authentication tokens updated successfully.
gpasswd: 组密码管理:
组密码文件: /etc/gshadow
gpasswd [option] group
-a USERNAME: 向组中添加用户;
-d USERNAME: 从组中移除用户;
netgrp: 临时切换指定的组为基本组; 用户必须已经属于要切换的组;
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
chage命令:
chage [options] LOGIN
[]#chage sindy
Changing the aging information for sindy
Enter the new value, or press ENTER for the default
Minimum Password Age [0]:
Maximum Password Age [99999]:
Last Password Change (YYYY-MM-DD) [2020-03-01]:
Password Expiration Warning [7]:
Password Inactive [-1]:
Account Expiration Date (YYYY-MM-DD) [-1]:
id命令: 显示用户的真实和有效ID;
id [OPTION]... [USER]
-u: 仅显示有效的ID;
-g:仅显示用户的基本组ID;
-G:仅显示用户所属的所有组ID;
-n: 显示名字而非ID;
su命令: switch user切换用户
登陆式切换:会通过重新读取用户的配置文件来重新初始化;
su - USERNAME
su -l USERNAME
非登录式切换: 不会读取目标用户的环境配置文件进行初始化;
su USERNAME
注意:管理员可无密码切换至其它任何用户;其它用户在切换时必须输入目标用户的密码;
-c ‘COMMAND’: 仅以指定用户的身份运行此处指定的命令;
权限管理:
rwxrwxrwx:
左三位:定义user(owner)的权限;
中三位:定义group的权限;
右三位:定义other的权限;
权限:
r: readable,读
w:writable,写
x:excutable,执行
文件:
r: 可获取文件的数据内容;
w:可修改文件的数据;
x: 可将此文件运行为进程;
目录:
r: 可使用ls命令获取其下的所有文件列表;
w:可修改此目录下的文件列表, 即创建或删除文件;
x: 可cd到此目录中,且可使用ls -l来获取所有文件的详细属性信息;
mode: rwxrwxrwx
ownership: user, group
权限组合机制:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
权限管理命令:
三类用户:
u:属主
g:属组
o:其它
a:所有
chmod [OPTION]... MODE[,MODE]... FILE…
- MODE表示法:
赋权表示法:
u=
g=
o=
a=
chmod u=rwx, g=rw, o=r FILE
授权表示法:直接操作一类用户的一个权限侠:
u+,u-
g+,g-
o+,o-
a+,a-
chmod u+r, o+r FILE 或者chmod ug+r FILE
chmod [OPTION]... OCTAL-MODE FILE…
- 八进制权限位:
chmod 660 FILE
chmod [OPTION]... --reference=RFILE FILE…
- 引用参考权限:
chmod --reference=refile FILE (参考refile文件的权限,并授予FILE).
选项:
-R, --recursive: 递归修改 (在授权表示法中使用,其它方法不建议使用)
从属关系管理命令: chown, chgrp
chown命令:修改属主属组
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R, 递归修改
chgrp命令:修改属组(同chown)
注意:仅管理员可以使用;
umask: 文件的权限反向掩码,遮罩码:
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限,如果中有执行权限,则需要将其加1;
umask: 023
666-023=644
777-023=754