• 理解linux的安全模型
  • 理解用户账号和组群账号的目的
  • 用户和组管理命令
  • 理解并设置文件权限
  • 默认权限
  • 特殊权限
  • ACL

安全3A

  • 资源分派
   Authentication : 认证
   Authorization : 授权
   AccoutingAudition : 审计

1. 用户user

  • 令牌token,identity
linux用户:Username/UID  
    管理员:root ,0  
    普通用户:1-60000 自动分配  
    系统用户:1-499.1-999(Centos7)  
对守护进程获取资源进行权限分配  
    登录用户:500+,1000+(Centos7)  
交互式登录 

2. 组 group

  • 目的是为了授权
  • gid 只是当前工作主工作组的展示, 而groups 包含了用户所在的所有组。
Linux组:Groupname/GID
管理员组:root,0
普通组:
    系统组:1-499,1-999(centos7)
	普通组:500+,1000+(cenos7)

3. 安全上下文

Linux安全上下文
	运行中的程序:进程(procees)
	以进程发起者的身份运行:
		root:/bin/cat
		mage: /bin/cat
    进程所能够访问资源的权限取决于进程的运行者的身份	

4. 用户和组的配置文件

Linux用户和组的主要配置文件:
	/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
	/etc/group:组及其属性信息
	/etc/shadow:用户密码及其相关属性
	/etc/gshadow:组密码及其相关属性

passwd文件格式

login name: 登录用名
passwd:     密码(x)
UID:        用户身份编号(1000)
GID:        登录默认所在组编号(1000)
GECOS:      用户全名或注释
home directory:用户主目录(/home/wang)
shell:      用户默认使用shell(/bin/bash)
  • nologin shell 表示不能登陆 作为系统账户,给程序用

  • /etc/shadow中

    $1:md5加密算法   182bit
	$6:sha512加密算法  512bit 
	$...$ 表示盐(salt) 
  • shadow 文件格式:
例:adong:$6$ThMn8HCsKSBbE0cr$rgsHimcyDkKyEcyZpRwBb3.HY59HJXTFJs/bUC93QuTaZm716AnlE6f5.NMX.weqPakNeotfGQilpwjImvYV4/::0:99999:7:::

    登录用名
	用户密码:一般用sha512加密
	从1970年1月1日起到密码最近一次被变更的时间
	密码再过几天可以被变更(0表示随时可以变更)
	密码再过几天必须被变更(9999表示永不过期)
	密码过期前几天系统提醒用户(默认为一周)
	密码过期几天后账号会被锁定
	从1970年1月1日算起,多少天后失效
  • openssl rand -base64 12 生成base64编码随机口令
  • 在cat /etc/login.defs文件中 定义了加密算法

文件操作

vipw =vi /etc/passwd   检查文件格式是否正确
    -s 更改shadow
vigr = vi /etc/group 
     -s 更改gshadow 

pwck 检查/etc/passwd文件格式
grpck 检查/etc/shadow 和 /etc/gshadow文件格式

5. 用户和组管理命令

新用户的相关文件和命令

/etc/skel            为新建目录的模板文件夹
/etc/login.defs      账号配置文件
/etc/default/useradd 定义新建账户模板

newusers passwd格式文件 批量创建用户

格式:user1:x:2000:2000:test user1:/home/user1:/bin/csh
创建users文件 users.txt
newusers users.txt 可以批量创建用户

chpasswd 批量修改用户口令

格式:user1:passwd1
      user2:passwd2
创建用户密码文件 passwd.txt
cat passwd.txt | chpasswd 将用户密码输出
  • getent passwd|shadow|group|gshadow adong 查看用户信息

6. 用户管理命令

  • 用户创建:useradd
useradd [OPTINON] LOGIN
    -u 指定用户的UID
    -d 指定家目录的位置
	-c 指定备注的内容
	-s 指定shell程序文件名
	-G 指定用户加入某个普通组
	-g 指定用户的私有组(群组)
	-r 创建系统用户(服务账户)
	-M 不创建用户的家目录
	-m 创建用户的家目录(默认)
	-e 2014/7/25 用户过期时间
	-o 配合-u选项,不检查UID的唯一性
例:useradd cyy -d /home/abc -c huaidan -u 2000  -s /sbin/nologin
	             指定家目录      备注   指定uid    指定 shell
