Linux的用户组和权限管理之特殊权限及ACL的使用

用户组和权限管理

一、了解和使用批量新建用户和批量修改用户密码:

##用户创建的模板和配置文件的存放位置:/etc/default/useradd;/etc/skel/* ;/etc/login.defs##

批量新建用户(newusers):适合用于新老机器转换时,迁移系统上的用户。

使用格式:

newusers  passwd  filename(.txt格式) ——批量创建用户

命令格式:newuser filename

使用该方法批量创建的新用户其实并没有设置密码的,但使用命令#getent shadow user1 user2 user3 user4 user5 user6 user7查看用户存放密码的配置文件显示是已经生成了密码;因此,我们需要给批量新建的用户初始化口令。

blob.png

格式文件,可参考下图的格式一一对应在文本中编辑好:

用户名:X(密码)UIDGID:用户描述:用户的家目录位置:用户的默认shell

11.png

11.png

上面批量新建的用户由于并没有口令,所以我们使用如下的方法同样给新建的用户设置口令(口令可以不一样)。批量修改密码:(chpasswd

命令格式:cat filename | chpasswd

filename.txt格式) 的格式如下:

usernamepasswd

11.png

同样,我们回顾下给单一用户修改口令,命令为:#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

11.png

 

用户的删除:

命令格式:userdel [OPTION]… login

如果需要将用户的家目录也删除掉的话,则多加如下的选项即可:

-r: 删除用户家目录; 

三、查看用户相关的ID信息:

命令格式:id [OPTION]… [USER]

命令选项: 

-u: UID

-g: GID

-G: Groups

-n: Name(该选项需要结合以上的各个选项一同使用,不可单独使用,否则出错。)

11.png 

四、切换用户或以其它用户身份执行命令:

命令格式:su [options…] [-] [user [args…]]

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录

su -UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

root 切换至其他用户无须密码;非root用户切换时需要密码


换个身份执行命令:(直接使用Username的身份去执行命令,避免了来回切换用户的麻烦。)

su [-] UserName -c 'COMMAND'

选项:-l –login

su -l UserName相当于su -UserName

五、了解和使用passwd来对用户的设置,以及修改用户密码策略:

1passwd对用户的设置:

命令格式:passwd  [OPTIONS]  UserName (修改指定用户的密码,仅root用户权限)

passwd: 修改自己的密码; 

常用选项:

-l:锁定指定用户

-u:解锁指定用户

-e:强制用户下次登录修改密码

-n mindays: 指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天开始警告

-i inactivedays:非活动期限;

–stdin:从标准输入接收用户密码;

修改单一用户的密码,命令如下:

echo "PASSWORD" | passwd—stdinUSERNAME或者echo usernamepasswd | 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,显示密码策略

11.png

下一次登录强制重设密码:chage -d 0 chesfer

chage -m 0 –M 42 –W 14 –I 7 chesfer

chage -E 2016-09-10 chesfer

 

其他操作命令:chfn指定个人信息;chsh指定shellfinger

六、组的创建、修改、删除等操作:

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

11.png 

3、删除组:(groupdel)删除组的条件是该组成员为空。

groupdel GROUP 

 

