(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