用户及权限管理
说起用户,你脑海里能浮现出什么,也许你也说不清,我就把我自己理解用户的含义,说一下,希望能帮助你。
提起用户,我情不自禁的那它跟古代比,你可以想象下在linux中root是超级用户,代表无所不能,是不是很像古代皇帝一样在他的国家中一样,用户就好像是一个国家的子民,你在你家里是最大的,可以说是家目录,说起组来,它可大可小,大到像现在的市,省。小到像县,村,随你咋样理解,linux系统中还有个附加组,可以把它理解为两个县的边界里有个村,它又同时属于这两个县,系统我把它理解为国家的技术人才,是系统不可缺数的人才。
权限
我上面写的你只要理解,这权限就不难理解,上面写的皇帝,它的权限不可谓不大,linux系统上的权限分为 : 属主,属组,其他人。
对linux来说用户只有两类:
管理
普通用户
系统用户
登录用户
每个用户都有他的用户标示:userID,UID,现在一般而言使用的是16bits二进制数字:0-65535
管理员的ID:0
普通用户ID:1-65535
登录用户:500-60000(centos6).1000-60000(centos7)
系统用户:1-499(centos),1-999(centos7)
用户登录过程中,要输入密码进行,密码验证,这个地步就是把加密的密码和数据库作比较,就等于名称转换过程。
组类别:
管理员组
系统组
登录组
组标示:GroupID,GID
管理员组:0
普通用户组:1-65635
系统用户组:1-499(CentOS6), 1-999(CentOS7)
登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)
组类别1:
用户的基本组:用户创建
用户的附加组:
认证信息:
通过比对事先存储的,与登录时提供的信息是否一致;
password:
/etc/shadow
/etc/gshadow
使用有效的密码策略,能加大对方的破解难度:
1、使用随机密码
2、最短长度不要低于8位
3、应该使用大写、小写、数字和标点符号四类字符中至少三类
4、定期更换
/etc/passwd:用户的信息库
name:password:UID:GID:GECOS:directory:shell
name: 用户名
password:可以是加密的密码,也可是占位符x;
UID:1000-60000
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
/etc/group:组的信息库
group_name:password:GID:user_list
user_list:该组的用户成员;以此组为附加组的用户的用户列表;
安装上下文:
进程以其发起者的身份运行;
进程对文件的访问权限,取决于发起此进程的用户的权限;
groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID;默认是上一个组的GID+1;
-r: 创建系统组;
例子:groupadd name :添加name组
groupadd -g 1010 name :添加name组并把GID改成1010
groupadd -r name :添加系统组,系统组默认没有家目录
groupmod命令:修改组属性
groupmod [选项] GROUP
-g GID:修改GID;
-n new_name:修改组名;
例子:groupmod -g 1234 name :把现有组name的GID改成1234
groupmod -n tt name :把现有组name的组名改成tt
groupdel命令:删除组
groupdel [选项] GROUP
例子:groupdel name:把name组删除
useradd命令:创建用户
useradd [选项] 登录名
-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本组ID,此组得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加 组, 多个组之间用逗号分隔;
-c, --comment COMMENT:指明注释信息;
-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/et c/skel此目录并重命名实现;指定的家目录路径如果事先存在, 则 不会为用户复制环境配置文件;
-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表 存储在/etc/shells文件中;
-r, --system:创建系统用户;
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D:显示创建用户的默认配置;
useradd -D 选项: 修改默认选项的值;
修改的结果保存于/etc/default/useradd文件中;
例子:useradd -u 1001 mysql :添加用户名mysql并把UID改成1001
useradd -g 1001 mysql :添加用户名mysql并把GID改成1001
useradd -G ee,ww name:添加用户name分别加入ee,ww成为附加组
useradd -c ”name is“ name:添加用户名name 并把注释写上
useradd -d /tmp/name name:添加用户名name并把用户的家目录指定为/tmp/name
useradd -s /bin/tcsh name:添加用户名name并把name的shell改成/bin/tcsh
useradd -r name:添加系统用户name
usermod命令:修改用户属性
usermod [选项] 用户名
-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 [选项] 用户名
-r:删除用户时一并删除其家目录;
passwd命令:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改用户自己的密码;
(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
-l, -u:锁定和解锁用户;
-d:清除用户密码串;
-e DATE: 过期期限,日期;
-i DAYS:非活动期限;
-n DAYS:密码的最短使用期限;
-x DAYS:密码的最长使用期限;
-w DAYS:警告期限;
--stdin:
echo "PASSWORD" | passwd --stdin USERNAME
例子:echo "ww" | passwd --stdin tt :把用户tt密码改成ww
gpasswd命令:
组密码文件:/etc/gshadow
gpasswd [选项] group
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
newgrp命令:临时切换指定的组为基本组;
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
chage命令:更改用户密码过期信息
chage [选项] 登录名
id命令:显示用户的真和有效ID;
id [OPTION]... [USER]
-u: 仅显示有效的UID;
-g: 仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID;
-n: 显示名字而非ID;
例子:id -u name:显示name的UID
.
.
.
su命令:switch user
登录式切换:会通过读取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户;
例子:su - name:切换到用户name,注意-两边要有空格
权限管理:
ls -l
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group的权限;
右三位:定义other的权限
进程安全上下文:
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
否则,就只能应用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
练习:rw-rw-r--, rwxrwxr-x, rwxr-x---, rw------, rwxr-xr-x
664, 640, 600, 775, 750, 755
权限管理命令:
chmod命令:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
三类用户:
u:属主
g:属组
o:其它
a: 所有
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位rwx;
u=
g=
o=
a=
授权表示法:直接操作一类用户的一个权限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]... OCTAL-MODE FILE...
(3) chmod [OPTION]... --reference=RFILE FILE...
选项:
-R, --recursive:递归修改
注意:用户仅能修改属主为自己的那些文件的权限;
从属关系管理命令:chown, chgrp
chown命令:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R:递归修改
例子:chown root:name /tmp/name :把/tmp/name文件的属主和属组修改成root, name
chgrp命令:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
例子:chgrp name /tmp/aa :把/tmp/aa的属组改成name
注意:仅管理员可修改文件的属主和属组;
练习:完成以下任务
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目 录,且shell为/sbin/nologin
例子:groupadd -r -s /sbin/nologin mariadb
2、新建GID为5000的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo密码同用户名;
例子:groupadd -g 5000 mageedu
useradd -d /users/gentoo gentoo
echo "gentoo" | passwd --stdin gentoo
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
例子:useradd -d /users/fedora
echo "fedora" | passwd --stdin fedora
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
例子:useradd -d /users/www www
userdel www
5、为用户gentoo和fedora新增附加组mageedu;
例子:groupadd mageedu :有的话就不用添加了
usermod -G mageedu gentoo
usermod -G mageedu fedora
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;
例子:cp -r /var/log /tmp/
chown -R g+w /tmp/log