用户组和权限管理
一、了解和使用批量新建用户和批量修改用户密码:
##用户创建的模板和配置文件的存放位置:/etc/default/useradd;/etc/skel/* ;/etc/login.defs##
批量新建用户(newusers):适合用于新老机器转换时,迁移系统上的用户。
使用格式:
newusers passwd filename(.txt格式) ——批量创建用户
命令格式:newuser filename
使用该方法批量创建的新用户其实并没有设置密码的,但使用命令#getent shadow user1 user2 user3 user4 user5 user6 user7查看用户存放密码的配置文件显示是已经生成了密码;因此,我们需要给批量新建的用户初始化口令。
格式文件,可参考下图的格式一一对应在文本中编辑好:
用户名:X(密码):UID:GID:用户描述:用户的家目录位置:用户的默认shell
上面批量新建的用户由于并没有口令,所以我们使用如下的方法同样给新建的用户设置口令(口令可以不一样)。批量修改密码:(chpasswd)
命令格式:cat filename | chpasswd
filename(.txt格式) 的格式如下:
username:passwd
同样,我们回顾下给单一用户修改口令,命令为:#echo “passwd” | passwd –stdin username
当我们批量新建用户和批量修改完口令后,尝试使用新用户账号和口令登陆时,发现新用户能够登陆进入,但并没有加载配置文件(家目录下其实已经以用户名生成了相关的目录,缺少的时配置文件,因此我们需要手动去从系统新建用户配置文件的目录(/etc/skel/*)下将相应的初始配置文件复制到相应的用户家目录下):
命令:#cp -r /etc/skel/. /testdir/user1/
(此复制配置文件到相应家目录的操作需要重复执行,也可以使用shell脚本来执行[需懂得shell编程,此处不做介绍])
二、用户(UID)的属性修改:
命令格式:usermod [OPTION] login
使用选项:
-u UID: 新UID
-g GID: 新基本组
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;(**如需要全部清除附加组,则使用命令#usermod -D “” username**)
-s SHELL:新的默认SHELL;
-c 'COMMENT':新的注释信息;
-d HOME: 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加!
-U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期;
-f INACTIVE: 设定非活动期限;
各选项的使用如下图:
eg:
# usermod -u 2000 -g chesfer -G bin,root -s /bin/csh -md /testdir/nchk2 -l wanglin -e 2017-08-02 -f 5 wanglin
用户的删除:
命令格式:userdel [OPTION]… login
如果需要将用户的家目录也删除掉的话,则多加如下的选项即可:
-r: 删除用户家目录;
三、查看用户相关的ID信息:
命令格式:id [OPTION]… [USER]
命令选项:
-u: UID
-g: GID
-G: Groups
-n: Name(该选项需要结合以上的各个选项一同使用,不可单独使用,否则出错。)
四、切换用户或以其它用户身份执行命令:
命令格式:su [options…] [-] [user [args…]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su -UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root 切换至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:(直接使用Username的身份去执行命令,避免了来回切换用户的麻烦。)
su [-] UserName -c 'COMMAND'
选项:-l –login:
su -l UserName相当于su -UserName
五、了解和使用passwd来对用户的设置,以及修改用户密码策略:
1、passwd对用户的设置:
命令格式:passwd [OPTIONS] UserName (修改指定用户的密码,仅root用户权限)
passwd: 修改自己的密码;
常用选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限;
–stdin:从标准输入接收用户密码;
修改单一用户的密码,命令如下:
echo "PASSWORD" | passwd—stdinUSERNAME或者echo username:passwd | chpasswd
2、修改用户密码策略:
命令格式:chage [OPTION]… LOGIN
常用选项:
-d LAST_DAY 设置用户下次登录需要重新设置密码(-d后面加0即可)
-E, –expiredateEXPIRE_DATE
-i, –inactive INACTIVE 到了最长有效期后,宽限用户多少天修改密码,否则锁定用户
-m, –mindaysMIN_DAYS 最短密码有效期
-M, –maxdaysMAX_DAYS 最长密码有效期
-W, –warndaysWARN_DAYS 提前多少天提醒用户需要修改密码
–l,显示密码策略
下一次登录强制重设密码:chage -d 0 chesfer
chage -m 0 –M 42 –W 14 –I 7 chesfer
chage -E 2016-09-10 chesfer
其他操作命令:chfn指定个人信息;chsh指定shell;finger
六、组的创建、修改、删除等操作:
1、 创建组:
命令格式:groupadd [OPTION]… group_name
-g GID: 指明GID号;
-r: 创建系统组;
CentOS 6: GID<500
CentOS 7:G ID<1000
2、修改组属性:(groupmod)
命令格式:groupmod [OPTION]… group
-n group_name: 新名字
-g GID: 新的GID;
3、删除组:(groupdel)删除组的条件是该组成员为空。
groupdel GROUP
4、组密码设置:(gpasswd)
命令格式:gpasswd [OPTION] GROUP
常用选项:
-a user: 将user添加至指定组中,用于老用户的修改;
-d user: 从指定组中移除用户user
-A user1,user2,…: 设置有管理权限的用户列表
newgrp命令:临时切换基本组;如果用户本不属于此组,则需要组密码
5、组成员的查看与更改:
命令格式:groupmems [options] [action]
常用选项:
-g, –group groupname更改为指定组(只有root有权限)
Actions:
-a, –add username 指定用户加入组
-d, –delete username 从组中删除用户
-p, –purge 从组中清除所有成员
-l, –list 显示组成员列表
groups [OPTION].[USERNAME]… 查看用户所属组列表
七、文件权限的初步认识与使用:
1、在linux中,常常涉及到权限的问题。我们在执行shell命令ls -l时,就会显示出文件的所有信息,第一组就是文件属性中的高级属性,权限。这一组总共有10格,每一格是一个bit。
文件的权限有3组,分别为owner(属主),group(属组),other(其他),每一组都有rwx三种设置。
文件: 目录:
r(4):可读,可使用文件查看类工具获取其内容; 可以使用ls查看此目录中文件列表
w(2):可修改其内容:可写; 可在此目录中创建文件,也可删除此目录中的文件
x(1):可执行,可把此文件提请内核启动为一个进程。 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限(详见下面的事例及注意点处)
文件操作权限命令:chmod
2、第一个是特殊位:d表示目录;l表示连接文件;–表示普通文件;b表示为装置(device)文件中可供存储的接口设备;c表示为装置文件中的串行端口设备(如键盘,鼠标);s表示该文件是存放socket信息的; p表示数据输送文件(FIFO,pipe),它的主要目的是为了解决多个程序同时存取一个文件时所造成的错误。
3、其后面的的9个格子按照之前所说的3个组依次分配,给每个组设置读,写,执行权限。在这里要注意:如果你想开放一个目录,一定要确定X即可执行权限已经赋予了该用户或群,否则是不可以读写的,也就是说,你给的r,w是没意义的。
文件属性操作:chown 设置文件的所有者(chown只有root才可以执行);chgrp 设置文件的属组信息(chgrp可以执行的有root,文件的属主[只能更改为自己所在的组])
eg: #chown chesfer:root files(将files的属主改为了chesfer) ;chgrp chesfer files(将files的默认用户组改为chesfer)
4、修改文件的属主和属组:
修改文件的属主:(chown)
命令格式:chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER:
OWNER:GROUP
:GROUP
命令中的冒号可用.替换;
-R: 递归
chown [OPTION]… –reference=RFILE FILE…
eg:#chown –reference files1 files2 将files1的属主复制给files2,让两个文件的属主一样
修改文件的属组:(chgrp)
chgrp [OPTION]… GROUP FILE…
-R 递归
chgrp [OPTION]… –reference=RFILE FILE…
eg:#chgrp –reference files1 files2 将files1的属组复制给files2,让两个文件的属组一样
5、熟记常用权限所对应的八进制数、特殊权限数字法:
常用权限 SUID SGID STICKY
— 000 0 000 0
–x 001 1 001 1
-w- 010 2 010 2
-wx 011 3 011 3
r– 100 4 100 4
r-x 101 5 101 5
rw- 110 6 110 6
rwx 111 7 111 7
例如:640: rw-r—– ;rwxr-xr-x: 755 ;chmod 4777 /tmp/a.txt
6、文件权限修改命令chmod的使用:
命令格式一:chmod [OPTION]… OCTAL-MODE FILE…
常用选项: -R: 递归修改权限
命令格式二:chmod[OPTION]… MODE[,MODE]… FILE…
修改一类用户的所有权限(r、w、x):
u= ;g= ;o=; ug= ;a= ;u= ,g= ;u=,o= (uo=);g= ,o= (go=)
eg: chmod u=wx files
修改一类用户某位或某些位权限(r、w、x):
u+ ;u- ;g+ ;g-;o+;o-;a+ ;a-;
eg:chmod u+wx files
chmod[OPTION]… –reference=RFILE FILE…
eg:#chmod –reference files1 files2 将files1的权限复制给files2,让两个文件的权限一样
chmod -R +r 目录 all 全部都增加相应的权限
chmod -R +w 目录 只有所有者会增加相应的权限
chmod -R +x 目录 all 全部都增加相应的权限
事例:
chgrp sales testfile 更改testfile的默认属组为sales
chown root:admins testfile 更改testfile的默认属主为root,属组为admins
chmod u+wx,g-r,o=rx file 给file的属主增加写和执行的权限,属组去掉读的权限;其他的增加读和执行权限
chmod -R g+rwX /testdir 给testdir目录以及目录所有子目录的属组增加读写执行权限,而文件目录及子目录下的文件属组只是增加了相应的读写权限而不增加执行权限(-R递归)
chmod 600 file 给文件更改为600的权限,rw——–
chown mage testfile 将文件testfile的属主更改为mage
注意:上面事例中所提到的大写-X选项,如果想要使用,前提的条件是目录及子目录下的文件,无论是属主、属组或者其他权限位上都不能够存有执行的权限x,否则执行命令chmod –R g+rwX files,虽然目录、子目录、原来没有带x权限的文件也不会增加执行的权限,但是原本存有x权限的文件(属主、属组、其它 任何一项存有x),都会把文件的所有权限位都增加上x的执行权限。
八、新建文件和目录的默认权限:
umask值可以用来保留在创建文件权限
新建文件权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
默认权限=最大权限-umask
文件:发现结果又奇数权限+1,偶数权限不变。目录不变。
666 —110110110
umask=137 —001011111
(666-137=53-1)——将53-1的每一个位全部都一一对应加上1,即得到640的权限值。
屏蔽:—110100000 (由666的1101101110从左往右去匹配umask的001011111,1遇到0不变,0遇到1变0,1遇到1变0)
新建目录权限: 777-umask
非特权用户umask是002
root的umask是022
umask命令的使用:
umask: 查看用户的umask值
umask #: 设定umask值(此设置为临时设置,永久生效需要更改配置文件)eg: #umask 002
umask –S 模式方式显示
umask –p 输出可被调用
全局设置:/etc/bashrc用户设置:~/.bashrc(修改完成后,执行..bashrc,无需登录即刻生效)
九、Linux文件系统上的特殊权限:SUID, SGID, Sticky
1、前面我们了解和学习了文件系统上的三种常用权限:r, w, x ;user, group, other,下面我们学习文件系统上的特殊权限。
2、安全上下文:
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
3、可执行文件上SUID权限:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:chmod u+s FILE… ;chmod u-s FILE…
4、可执行文件上SGID权限:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属组
权限设定:chmod g+s FILE… ;chmod g-s FILE…
5、目录上的SGID权限:
默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
权限设定:chmod g+s DIR… ;chmod g-s DIR…
6、Sticky 位(粘滞键):
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:chmod o+t DIR… ;chmod o-t DIR…
例如:eg:#ls-ld/tmpd —— rwxrwxrwt 12 rootroot 4096 Nov215:44 /tmp
7、了解特殊权限位的映射:(suid–4(S)作用于二进制程序上上;sgid–2(S)当作用于二进制的程序上,用户运行该程序时,自动继承该程序所属组的权限;当作用于目录上时,该目录内新建的文件或子目录所对应的所属组自动继承该目录的所属组(chgrp groupname dir;chmod g+s dir);sticky 粘滞位(t)–1,只能作用于目录上,作用于文件上没有任何的意义。)
SUID: user,占据属主的执行权限位
s: 属主拥有x权限(如下图,原本的fs文件chesfer用户是无法读取的,当我们使用命令#chmod u+s /bin/cat 后,再次chesfer用户去读取fs文件时,发现可以读取fs文件里面的内容了,这是用户chesfer继承了文件属主root的执行权限了)
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限(其他用户[不需要在属组内],也能够拥有执行的权限,会自动继承属组的所有权限)
S:group没有x权限(作用于二进制文件时,如下图,原本的fs文件chesfer用户是无法读取的,当我们使用命令#chmod g+s /bin/cat 后,再次chesfer用户去读取fs文件时,发现可以读取fs文件里面的内容了,这是用户chesfer继承了文件属组root的执行权限了)
自动继承属组:
Sticky: other,占据other的执行权限位
t: other拥有x权限(其他用户虽然对目录拥有读写执行的权限,但不能将他人的文件进行删除,只能root和文件的属主能够拥有删除的权限)
T:other没有x权限
如下图,f1文件的属主和属组都是wang用户,f2文件的属主和属组都是tom用户,当我们使用命令#chmod o+t /testdir时,tom用户虽然对/testdir目录拥有读写执行权限,但此时已经无法将用户wang创建的文件进行删除了。
other权限位出现T时,other是没有x权限的。
8、设定文件特定属性:
(chattr +A 或chattr –A 锁定和解除文件atime的刷新)
chattr +i 不能删除,改名,更改
chattr +a 只能增加
lsattr 显示特定属性
十、上面学习了Linux文件系统上的权限以及特殊权限:user, group, other,SUID, SGID, Sticky;但是该权限上的设置只能限制于属主、属组和其他(单一限制);如果出现一个用户需要设置权限,该用户既不是属主也不是属组,其他的权位上对other用户做了统一的权限,但这个用户又要比other的权限多一些,这时就无法达到所需的权限设置了。
由于传统的权限有局限性,这时,我们需要引入访问控制列表——ACL(Access Control List),实现灵活的权限管理。
ACL:除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。
CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:tune2fs –o acl/dev/sdb1;mount –o acl/dev/sdb1 /mnt
ACL生效顺序:所有者,自定义用户,自定义组,其他人
1、访问控制列表:为多用户或者组的文件和目录赋予访问权限rwx
mount -o acl /directory 让系统中整个分区具有acl的功能
getfacl file |directory 查看文件或者目录的acl权限设置详细
setfacl -m u:wang:rwx file|directory 指定现有的文件或目录对用户wang设置有读写执行权限
setfacl -Rm g:sales:rwX directory 对目录下的子目录自动继承组sales的的读写执行权限,而文件只会继承读写权限不会继承执行权限。
setfacl -M file.acl file|directory 调用写好的权限设置配置文件(格式:user::rw-)来进行对文件或者文件夹设置权限
setfacl -m g:salesgroup:rw file| directory 对指定的文件或者目录设置属组具有读写权限
setfacl -m d:wang:rx file|directory d是默认的意思,该命令执行后对于目录下新建的文件会自动让wang用户具有读写的权限,对旧文件不影响;对新建的子目录或者子目录下的新建文件也会同样继承相应的权限设置
setfacl -x u:wang file |directory 删除文件或目录对用户wang的acl权限
setfacl -X file.acl directory 调用写好的取消用户权限设置配置文件(格式:u:user)来进行对文件或者文件夹取消权限
setfacl -b file|directory 全部清空文件或目录的acl权限设置
2、ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限:
getfacl可看到特殊权限:flags
默认ACL权限给了x,文件也不会继承x权限。
base ACL 不能删除
setfacl -k dir 删除默认ACL权限
setfacl -b file1清除所有ACL权限
getfacl file1 | setfacl –set-file=-file2 复制file1的acl权限给file
mask只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效:setfacl-m mask::rxfile ,溢出的权限会失效,一句话就是设置的权限不能够超出mask的值。
–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以.如:
setfacl –set u::rw,u:wang:rw,g::r,o::-file1
3、备份和恢复ACL:
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt 将指定目录的acl设置导出到备份文件中
#setfacl -R -b /tmp/dir1 递归删除指定目录下的所有acl设置
#setfacl -R –set-file=acl.txt /tmp/dir1 将备份的acl设置递归还原到目录上生效
#getfacl -R /tmp/dir1 递归查看目录下的所有acl设置详细