4、组密码设置:(gpasswd

命令格式:gpasswd  [OPTION]  GROUP

常用选项:

-a user: user添加至指定组中,用于老用户的修改;

-d user: 从指定组中移除用户user

-A user1,user2,…: 设置有管理权限的用户列表

newgrp命令:临时切换基本组;如果用户本不属于此组,则需要组密码

11.png 

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

11.png 

文件的权限有3组,分别为owner(属主),group(属组),other(其他),每一组都有rwx三种设置。

 文件:                                      目录:

r(4):可读,可使用文件查看类工具获取其内容;       可以使用ls查看此目录中文件列表

w(2):可修改其内容:可写;              可在此目录中创建文件,也可删除此目录中的文件

x(1):可执行,可把此文件提请内核启动为一个进程。 可以使用ls -l查看此目录中文件列表,可以cd进入此目录

                 

X:只给目录x权限,不给文件x权限(详见下面的事例及注意点处)

 

11.png

文件操作权限命令:chmod

 

2、第一个是特殊位:d表示目录;l表示连接文件;表示普通文件;b表示为装置(device)文件中可供存储的接口设备;c表示为装置文件中的串行端口设备(如键盘,鼠标);s表示该文件是存放socket信息的; p表示数据输送文件(FIFOpipe,它的主要目的是为了解决多个程序同时存取一个文件时所造成的错误。

 

3、其后面的的9个格子按照之前所说的3个组依次分配,给每个组设置读,写,执行权限。在这里要注意:如果你想开放一个目录,一定要确定X即可执行权限已经赋予了该用户或群,否则是不可以读写的,也就是说,你给的rw是没意义的。

11.png

文件属性操作: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…

修改一类用户的所有权限(rwx):

u= g= o= ug= a= u= ,g= u=,o= (uo=)g= ,o= (go=)

eg: chmod u=wx files

 

修改一类用户某位或某些位权限(rwx):

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  (由6661101101110从左往右去匹配umask0010111111遇到0不变,0遇到10,1遇到10 

新建目录权限: 777-umask

非特权用户umask002

rootumask022 

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… 

6Sticky 位(粘滞键):

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

sticky 设置在文件上无意义

权限设定:chmod o+t DIR… chmod o-t DIR…

例如:eg#ls-ld/tmpd —— rwxrwxrwt 12 rootroot 4096 Nov215:44 /tmp 

7、了解特殊权限位的映射:(suid–4S)作用于二进制程序上上;sgid–2S)当作用于二进制的程序上,用户运行该程序时,自动继承该程序所属组的权限;当作用于目录上时,该目录内新建的文件或子目录所对应的所属组自动继承该目录的所属组(chgrp groupname dirchmod g+s dir);sticky 粘滞位(t–1,只能作用于目录上,作用于文件上没有任何的意义。

SUID: user,占据属主的执行权限位

s: 属主拥有x权限(如下图,原本的fs文件chesfer用户是无法读取的,当我们使用命令#chmod u+s /bin/cat 后,再次chesfer用户去读取fs文件时,发现可以读取fs文件里面的内容了,这是用户chesfer继承了文件属主root的执行权限了)

S:属主没有x权限

11.png

11.png

11.png

11.png

SGID: group,占据属组的执行权限位

s: group拥有x权限(其他用户[不需要在属组内],也能够拥有执行的权限,会自动继承属组的所有权限)

Sgroup没有x权限(作用于二进制文件时,如下图,原本的fs文件chesfer用户是无法读取的,当我们使用命令#chmod g+s /bin/cat 后,再次chesfer用户去读取fs文件时,发现可以读取fs文件里面的内容了,这是用户chesfer继承了文件属组root的执行权限了)

11.png

11.png

11.png

11.png

自动继承属组:

11.png

11.png

11.png

Sticky: other,占据other的执行权限位

t: other拥有x权限(其他用户虽然对目录拥有读写执行的权限,但不能将他人的文件进行删除,只能root和文件的属主能够拥有删除的权限)

Tother没有x权限

如下图,f1文件的属主和属组都是wang用户,f2文件的属主和属组都是tom用户,当我们使用命令#chmod o+t /testdir时,tom用户虽然对/testdir目录拥有读写执行权限,但此时已经无法将用户wang创建的文件进行删除了。

11.png

11.png

other权限位出现T时,other是没有x权限的。

blob.png

 

8、设定文件特定属性:

chattr +A chattr –A 锁定和解除文件atime的刷新)

chattr +i 不能删除,改名,更改

11.png

chattr +a 只能增加

11.png

lsattr 显示特定属性

十、上面学习了Linux文件系统上的权限以及特殊权限:user, group, otherSUID, SGID, Sticky;但是该权限上的设置只能限制于属主、属组和其他(单一限制);如果出现一个用户需要设置权限,该用户既不是属主也不是属组,其他的权位上对other用户做了统一的权限,但这个用户又要比other的权限多一些,这时就无法达到所需的权限设置了。

由于传统的权限有局限性,这时,我们需要引入访问控制列表——ACLAccess Control List),实现灵活的权限管理。

ACL:除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。

CentOS7.0默认创建的xfsext4文件系统有ACL功能。

CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:tune2fs –o acl/dev/sdb1mount –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  删除文件或目录对用户wangacl权限

setfacl -X file.acl directory    调用写好的取消用户权限设置配置文件(格式:u:user)来进行对文件或者文件夹取消权限

setfacl -b file|directory  全部清空文件或目录的acl权限设置

11.png

2ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限:

getfacl可看到特殊权限:flags

默认ACL权限给了x,文件也不会继承x权限。

base ACL 不能删除

setfacl -k dir 删除默认ACL权限

setfacl -b file1清除所有ACL权限

getfacl file1 | setfacl –set-file=-file2 复制file1acl权限给file

 

mask只影响除所有者和other的之外的人和组的最大权限

mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

用户或组的设置必须存在于mask权限设定范围内才会生效:setfacl-m mask::rxfile ,溢出的权限会失效,一句话就是设置的权限不能够超出mask的值。

11.png

–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以.如:

setfacl –set u::rw,u:wang:rw,g::r,o::-file1

 

3、备份和恢复ACL

主要的文件操作命令cpmv都支持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设置详细

 

原创文章,作者:Aaron_wang,如若转载,请注明出处:http://www.178linux.com/27889

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-08 14:34

    文章整体思路清晰,但是层次感不是很清晰,需要对用户、组、权限等进行清晰的区分,这样有利于自己以后在复习。