Linux学习笔记3.docx

上传人:b****5 文档编号:12388893 上传时间:2023-04-18 格式:DOCX 页数:8 大小:20.88KB
下载 相关 举报
Linux学习笔记3.docx_第1页
第1页 / 共8页
Linux学习笔记3.docx_第2页
第2页 / 共8页
Linux学习笔记3.docx_第3页
第3页 / 共8页
Linux学习笔记3.docx_第4页
第4页 / 共8页
Linux学习笔记3.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Linux学习笔记3.docx

《Linux学习笔记3.docx》由会员分享,可在线阅读,更多相关《Linux学习笔记3.docx(8页珍藏版)》请在冰豆网上搜索。

Linux学习笔记3.docx

Linux学习笔记3

Linux学习笔记3--理解Linux文件权限  

2013-10-1417:

05:

24|  分类:

 Linux|举报|字号 订阅

每个登陆Linux系统的用户都有一个唯一的用户账户。

用户的权限也取决于这个账户。

用户权限是通过UID来追踪的。

1、/etc/passwd文件:

将用户名匹配到UID值。

root账户是Linux系统的管理员,通常它的UID是0.Linux会为各种各样的功能创建不同的用户账户,但这些账户不是真的用户。

这些账户称为系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。

所有运行在后台的服务都需要用一个系统用户账户登陆到Linux系统上。

Linux为系统账户预留了500以下的UID值。

有些服务甚至需要用特定的UID才能正常工作。

为普通用户创建账户时,大多数Linux系统会将500起始的第一个可用UID分配给这个账户。

/etc/passwd提供了如下字段:

登陆用户名、用户密码、UID、GID(组ID)、用户账户的文本描述、HOME目录的位置、默认的shell

用户密码都是*,这是为了安全,因为很多程序都需要访问/etc/passwd,如果他们拿到加密后的密码,也许会被破解。

所以,现在Linux将用户密码保存在另一个单独的文件(/etc/shadow)。

虽然/etc/passwd是文本文件,但是不建议手动修改该文件,以免造成系统无法登陆。

2、/etc/shadow文件:

只有root用户才能访问该文件。

该文件有9个字段:

登录名;加密密码;自1970年1月1日(上次修改密码的日期)到当天的天数;多少天后才能更改密码;多少天后必须更改密码;密码过期提前多少天提醒用户更改密码;密码过期后多少天禁用用户账户;用户账户被禁用的日期(用自1970年1月1日到当天的天数表示);预留字段

3、添加新用户:

useradd。

该命令使用系统的默认值以及命令行参数来设置用户账户。

可以用useradd-D参数来查看你的Linux系统的系统默认值。

例如:

GROUP=100(新用户默认添加到GID=100的公共组)

HOME=/home(新用户的默认目录为/home/loginname)

INACTIVE=-1(新用户在密码过期后不会被禁用)

EXPIRE= (新用户未被设置过期日期)

SHELL=/bin/bash(新用户的默认shell为bash)

SKEL=/etc/skel(系统会将/etc/skel目录下的内容复制到用户的HOME目录下)

CREATE_MAIL_SPOOL=yes(系统会为该用户在mail目录下创建一个用于接收邮件的文件)

SKEL=/etc/skel(系统会将/etc/skel目录下的内容复制到用户的HOME目录下)这个很有意思,useradd命令允许管理员创建一份默认的HOME目录配置,然后把它作为出新用户HOME目录的模版。

在UbuntuLinux系统上,/etc/skel目录下有下列文件:

.bash_logout.bashrcexamples.desktop.profile

你可以用默认参数创建一个新账户来测试一下,

useradd-mtest(默认useradd命令不会创建HOME目录,但是-m参数会叫他创建HOME目录,你可以看到useradd创建了新的HOME目录,并将/etc/skel目录中的文件复制了过来)

要想创建用户时改变默认值或默认行为,可以使用命令行参数。

如下所示:

-ccomment:

给新用户添加备注

-dhome_dir:

为主目录指定一个名字(默认为$HOME/登录名)

-eexpire_date:

用YYYY-MM-DD格式指定一个过期日期

-finactive_days:

指定过期后多少天被禁用,0表示一过期就禁用,-1表示永远不禁用

-ginitial_group:

指定所属GID或组名

-Ggroup...:

指定用户除登陆组之外所属的一个或多个附加组

-k:

必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录

-m:

创建用户的HOME目录

-M:

不创建用户的HOME目录(当默认设置里指定创建时,才用到)

-n:

创建一个和用户登录名同名的新组

-r:

创建系统账户

-ppasswd:

指定密码

-sshell:

指定默认shell

