1、Linux系统的安全模型
1.1、安全3A模型
Authentication:认证 Authorization:授权 Accouting|Audition:审计
1.2、用户
用户(user)是登录Linux系统的一种认证机制; Linux系统识别用户靠的是UID,而非username,username只是便于用户使用的一种手段;类似于命令的别名。 Linux系统的用户分为两大类,三小类:系统用户和普通用户;系统用户可分为管理员和运行系统访问的系统用户。 系统的管理员用户的username默认为root,UID为0; 其他用户的UID为1-65536;这是系统默认创建用户的UID范围,如果指定UID的话,那么是可以超出1-65535的。 系统用户: 1-499, 1-999 ( CentOS7);对守护进程获取资源进行权限分配。这是使用useradd -r UID USERNAME创建系统用户默认的范围。 登录用户: 500+, 1000+( CentOS7);用于用户的交互式登录。
1.3、组group
Linux系统的组:
Groupname/GID
管理员组: 组名同用户名root, GID同UID为0。
普通组:
系统组: 1-499, 1-999( CENTOS7)
普通组: 500+, 1000+( CENTOS7)
组的类别:
用户的主要组(primary group);用户必须属于一个且只有一个主组; 默认创建的用户,他的组名同用户名,且仅包含一个用户,也叫做他的私有组。 用户的附加组(supplementary group):一个用户可以属于零个或多个辅助组。
1.4、Linux安全上下文
运行中的程序:进程 (process),若一个进程以进程发起者的身份运行,那么进程所能够访问资源的权限取决于进程的运行者的身份。
root: /bin/cat sunwuk: /bin/cat
1.5、Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、 UID、主组ID等) /etc/group:组及其属性信息 /etc/shadow:用户密码及其相关属性 /etc/gshadow:组密码及其相关属性
1.6、/etc/passwd文件格式
在这个文件中一共有7个字段:
login name:登录用名(wang) passwd:密码 (x) UID:用户身份编号 (1000) GID:登录默认所在组编号 (1000) GECOS:用户全名或注释 home directory:用户主目录 (/home/wang) shell:用户默认使用shell (/bin/bash)
[root@centos7x ~]#cat /etc/passwd root:x:0:0::/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
1.7、/etc/shadow文件格式
/etc/shadow共计9个字段:
用户名:username; 用户密码:一般用sha512加密; 最近一次密码修改时间:从1970年1月1日起到密码最近一次被更改的时间; 最短使用期限:密码再过几天可以被变更( 0表示随时可被变更); 最长使用期限:密码再过几天必须被变更( 99999表示永不过期); 警告时长:密码过期前几天系统提醒用户(默认为一周); 非活动时长:密码过期几天后帐号会被锁定; 失效期:从1970年1月1日算起,多少天后帐号失效; Reserved Field:保留字段;
注意: 这些字段中与密码相关的字段的单位统统是以天为单位的。 例如第三个字段——最近一次密码修改的时长,就是密码修改那一刻距离Unix元年的天数。 最短使用期限:从最近一次密码修改后那一刻,最少得使用几天后才可以修改密码;0表示没有限制。 最长使用期限:从最近一次密码修改后那一刻,最长可以使用这个账户几天,当超过这个天数就必须要修改密码,否则超过非活动时长规定的天数后,用户就会被锁定。当前了警告时长是指在最长使用期限之前的前几天,系统会警告用户修改密码。 失效期:是指从UNIX元年后算起,多少天后用户的账户失效;他的单位也是天。如果将这个时间设置为1,那么这个账户就立马失效了。如果将最近一次密码修改的时间改为0,那么用户的账户也是立马失效的。
[root@centos7x ~]#cat /etc/shadow root:$6$0jCWSv2C$TsQf4bk71lWjOWBCYoLQD/uVIfFGsr7FNNWgr/9la3blOoFpO8cynNEBgr7RqxrobOr6.KTnE6F5Lw5SBBnW70:17485:0:99999:7::: bin:*:17485:0:99999:7::: daemon:*:17485:0:99999:7:::
1.8、group文件格式
group文件的格式是4个字段:
组名:组密码:组ID:以这个组为附加组的用户列表,多个用户以“,”为分隔符。
root@centos7x ~]#cat /etc/group root:x:0: bin:x:1: admins:x:1014:natasha,harry
1.9、/etc/gshadow文件格式
group文件的格式是4个字段:
组名:组密码:组管理员:以这个组为附加组的用户列表,多个用户以“,”为分隔符。
[root@centos7x ~]#cat /etc/gshadow root::: bin::: daemon::: admins:!::natasha,harry
1.10、用户及组的配置文件修改
由于用户在创建了之后,会自动的修改这四个配置文件,这四个配置文件是有特定的格式;
为了保证系统能稳定的运行,不建议手动的修改这4个文件;建议的方式是使用用户及组管理的相关命令(将在后面介绍);
或者是使用:vipw和vigr进行passwd文件和group文件的修改;在修改后使用pwck和grpck命令进行格式的检查。
2、用户和组管理命令
(1)用户管理命令
useradd usermod userdel
(2)组帐号维护命令
groupadd groupmod groupdel
(3)其他命令;
用户相关:passwd, su, id, finger, chfn, chage, chsh; 组 相 关:gpasswd, newgrp, groupmems, groups; 权限相关:见下节。
2.1、用户创建: useradd
语法:
useradd [options] LOGIN
选项:
-u UID; -o 配合-u 选项,不检查UID的唯一性; -g GID:指明用户所属基本组,可为组名,也可以GID; -c "COMMENT":用户的注释信息; -d HOME_DIR: 以指定的路径(不存在)为家目录; -s SHELL: 指明用户的默认shell程序;可用列表在/etc/shells文件中; -G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在; -N 不创建私用组做主组,使用users组做主组; -r: 创建系统用户 CentOS 6: ID<500, CentOS 7: ID<1000; -m 创建家目录,用于系统用户; -M 不创建家目录,用于非系统用户;
用户创建的默认值设定: /etc/default/useradd文件;
所以显示或更改默认设置;
useradd -D useradd –D -s SHELL useradd –D –b BASE_DIR useradd –D –g GROUP
新建用户的相关文件和命令:
/etc/default/useradd:设置新建用户的默认配置; /etc/login.defs:新建用户的默认
2.2、用户属性修改
语法:
usermod [OPTION] login
选项:
-u UID: 新UID; -g GID: 新主组; -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项; -s SHELL:新的默认SHELL; -c 'COMMENT':新的注释信息; -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家目录中的数据,同时使用-m选项; -l login_name: 新的名字; -L: lock指定用户,在/etc/shadow 密码栏的增加 !; -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉; -e YYYY-MM-DD: 指明用户账号过期日期;注意:虽然设定用户过期期限使用的具体的某一天,但是记录在shadow文件中时,记录的是距UNIX元年的天数。 -f INACTIVE: 设定非活动期限;
2.3、删除用户
语法:
userdel [OPTION]... login
选项:
-r: 删除用户家目录;
2.4、查看用户ID信息:id命令
id [OPTION]... [USER]
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
2.5、su命令:切换用户或以其他用户身份执行命令
语法:
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录; su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换;
root用户su至其他用户无须密码;非root用户切换时需要密码;
换个身份执行命令:
su [-] UserName -c 'COMMAND
选项:
-l --login su -l UserName 相当于 su - UserName 普通用户使用su命令就相当于su root。
2.6、设置及修改用户密码
修改指定用户的密码,仅root用户有权限修改别的用户的密码。
passwd [OPTIONS] UserName
修改自己的密码:passwd;
常用选项:
-l:锁定指定用户; -u:解锁指定用户; -e:强制用户下次登录修改密码; -n mindays: 指定最短使用期限; -x maxdays:最大使用期限; -w warndays:提前多少天开始警告; -i inactivedays:非活动期限; --stdin:从标准输入接收用户密码; echo "PASSWORD" | passwd --stdin USERNAME
2.7、修改用户密码策略
语法:
chage [OPTION]... LOGIN
选项:
-d LAST_DAY:格式可以是YYYY-MM-DD,或者是一个整数,表示距离UNIX元年的天数;将这个值改为0,那么下次用户登录时就必须要更改密码,即用户密码已经过期。 -E --expiredate EXPIRE_DATE -I --inactive INACTIVE -m --mindays MIN_DAYS -M --maxdays MAX_DAYS -W --warndays WARN_DAYS –l 显示密码策略
示例:
chage -d 0 tom 下一次登录强制重设密码 chage -m 0 –M 42 –W 14 –I 7 tom chage -E 2016-09-10 tom
[root@centos7x ~]#chage -l xixi Last password change: Nov 17, 2017 Password expires: never Password inactive: never Account expires: never Minimum number of days between password change: 0 Maximum number of days between password change: 99999 Number of days of warning before password expires: 7
2.8、用户信息查看及修改命令
chfn:指定个人信息; 清除用户的finger信息: [root@centos7x ~]#chfn -f "" -o '' -p '' -h '' chen Changing finger information for chen. Finger information changed. chsh:指定shell; finger [USER_NAME]:查看用户的finger信息;
2.9、创建组
语法:
groupadd [OPTION]... group_name
选项:
-g GID: 指明GID号; [GID_MIN, GID_MAX] -r: 创建系统组; CentOS 6: ID<500; CentOS 7: ID<1000;
2.10、修改和删除组
组属性修改:
语法:
groupmod [OPTION]... group
选项:
-n group_name: 新名字 -g GID: 新的GID
组删除:
groupdel GROUP
2.11、更改组密码
语法:
gpasswd [OPTION] GROUP
选项:
-a user 将user添加至指定组中 -d user 从指定组中移除用户user -A user1,user2,... 设置有管理权限的用户列表
2.12、更改和查看组成员
语法:
groupmems [options] [action]
options:
-g, --group groupname 更改为指定组 (只有root) Actions: -a, --add username 指定用户加入组 -d, --delete username 从组中删除用户 -p, --purge 从组中清除所有成员 -l, --list 显示组成员列表
2.13、临时切换主组
newgrp命令:
如果用户本不属于此组,则需要组密码;
2.13、查看用户所属组列表
语法:
groups [OPTION].[USERNAME]...