linux 控制用户读权限,Linux之用户管理与权限控制

早期Linux系统设计为了能够实现多用户、多进程高效的利用服务器资源,在此种情况下,为了能够保证用户与用户之间的文件不被随意的访问及修改、删除等操作,用户、组的管理能在某种程序上实现管理用户或批量管理用户。由于Linux的设计哲学思想『一切皆文件』,用户对设备的访问就是对文件的访问。

一、用户与组

Linux下有三类用户

1.超级用户: root 具有操作系统的一切权限 UID 值为0

2.普通用户:

普通用户具有操作系统有限的权限, UID值 500+

3.伪用户:

是为了方便系统管理, 满足相应的系统进程文件属主的要求, 伪用户不能登录系统,CentOS6 UID值 1 -- 499,CentOS7 UID值为1 -- 999.

二、安全上下文

当一个用户发起一个进程时,此进程将继承用户的属主、属组的权限,再以进程继承的权限来控制文件的访问权限。

例如:

[root@localhost~]# /bin/cat FILE  ##取决于root用户对FILE文件拥有的权限

[young@localhost~]$ /bin/cat FILE ##取决于young用户对于FILE文件的拥有权限

三、组的类别

用户的主要组(主组):用户必须属于一个且只有一个主组 组名同用户名,且仅包含一个用户:私有组

用户的附加组(辅助组): 一个用户可以属于零个或多个辅助组

四、用户和组的配置文件

1.Linux用户和组的主要配置文件

/etc/passwd:用户及其属性信息(名称、 UID、主组ID等),可使用vipw命令编辑,使用pwck命令校验格式,无效用户等

/etc/group:组及其属性信息,可使用vigr命令编辑,可使用grpck校验格式,无效组等

/etc/shadow:用户密码及其相关属性,可使用pwck命令校验格式无效用户等

/etc/gshadow:组密码及其相关属性,可使用grpck校验合适,无效组等

2.配置文件格式说明

/etc/passwd

root:x:0:0:root:/root:/bin/bash 用户名:密码:UID:GID:用户注释信息:用户家目录:Shell定义

用户名: 用户的名称

密码: X表示占位符,也可以是密码

UID: 用户识别代码

GID: 用户所属组的GID(基本组)

用户注释信息:Comment,可以完善用户的基本信息

用户家目录: 系统登录用户后的工作目录

shell: 定义用户登录系统所使用的shell,指定的shell需要在/etc/shells中出现

/etc/shadow

root:$6$YqkEsOcfKPptyhnS$YD0ym4BZ52pzcCnU....:16781:0:99999:7::: 用户名:密码:上一次修改密码的时间:密码最小使用期限:最长使用期限:警告时间:帐户过期时间:保留字段

用户名: 用户的名称,对应/etc/passwd文件中

密码: Centos6中使用MD5加密算法,Centos7中使用sha1的算法,第一个$后面加密算法类型,第二个$后面表示salt,第三个$后面表示密码的提取码(参照加密类型)

上一次修改密码的时间: 指用户上次修改密码的时间,计算方法:从Linux元年1970年01月01日0点0分到目录所经过的秒数

密码最小使用期限: 指用户修改密码后,需要到多少天后方可更改密码,0表示禁用

密码最长使用期限: 指用户的密码到多少天后需要修改密码

警告时间: 指用户密码到期前多少天提示用户修改密码,0和空字段表示禁用此功能

帐户过期时间: 批帐户在密码过期后多少天还未修改密码,将被停用

/etc/group

root:x:0: 组名:密码:GID:User_list

组名:组的名称,默认同名用户名

密码: 组的密码占位符,用于用户临时切换至需要的组以获取相应权限,可以使用newgrp GROUP_NAME切换

GID:组的全局识别号

User_list:隶属此组的用户,多个用户使用","隔开

/etc/gshadow

root:$6$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.:: 组名:密码:组管理者:User_list

组名:组的名称,同步/etc/group文件中

密码:第一个$后面表示加密算法,第二个$后面表示加密的密码

组管理者:可以对此组成员有操作权限,如果有多个,可以用逗号隔开

User_list: 用户的列表,如果有多个,可以使用逗号隔开

五、用户和组管理命令

1.用户管理命令

a、useradd

useradd - create a new user or update default new user information