-uuid:

指定UID

-D:

查看默认参数,若后面跟其他参数则表示要修改默认参数。

-D-bdefault_home:

更改默认的创建用户HOME目录的位置

-D-eexpiration_date:

更改默认的新用户的过期日期

-D-finactive:

更改默认的过期后多少天被禁用

-ggroup:

更改默认的组名称或GID

-sshell:

更改默认的shell

例如:

useradd-D-s/bin/tsch

4、删除用户:

userdel命令。

默认情况下,userdel命令只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。

userdel-r参数会删除用户的HOME目录以及mail目录。

然而,系统上仍可能存有归已删除用户所有的其他文件。

这在有些环境中会造成问题。

使用-r参数时一定要特别小心。

确认HOME目录中没有其他用户或其他程序要使用的重要文件。

5、修改用户:

  

(1)usermod:

最强大的一个。

他能用来修改/etc/passwd文件中的大部分字段,其参数跟useradd的参数大部分都一样,但还有一些实用的额外参数:

     (a)-l:

用来修改登录名

     (b)-L:

锁定用户。

用户将无法登陆

     (c)-p:

修改密码。

      (d)-U:

解除锁定。

 

(2)passwd和chpasswd:

passwd用户名:

修改用户的密码。

passwd:

修改自己的密码。

      passwd-e参数能强制用户下次登陆时修改密码。

你可以先给用户设置一个简单的密码,然后强制其登陆时修改。

     如果要修改大量用户的密码,chpasswd目录会简化事情,chpasswd能从标准输入自动读取用户名和密码对(使用:

分割)列表,给密码加密,然后为用户账户设置。

例如使用重定向:

       chpasswd

  (3)chsh、chfn和chage:

chsh用于快速修改用户的默认登陆shell。

使用时必须用shell的全路径作为参数。

例如:

       chsh-s/bin/cshtest:

为用户test修改默认shell。

       chfn命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法。

cfn命令会将Unix的finger命令用到的信息存进备注字段,而不是简单地存入一些随机文本(比如昵称之类的),或是将备注字段留空。

finger命令可以用来简单地查看Linux系统上的用户信息:

例如fingerrich(出于安全性的考虑,很多Linux管理员会在系统上禁用finger命令)。

如果使用chfn命令时不加参数,他会向你询问要存进备注字段的恰当值:

例如chfntest,按要求输入后,fingertest,greptest/etc/passwd

    chage命令用来帮助管理用户帐号的有效期。

他有一些参数可以用来设置每个值。

例如:

  chage-d:

设置上次修改密码到现在的天数。

-E:

设置密码过期的天数-I:

设置密码过期后多少天锁定用户-m:

设置修改密码间隔最少多少天-W:

设置密码过期前多少天开始提醒用户修改密码

  chage命令的日期值可以使用2种格式:

YYYY-MM-DD格式的日期;或自1970年1月1日起到该日期天数的数值。

   chage命令中有一个好用的功能是设置帐号的过期日期。

通过它,你就能创建临时用户了。

设定的日期一过,临时账户就会自动过期,而不需要记住在那天去删除这些账户。

6、使用Linux组:

组有唯一的组名和GID。

7、/etc/group文件:

该文件包含组名、组密码、GID、属于该组的用户列表

组密码允许非组内成员通过它临时性地成为该组成员。

不要直接修改该文件来添加用户到一个组,而要用usermod命令。

说明:

该文件的最后一列有些误导人。

你会发现有些组并没有列出用户。

这并不是说这些组没有成员。

当一个用户在/etc/passwd中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group中!

8、创建新组:

groupadd,例如groupaddshared,tail/etc/group

该命令没有提供将用户添加到组的选项。

你应该用usermod命令来添加用户到该组。

usermod-Gsharedrich;usermod-Gsharedtest;tail/etc/group

说明:

如果更改了已登录用户所属的用户组,该用户必须登出后再登陆,才会生效。

警告:

千万注意使用-G和-g的区别,-g是修改默认组。

9、修改组:

groupmod可以更改GID(-g参数)或组名(-n参数)。

例如:

groupmod-nsharingshared;tail/etc/group

由于权限都是基于GID的,所以随意改组名

10、理解文件权限

ls-l输出的第一列的第一个字符代表对象的类型:

-表示文件d表示目录l表示链接c表示字符型设备、b表示块设备、n表示网络设备,之后的3组3字符的码为访问权限。

rwx,3组分别为UID、GID、OTHER

11、默认文件权限:

umask,umask命令输出4位数。

例如0022,第一位为粘着位(stickybit)。

后3位表示文件或目录的umask的八进制值。