默认值设定:/etc/default/useradd
显示或更改默认设置
    useradd -D
    useradd -D -s SHELL  (bin/bash)
    useradd -D -b BASE_DIR (/home/file)
    useradd -D -g GROUP  (组)   
  • 用户属性修改:usermod
usermod [OPTION] login
    -u UID:修改用户ID
    -g GID:修改用户所属的组
    -s SHELL:新的默认SHELL
    -c 'COMMENT':新的注释信息
    -d HOME:新家目录不会自动创建;若要创建新家目录并移动原家目录数据,同时使用-m选项
    -(a)G 修改用户所属的附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
    -l login_name:新的名字(为用户更改登录名称)
    -L lock指定用户,在/etc/shadow 密码栏的增加'!'   (锁定用户)
    -U unlock指定用户,将/etc/shadow 密码栏的'!'拿掉  (解锁用户)
    -e YYYY-MM-DD:指明用户账号过期日期
    -f INACTIVE 设定非活动期限
  • 删除用户:userdel
userdel[OPTION]...login
    -r: 删除用户家目录
  • 删除用户附加组
    usermod -G "" username  
    usermod -G GROUP username 覆盖组

7. 组账号维护命令

  • 创建组:groupadd
 groupadd [OPTION] ...group_name
	  -g GID  指明GID号;[GID_MIN,GID_MAX]
	  -r      创建系统组
	          CentOS6:ID<500
			  Centos7: ID<1000
  • 修改组:groupmod
groupmod [OPTION]...groupmod
		-n group_name  改组名
		-g  GID:新的GID
  • 删除组:groupdel
groupdel GROUP
    如果为用户的私有组,则在用户删除之前,无法删除组
  • 更改组密码:gpasswd
gpasswd[option]group
    -a user 将user添加至指定组中
    -d user 从指定组中移除用户user
    -A user1,user2,... 设置有管理权限的用户列表
newgrp:临时切换主组
    如果用户本身不属于此组,则需要组密码

更改和查看组成员 groupmems

groupmems [options] [action]
options:
  -g,--group groupname 更改为指定组(只有root)
  -R,--root CHROOT_DIR 
Actions:
  -a,--add username 指定用户加入组
  -d,--delete username 从组中清除成员
  -p,--purge 从组中清除所有成员
  -l,--list 显示组成员列表
groups [OPTION].[USERNAME]...查看用户所属列表
示例:
查看有哪些用户属于sales组
# groupmems -g sales -l
linda  lisa 

从sales组中删除lisa
# groupmems -d lisa -g sales
# groupmems -g sales -l
linda

添加用户到组里
# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root)
# groupmems -a lxj2 -g sales
# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root),1238(sales)

也可以使用usermod命令将用户添加到组里:
usermod-AG将把用户添加到新的组中,这些组将用作他们的辅助组。
使用usermod将用户linda和lisa添加到组销售,并将lori和bob添加到组账户:
usermod -aG sales linda
usermod -aG sales lisa
usermod -aG account lori
usermod -aG account bob

练习

  • (1)创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution""
[root@centos7 ~]#useradd -s /bin/csh -c 'Gentoo Distribution' -G bin,root gentoo
[root@centos7 ~]#getent passwd gentoo
gentoo:x:1002:1002:Gentoo Distribution:/home/gentoo:/bin/csh
[root@centos7 ~]#groups gentoo
gentoo : gentoo root bin
  • (2)创建下面的用户、组和组成员关系
    名字为webs的组
    用户nginx,使用webs作为附加组
    用户varnish,使用webs作为附加组
    用户mysql,不可交互登录系统,且不是webs的成员,nginx,vamish,mysql密码都是magedu
# groupadd webs
# useradd -G webs nginx
# useradd -G webs varnish
# useradd -s /sbin/nologin mysql 
# echo magedu | passwd --stdin nginx
Changing password for user nginx.
passwd: all authentication tokens updated successfully.
# echo magedu | passwd --stdin varnish
Changing password for user varnish.
passwd: all authentication tokens updated successfully.
# echo magedu | passwd --stdin mysql
Changing password for user mysql.
passwd: all authentication tokens updated successfully.
  • (3) 当用户docher对/testdir目录无执行权限时,意味着无法做哪些操作?