synopsis: useradd [options] LOGIN

useradd -D [options]

options:

-u : 指定用户的UID

-g : 指明用户所属基本组,可为组名,也可以GID,组或者GID必须存在

-c : 指定注释信息,如果有空格,需要使用" "包含

-d : 指定用户家目录,创建用户时,会自动将/etc/skel中的文件复制到用户家目录下,如果指定的文件存在将不会复制文件,如果父目录不存在,创建也将会失败

-s : 指定用户shell

-r : 指定创建一个系统用户

-M :不创建用户家目录

-G : 指定附加组,多个使用逗号隔开

-D :修改创建用户的配置信息,文件位于/etc/default/useradd

注:创建用户时的诸多默认设定配置文件为/etc/login.defs

实例一:

[root@localhost ~]# useradd -u 1003 -c "TestUser" -d /home/geek -s /bin/sh geek

[root@localhost ~]# getent passwd geek

geek:x:1003:1003:TestUser:/home/geek:/bin/sh

实例二:

[root@localhost ~]# useradd sys -r -M -g 1001 -G root

[root@localhost ~]# getent passwd sys

sys:x:498:1001::/home/sys:/bin/bash

[root@localhost ~]# id sys

uid=498(sys) gid=1001(young) groups=1001(young),0(root)

注:useradd命令加参数-D参看系统的默认值:

# useradd -D

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

解释: 1)新用户添加到GID为100的公共组 2)新用户的HOME目录将会位于/homoe/username 3)新用户账户密码在过期后不会被禁用 4)新用户账户未被设置为某个日期后就过期 5)新用户账户将bash shell作为默认shell 6)系统会将/etc/skel目录下的内容复制到用户的HOME目录下 7)系统为该用户账户在mail目录下创建一个用于接收邮件的文件 修改: useradd –D -s SHELL useradd –D –b BASE_DIR useradd –D –g GROUP

如 #useradd -D -s /bin/tsch,修改默认的shell为/bin/tsch。

倒数第2个值很有意思。useradd命令允许管理员创建一个默认的HOME目录配置,然后把它作为创建新用户HOME目录的模板。这样,就能自动在每个新用户的HOME目录里放置默认的系统文件。在Ubuntu Linux系统上,/etc/skel目录下有下列文件:

[root@localhost ~]# ls -A /etc/skel

.bash_logout  .bash_profile  .bashrc

此上文件不复制进去用户命令提示符等会缺失。

/etc/login.defs文件也是新建用户属性的配置文件。

b、newusers与chpasswd

newusers命令用来批量创建用户

chpasswd用来批量修改密码

批量创建用户并修改密码

A、创建用户列表user.txt(文件格式与/etc/passwd相同)

[root@localhost ~]# vim users.txt

user1:x:600:600::/home/user1:/bin/bash

user2:x:601:601::/home/user2:/bin/bash

user3:x:602:602::/home/user3:/bin/bash

B、批量创建用户

[root@localhost ~]# newusers users.txt

[root@localhost ~]# tail -3 /etc/passwd

user1:x:600:600::/home/user1:/bin/bash

user2:x:601:601::/home/user2:/bin/bash

user3:x:602:602::/home/user3:/bin/bash

C、复制/etc/skel下文件到用户家目录

[root@localhost ~]# cp /etc/skel/.[^.]* /home/user1

[root@localhost ~]# cp /etc/skel/.[^.]* /home/user2

[root@localhost ~]# cp /etc/skel/.[^.]* /home/user3

D、创建密码文件passwd.txt(格式===> 用户名:密码)

[root@localhost ~]# vim passwd.txt

user1:young

user2:young

user3:young

E、批量修改密码

[root@localhost ~]# cat passwd.txt | chpasswd

查看:

[root@localhost ~]# tail -3 /etc/shadow

user1:$6$9w3Hm/gYw$fVQMOyaJxzR9yBSbmPlZY8DKHb2BLGPAVxmFqJsN4rTGYao5B4TRZW/i7z1UgWF/mNI6jJ45bbD4vZtJhIYu50:17166:0:99999:7:::

user2:$6$9pXcj/.LREq/OK$M8tY6gpxKliOgnKG/N7H0oiuD88RAbB7BM/94UlDWlefXsTqyYReYk96FK6mofd2quYHXA7mID3q5nBgqYHjL0:17166:0:99999:7:::