要立即诶umask是如何工作的,先得理解八进制模式的安全性设置。

八进制模式的安全性设置先获取这3组权限的值,然后将其转换为3位二进制值表示这个八进制值。

例如rwx=111=7,r--=100=4。

umask值是从全权限值中要减去的值,对文件来说,全权限是666,目录是777。

所以如果umask=0022的话

touchfile1;全权限666-022=644

ls-lfile1;会看到rw-r--r--

umask026

touchfile2;全权限666-026=640

ls-lfile2;会看到rw-r-----

12、改变权限:

chmodoptionsmodefile,mode可以是8进制模式或符号模式

例如chmod760newfile

符号模式比较麻烦:

ugoa分别代表uid、gid、other、all;+-=分别表示增加、减去、设置;rwxXstugo介绍:

X表示如果对象是命令或它已有执行权限,则赋予执行权限,s表示运行时重新设置UID或GID,t表示保留文件或目录,ugo分别表示将权限设置为UID、GID、OTHER一样。

例如:

chmodo+rnewfile为other用户增加读权限

chmodu-xnewfile为uid用户减去执行权限

chmod-R参数:

可以让权限的改变递归地作用到文件和子目录。

可以使用通配符一次作用多个文件。

例子:

$chmodu=rwx,g=rx,o=xfile   上例的另一种形式

$chmod=rfile            为所有用户分配读权限

$chmod444file           同上例

$chmoda-wx,a+r file      同上例

$chmod-Ru+rdirectory     递归地给directory目录下所有文件和子目录的属主分配读的权限

$chmod4755   

13、改变所属关系:

chown更改属主chgrp更改默认属组

chownoptionsowner[.group]file

例如chowndannewfile//将newfile的属主更改为dan

chowndan.sharednewfile//将newfile的属主和属组同时更改为dan和shared

chown.richnewfile//只更改属组

chowntest.newfile//如果用户名和组名相同,则同时修改属主和属组为test

chown-R参数加通配符可以递归地改变子目录和文件的所属关系。

chown-h参数可以改变该文件的所有符号链接文件的所属关系。

chgrp命令用于更改文件或目录的默认属组:

例如chgrpsharednewfile//更改newfile的属组为shared

14、共享文件:

创建组是Linux系统上共享文件访问权限的方法。

如果要在大的环境中创建文档并共享,这会很繁琐。

所以Linux为每个文件和目录存储了3个额外的信息位:

(1)设置用户ID(SUID):

当文件被用户使用时,程序会以文件属主的权限运行。

由于SUID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID位是没有多大意义的。

我们知道内核主要是根据euid来确定进程对资源的访问权限。

一个进程如果没有SUID位,则euid=uid分别是运行这个程序的用户的uid。

例如kevin用户的uid为204,foo用户的uid200,kevin运行foo用户的my.exe(假定kevin也有x权限)程序形成的进程的euid=uid=204内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。

 

如果一个程序设置了SUID,则euid变成被运行的程序的所有者的uid,例如kevin用户运行myfile,euid=200,uid=204,则这个进程具有它的属主foo的资源访问权限。

SUID的作用就是这样:

让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源,获得程序属主的资源访问权限。

SUID虽然很好了解决了一些问题,但是同时也会带来一些安全隐患。

因为设置了SUID位的程序如果被攻击(通过缓冲区溢出等方面),那么hacker就可以拿到root权限。

因此在安全方面特别要注意那些设置了SUID的程序。

通过以下的命令可以找到系统上所有的设置了suid的文件:

[root@sgrid5/]#find/-perm-04000-typef-ls

对于这里为什么是4000,大家可以看一下前面的st_mode的各bit的意义就明白了。

在这些设置了suid的程序里,如果用不上的,就最好取消该程序的suid位。

(2)设置组ID(SGID):

对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。

(3)粘着位:

进程结束后文件还会在内存中。

(在一个目录上设了sticky位后,(如/home,权限为1777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件(root除外),这就对所有用户能写的目录下的用户文件启到了保护的作用。

SGID位对文件共享非常重要。

使能了SGID位,你能让在一个共享目录下创建的新文件都属于该目录的属组,也就是每个用户的组。

SGID可通过chmod命令设置。

他会加到标准3位8进制值之前(组成4位八进制值),或者在符号模式下用符号s。

例如111=SUID置位、SGID置位、粘着位置位,000=都不置位。

因此要创建一个共享目录,你只需将该目录的SGID位置位:

mkdirtestdir

ls-l//输出testdir的权限为rwxrwxr-x

chgrpsharedtestdir

chmodg+stestdir

ls-l//输出testdir的权限为rwxrwsr-x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1