1. 无法进入目录
2.可以用ls查看列表,但是无法查看文件属性类型
3.就算对目录中文件有rw权限,也无法查看和写入 >>(追加)也不行
  • (4) 当用户mongodb对/testdir目录无读权限时,意味着无法做哪些操作?
1.可以进入目录,无法查看列表,可以查看ll file 详细信息
2.可以执行目录内程序,cat file可以查看文件内容
3.如果对文件有w权限,还可以通过>>写入文件

9. 查看用户相关的ID信息

id [OPTION]...[USER]
    -u: 显示UID
	-g:显示GID
	-G: 显示用户所属的组的ID
	-n:显示名称,需配合ugG使用

10. 切换用户或以其他用户身份执行命令:su

su [username] 切换身份   不完全切换
    非登录式切换,即不会读取用户的配置文件,不改变当前工作目录
su - [username] 完全切换
    登录式切换,会读取目标用户的配置文件,切换至家目录
切换身份执行命令
    su - root -c 'command' 
root su至其他用户无须密码;非root用户切换时需要密码

11. 设置密码

passwd

passwd[OPTIONS]UserName:修改指定用户的密码
常用选项:
    -d:删除指定用户密码
	-l:锁定指定用户密码
	-u:解锁指定用户密码
	-e:强制用户下次登录修改密码
	-f:强制操作
	--stdin:从标准输入接收用户密码
	    实例:echo "PASSWORD" |passwd --stdin USERNAME
echo PASSWD | passwd --stdin USERNAME  &> /dev/null
useradd USERNAME;echo PASSWD | passwd --stdin USERNAME;passwd -e USERNAME

12. 修改用户密码策略

chage[option]...login
    -d last_day
    -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-17 tom
chage -E 2016-09-10 tom 

用户相关的其他命令

finger  user  查看用户信息
chfn user     更改用户描述信息
chsh -s       更改用户的shell
    例: chsh -s  /bin/nologin adong  
chage [user]    更改用户口令有效期
chage -l [user] 查看用户口令信息

文件权限

文件的权限主要针对三类对象进行定义

owner 属主,u
group 属组,g 
other 其他,o

每个文件针对每类访问者都定义了三种权限

r   Readable
w   Writable
x   eXcutable

文件

r 可使用文件查看类工具获取其内容
	w 可修改其内容
	x 可以把此文件提请内核启动为一个进程

目录

r 可以使用ls查看此目录中文件列表
	w 可在此目录中创建文件,也可删除此目录中的文件呢
	x 可以使用ls -l 查看此目录中文件元数据(需配合r),可以cd进入此目录
	X 指给目录x权限,不给文件x权限(如果某个文件有执行权限,X会给其他所有者赋予权限)

1. 修改文件的属主和属组

修改文件的属主:chown

chown [OPTION]...[OWNER][:[GROUP]]FILE...
  用法说明:
    OWNER        更改所有者
    OWNER:GROUP  更改所属组
	:GROUP       冒号也可用.替换
	chown[OPTION]...--reference=REILE FILE
    -R:递归

修改文件的属组:chgrp

chgrp[option]...group file
chgrp[option]...--reference=reile file...
-R  递归

更改文件rwx权限:chmod

1.模式法 
u=rwx,g=rw,o=r file
2.数字法
rwxrw-r--  file
111110100 转化为10进制764
--- 0

--x 
001  1
-w-
010  2
r--
100  4
chmod [option]...octal-mode file...
    -R:递归修改权限
chmod[option]...mode[mode]...file...
    mode:
    修改一类用户的所有权限
        u= g= o= ug= a= u= g=
    修改一类用户某位或某些权限
        u+ u- g+ g- o+ o- a+ a- 
chmod[option]...--reference=rfile file...
    参考refile文件的权限,将file的修改为同rfile

chgrp修改文件的属组

chgrp[OPTION]...GROUP FILE
	chgrp[OPTION]...--reference=REILE FILE
	-R 递归

权限设置示例

chgrp sales testfile
chown root:admins testfile
chmod -R g+rwx  testdir
chmod 600 file
chown mage testfile 

面试题 cp f1 dir/fff 需要的命令

1.cp命令需要执行权限 
2.f1需要读权限,所在文件夹需要执行权限,否则进不去,
3.要拷贝的目标文件夹,至少要有执行和写权限