user3:$6$lxmzw4KcEA/hfm6$nrc9rLSwM4JXfLOm7p2a1CqWB8Y5fgioU3DctpvfIw1.A6iqDy0aADGkReT1FVJhOubRC3l2iUUq8PwnJx9HK0:17166:0:99999:7:::

测试:

[root@localhost ~]# su - user1

[user1@localhost ~]$ su - user2

Password:

[user2@localhost ~]$

c、usermod

usermod命令可实现用户属性修改。

usermod - modify a user account

synopsis: usermod [options] LOGIN

options:

-u : 修改用户UID

-g : 修改用户GID

-c : 修改用户的注释信息

-d : 修改用户家目录,需要配合使用-m选项才会自动复制用户家目录下的文件到新的家目录

-m : move-home to new directory

-s : 修改用户的shell

-l : 修改用户的登陆名,即login名称

-G : 修改用户的附加组信息,需要配合-a(append)一起使用,如果不使用-a将删除原来的附加组

-a : --append,连接多个附加组的参数

-L : 锁定用户,即lock,在/etcpasswd文件中,密码前面加!(一个)

-U : 解锁用户,即unlock,在/etc/passwd文件中,取消密码前面的!号

实例:

[root@localhost ~]# getent passwd user1

user1:x:600:600::/home/user1:/bin/bash

[root@localhost ~]# id user1

uid=600(user1) gid=600(user1) groups=600(user1)

[root@localhost ~]# usermod -u 700 -g user2 -aG bin,root -c 'linux' -d /none/user1 -s /bin/tsh -l linux user1

[root@localhost ~]# getent passwd linux

linux:x:700:601:linux:/none/user1:/bin/tsh

[root@localhost ~]# id linux

uid=700(linux) gid=601(user2) groups=601(user2),0(root),1(bin)

d、userdel

userdel命令用来删除已经存在的用户。

userdel - delete a user account and related files

synopsis: userdel [options] LOGIN

options:

-r : 删除用户的同时删除用户的家目录,即--remove参数

实例:

[root@localhost ~]# userdel -r user3

e、id

id命令查看用户相关信息。

id [OPTION]... [USER]

-u: UID

-g: GID

-G: Groups

-n: Name (与-u连用可现实名称)

实例:

[root@localhost ~]# id geek

uid=1003(geek) gid=1003(geek) groups=1003(geek)

[root@localhost ~]# id

uid=0(root) gid=0(root) groups=0(root)

[root@localhost ~]# id -G

0

[root@localhost ~]# id -un

root

f、su

su命令用来切换当前用户身份。

su[options…] [-] [user [args…]] 切换用户的方式:

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

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

su -l UserName相当于su – UserName

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

su [-] UserName -c 'COMMAND' :撤换至指定用户身份执行命令,命令执行结束后即退出

-c : 不用登陆用户即可以以指定用户执行命令 su - geek -c 'id -u'

[root@localhost ~]# su - geek -c 'id'

uid=1003(geek) gid=1003(geek) groups=1003(geek)

g、passwd

passwd命令用来进行用户密码管理。

passwd - passwd - update user's authentication tokens

synopsis:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

1、passwd (修改自己的密码)

2、passwd USERNAME(修改其他用户的密码,root权限 )

options:

-l : 锁定用户,在/etc/passwd的密码前面加!!,

-u : 解锁用户,在/etcpasswd的密码前!!取消

-d : --delete,删除用户密码

-e DATE : --expire,设定过期时间

-i DAYS : 非活动时间

-n days : 最短使用期限

-x days : 最长使用期限

-w days : 警告期限

--stdin : echo "PASSWD" | passwd --stdin root

实例:

[root@localhost ~]# echo young | passwd --stdin geek

Changing password for user geek.

passwd: all authentication tokens updated successfully.

h、chage

chage命令用来修改用户密码策略。

chage [OPTION]… LOGIN

-d:修改用户最近一次修改密码的日期

-E:修改账户的过期日期

-I:密码禁用期

-m:密码的最小使用期限

-M:密码的最大使用期限

-W:密码的警告时间

–l:显示密码策略

A、查看mysql用户以及密码的有效期

[root@DB-Server ~]# chage -l mysql

Last password change : Mar 26, 2015

