安全上下文(secure context):
我们看见的权限一般表示为:r, w, x
rwx:
r--:只读
r-x:读和执行
---:无权限
0 000 ---:无权限
1 001 --x: 执行
2 010 -w-: 写
3 011 -wx: 写和执行
4 100 r--: 只读
5 101 r-x: 读和执行
6 110 rw-: 读写
7 111 rwx: 读写执行
755: rwxr-xr-x
640: rw-r-----
660: rw-rw----
775: rwxrwxr-x
Linux系统是一个多用户的时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
Linux基于用户身份对资源访问进行控制
在Linux系统中存在两种用户:系统用户与普通用户。
系统中的每一个用户都有一个ID,就像身份证号一样,它是区分用户的唯一标志。
UID:用户独一无二的身份标识
用户名 UID
超级用户 0
系统标准用户 1~999
普通用户 1000~65535
外部应用程序用户 65535以后
Linux的系统用户如:daemon, mail, lp, nobody等。大多数是不能登录的,因为他们的登录shell为/sbin/nologin。
用户默认配置信息是从/etc/login.defs文件中读取。
上面对应的关系存储位置:
用户关系:
用户:UID, /etc/passwd
组:GID, /etc/group
影子口令:
用户:/etc/shadow
组:/etc/gshadow
#文件的结构
/etc/passwd:
用户名:密码:UID:GID:注释:家目录:默认SHELL
account: 登录名
password: 密码
UID:基本用户ID
GID:基本组ID
comment: 注释
HOME DIR:家目录
SHELL:用户的默认shell
用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:
/etc/group:
组名:密码:GID:以此组为其附加组的用户列表
/etc/shadow:
account: 登录名
encrypted password: 加密的密码
useradd命令
格式:useradd [选项]... 用户名
常用命令选项
-u:指定 UID 标记号
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或UID号)
-G:指定用户的附加组名(或GID号)
-M:不为用户建立并初始化宿主目录
-s:指定用户的登录Shell
[root@localhost ~]# useradd stu01
[root@localhost ~]# ls -ld /home/stu01/
drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost ~]# userdel -r stu01
[root@localhost ~]# ls -ld /home/stu01/
ls: /home/stu01/: 没有那个文件或目录
注意:一般而言,如果该账号只是『暂时不启用』的话,那么将 /etc/shadow 里头最后倒数一个字段设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来!使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何数据了!』
usermod -u uid username 修改用户的UID
usermod -g gid username 修改用户的GID
usermod -l newname oldname 修改用户名
usermod -G groupname username 添加用户到组
usermod -L username 锁定用户
usermod -U username 解除锁定
chsh :用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置。
chfn:改变finger信息
finger :查询一台主机上的登录账号的信息,通常会显示用户名、主目录、停滞时间、登录时间、登录Shell等信息
id:显示用户的 ID,以及所属群组的 ID
chage:命令是修改帐号和密码的有效期限
users、w 、who命令
[root@localhost ~]# grep "adm" /etc/group
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
组帐号名 组成员列表
#添加组帐号
[root@localhost ~]# groupadd -g 1000 market //添加组帐号market
[root@localhost ~]# tail -1 /etc/group
market:x:1000:
groupmod, gpasswd
#删除组帐号
groupdel 用户组
[root@localhost ~]# groupdel market #删除组帐号market
[root@localhost ~]# grep "market" /etc/group
例如:将组名为group2修改为group3。
groupmod -n group3 group2
gpasswd命令
#添加组成员benet
[root@localhost ~]# gpasswd -a mary market
正在将用户“mary”加入到“market”组中
[root@localhost ~]# grep "market" /etc/group
market:x:1000:mary
#删除组成员root
[root@localhost ~]# grep "market" /etc/group
market:x:1000:mary,root,adm
[root@localhost ~]# gpasswd -d root market
正在将用户“root”从“market”组中删除
[root@localhost ~]# grep "market" /etc/group
market:x:1000:mary,adm
groups命令
在红帽Linux系统中,管理员可通过下面的工具管理系统中的所有的用户与组信息。
[root@localhost ~]# tail -2 /etc/passwd
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
tom:x:500:500:BENET Student User:/home/benet:/bin/bash
字段1:用户帐号的名称
字段2:用户密码字串或者密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录Shell信息
用户帐号文件 —— shadow
[root@localhost ~]# tail -2 /etc/shadow
sabayon:!!:14495:0:99999:7:::
mary:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:14495:0:99999:7:::
字段1:用户帐号的名称
字段2:加密的密码字串信息
字段3:上次修改密码的时间
字段4:指的是两次修改口令之间所需的最小天数,0为不作要求
字段5:密码的最长有效天数,默认值为99999
字段6:提前多少天警告用户口令将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
[root@localhost ~]# cat ~/.bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
……
先建立所需要的群组( vi /etc/group )
建立账号的各个属性( vi /etc/passwd )
将passwd与shadow同步化( /usr/sbin/pwconv )
建立该账号的密码 ( passwd acount )
建立使用者家目录 ( cp -r /etc/skel /home/acount )
更改家目录属性( chown -R acount:group /home/acount)
建立新的群组 test ,设其 GID 为 520
[root @test /root ]# vi /etc/group
----略
test:x:520:test <==新增群组,且群组的人为 test ,GID 为 520
建立 test 的各个属性
[root @test /root ]# vi /etc/passwd
----略
test:x:520:520:testing account:/home/test:/bin/bash <==建立各个属性
同步化 /etc/passwd 与 /etc/shadow
[root @test /root ]# pwconv <==将 passwd 的资料转入 /etc/shadow 中!
建立密码
[root @test /root ]# passwd test <==建立使用者 test 密码
Changing password for user test
New password:
Retype new password:
passwd: all authentication tokens updated successfully
建立家目录并转化家目录的拥有者
[root @test /root ]# cp -r /etc/skel /home/test
[root @test /root ]# chown -R test:test /home/test
如何添加大量用户?
1、 vi user.txt
2、newusers < user.txt
3、pwunconv
4、vi passwd.txt
5、chpasswd < passwd.txt
6、pwconv
[root@localhost ~]# ls -l install.log
-rw-r--r-- 1 root root 34298 04-02 00:23 install.log
文件类型 属主 属组
格式1:chmod [ugoa] [+-=] [rwx] 文件或目录...
u、g、o、a 分别表示 属主、属组、其他用户、所有用户
+、-、= 分别表示 增加、去除、设置权限
chmod a-x temp rw- rw- rw- 收回所有用户的执行权限
chmod og-w temp rw- r-- r-- 收回属组用户和其他用户的写权限
chmod g+w temp rw- rw- r-- 赋予属组用户写权限
chmod u+x temp rwx rw- r-- 赋予文件属主执行权限
chmod go+x temp rwx rwx r-x 赋予属组用户和其他用户执行权限
格式2:chmod n1n2n3 文件或目录...
n1n2n3 表示3位八进制数
参数说明:
1. r 对应数值4, w 对应数值2, x 对应数值1
2. rwx合起来就是4+2+1=7,即上边表示为n1
3. rwxrwxrwx表权限全开放的文件,数值777
例如当属性为 [ -rwxrwx--- ] 则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
例如:要将属性变成-rwxr-xr--
-rwxr -x r–
[4+2+1][4+0+1][4+0+0]=754
所以输入: chmod 754 filename
chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]-v 参数,但仅回报更改的部分#改变文件的群组属性
[root@localhost ~/shell]# chgrp -v bin demo1.txt
demo1.txt 文件的属主已经改变为 bin
#根据指定文件改变文件的群组属性
[root@localhost ~/shell]# chgrp --reference=demo1.txt demo6.txt
改变文件 demo6.txt 的群组属性,使得文件 demo6.txt 的群组属性和参考文件 demo1.txt1 的群组属性相同
chmod :改变文件属主(只有管理员可以使用此命令)
umask:控制默认权限,一个shell进程中的umask值仅在当前shell进程中才有效。
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[root@localhost ~]# ll /etc/shadow
---------- 1 root root 977 Apr 3 14:11 /etc/shadow
可见,passwd具有s权限,具有root用户权限,才能修改密码,普通用户具有执行权限但不一定拥有以root身份执行时的权限,添加s权限后就具有了root用户的执行权限
#修改权限u+s
[root@localhost ~]# chmod u+s /bin/netstat
#使用u-x命令(没有执行权限)
[root@localhost ~]# chmod u-x /bin/netstat
#修改权限
[root@localhost ~]# chmod g+s /usr/bin/locate
[root@localhost ~]# chmod g-x /usr/bin/locate
[root@localhost ~]# chmod o-x /tmp/
[root@localhost ~]# chmod o+s /tmp/
chattr:
设置附加权限
i:锁定文件,不能编辑,不能修改,不能删除,不能移动,可以执行
a:仅可以追加文件,不能编辑,不能删除,不能移动,可以执行
#+增加选项 -减少选项 =等于某个权限
#创建文件并设置属性
[root@centos7 ~]# touch file_a file_i
[root@centos7 ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i
#设置属性
[root@centos7 ~]# chattr +a file_a
[root@centos7 ~]# chattr +i file_i
#a权限,无法覆盖写入和删除文件
[root@centos7 ~]# echo 111 > file_a
-bash: file_a: Operation not permitted
[root@centos7 ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
#a权限,只能追加,适用于日志文件
[root@centos7 ~]# echo 111 >> file_a
[root@centos7 ~]# cat file_a
111
# i权限,无法写入,无法删除
[root@centos7 ~]# echo 111 > file_i
-bash: file_i: Permission denied
[root@centos7 ~]# echo 111 >> file_i
-bash: file_i: Permission denied
[root@centos7 ~]# rm -f file_i
rm: cannot remove ‘file_i’: Operation not permitted
[root@centos7 ~]# chattr -a file100
chattr: No such file or directory while trying to stat file100
#解除限制
[root@centos7 ~]# chattr -a file_a
[root@centos7 ~]# chattr -i file_i
#设置属性
[root@centos7 ~]# chattr +a file_a
[root@centos7 ~]# chattr +i file_i
[root@centos7 ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i
#查看文件及属性
[root@centos7 ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i