Password expires : never

Password inactive : never

Account expires : never

Minimum number of days between password change : -1

Maximum number of days between password change : -1

Number of days of warning before password expires : -1

[root@DB-Server ~]#

B、设置mysql用户60天后密码过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息。

[root@DB-Server ~]# chage -M 60 -m 7 -W 7 mysql

You have new mail in /var/spool/mail/root

[root@DB-Server ~]# chage -l mysql

Last password change : Mar 26, 2015

Password expires : May 25, 2015

Password inactive : never

Account expires : never

Minimum number of days between password change : 7

Maximum number of days between password change : 60

Number of days of warning before password expires : 7

[root@DB-Server ~]#

clip_image001

C、强制新建用户第一次登陆时修改密码

[root@DB-Server home]# useradd test

[root@DB-Server home]# passwd test

Changing password for user test.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[root@DB-Server home]# chage -d 0 test

You have new mail in /var/spool/mail/root

[root@DB-Server home]# chage -l test

Last password change : password must be changed

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

i、chsh

chsh命令用来更改当前用户的shell类型。

使用权限:所有使用者 命令:chsh   用法:shell>> chsh   说明:更改使用者 shell 设定   范例:

shell>> chsh

Changing fihanging shell for user1

Password: [del]

New shell [/bin/tcsh]: ### [是目前使用的 shell]

[del]

shell>> chsh -l ### 展示 /etc/shells 档案内容

/bin/bash

/bin/sh

/bin/ash

/bin/bsh

/bin/tcsh

/bin/csh

1 我想知道我机器安装了哪些shell? 两种方法可以查看: 第一种: [rocrocket@jb51.net ~]$ chsh -l /bin/sh /bin/bash /sbin/nologin /bin/zsh 第二种: [rocrocket@jb51.net ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/zsh 其实chsh -l也是来查看这个文件。

2 我想知道我当前正在使用的shell是哪个阿?

[rocrocket@jb51.net ~]$ echo $SHELL

/bin/bash

注意SHELL一定要是大写。可以看到,我目前使用的shell是/bin/bash

3 执行了zsh之后,我查看当前shell类型仍然是/bin/bash呢? 请注意,我们虽然执行了zsh,但是所谓“当前的shell”是一个大环境的概念,是针对一个已登录的用户而言的。而我们执行zsh只是启动了一个zsh的解释器程序而已,并没有改变大环境。如果想改变“当前的shell”,那么还是要使用chsh才可以。

4 我想把我的shell改成zsh!

[rocrocket@jb51.net ~]$ chsh -s /bin/zsh

Changing shell for rocrocket.

Password:

Shell changed.

[rocrocket@jb51.net ~]$

使用chsh加选项-s就可以修改登录的shell了! 你会发现你现在执行echo $SHELL后仍然输出为/bin/bash,这是因为你需要重启你的shell才完全投入到zsh怀抱中去。

5 chsh -s到底是修改了哪里? 秘密告诉你吧。chsh -s其实修改的就是/etc/passwd文件里和你的用户名 相对应的那一行。现在我来查看下:

[rocrocket@jb51.net ~]$ cat /etc/passwd|grep ^rocrocket

rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh

看!你可以发现输出内容的最后部分已经变成了/bin/zsh了!下次你重启的时候,linux就会读取这一命令来启动你的shell了! 好了,我要恢复正常工作,把shell修改会我熟悉的/bin/bash了!

[rocrocket@jb51.net ~]$ chsh -s /bin/bash

Changing shell for rocrocket.

Password:

Shell changed.

j、chfn与finger

chfn命令用于指定个人信息,finger用来查看个人信息。

chfn命令格式:

Usage: chfn [ -f full-name ] [ -o office ] [ -p office-phone ]

[ -h home-phone ] [ --help ] [ --version ]

[root@localhost ~]# chfn

Changing finger information for root.

Name [root]: young

Office []: geek

Office Phone []: 010110110

Home Phone []: 0101101101

Finger information changed.

[root@localhost ~]# finger root

Login: root                             Name: young

Directory: /root                        Shell: /bin/bash

Office: geek, 010110110                 Home Phone: 010-110-1101

On since Sun Jan  1 02:39 (CST) on pts/0 from 192.168.1.116

No mail.

No Plan.

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值