1.控制用户的登录地点
文件/etc/secruity/access.conf可控制用户登录地点,为了使用access.conf,必须在文件/etc/pam.d/login中加入下面行:
|
access.conf文件的格式:
|
其中:
permission:可以是 “+”或“-”,表示允许或拒绝。
user:可以是用户名、用户组名,如果是all则表示所有用户。
origins:登录地点。local表示本地,all表示所有地点,console表示控制台。另外,origins也可以是某一网络。
后面两个域中加上 except是“除了”的意思。例如:除了用户wheel、shutdown、sync禁止所有的控制台登录:
|
root账户的登录地点不在access.conf文件中控制,而是由/etc/securetty文件控制。如果要让root能从pts/0登录,就在这个文件中添加一行,内容是0就行,要从pts/1以此类推。或者修改/etc/pam.d/login,把
|
注释掉也可以允许root远程登录。
2. 为普通用户分配特权
有时候我们不想让一个用户有超级用户权限,又想该用户能执行一些超级用户才能执行的命令。我们可以指定某个列入/etc/sudoers文件的普通用户可以利用sudo来执行一些只有超级用户才能执行的命令。
/etc/sudoers的配置规则如下:
Host_Alias:用来创建主机别名[可选],列表中的主机必须用逗号隔开,如果要设置多个别名,可以用冒号隔开,保留关键字ALL代表所有主机。例如:
|
这里用别名bluesun来统称grind和glass两台机器,grind和glass分别是这两台机器的机器名。
User_Alias:用来创建用户别名[可选],列表中的用户名必须以逗号隔开。其格式同主机别名,保留关键字ALL代表所有命令。
Cmnd_alias:用来创建命令别名[可选],列表中的命令必须用逗号隔开,如果要定义一个命令无效,可以在该命令前加!号。
用户命令使用列表:用户命令使用语法如下:
|
Username指定一个真正的用户名或定义过的别名,host制定一个真正的主机名或者定义过的主机别名。CommandList可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名。一般情况下,sudo执行的所有命令都是以root身份执行。但是一些特别的程序,比如一些需要安全性比较高的程序不能用root身份执行的,可以指定用”Run User’s Name”指向的用户名来执行。例如:
|
这一句说明用户grind可以在glass这台主机上运行查看路由表命令。
3. 初始化环境:/etc/skel
当创建一个新用户时,如果没有指定用户目录,系统就为其创建一个登录目录,这个登录目录就是用/etc/skel为模板,所有的文件都和/etc/skel中的文件相同。系统管理员能够在/etc/skel中建立文件,这些文件可以为用户提供一个很好的缺省环境。例如,他可以建立一个/etc/skel/.profile文件,定义用户登录后的一些属性的设置。但是如果对/etc/skel这个文件夹进行改动后,肯定会导致改动前创建的用户和改动后创建的用户的一些文件不一样,所以只要可能,尽量将全局配置放入全局文件中,比如/etc/profile,以实现系统用户一些设置的统一。/etc/skel的存在的意义很多,比如一台专门开虚拟主机的服务器上面就可以只在/etc/skel中放一个index.html,让每个新加的用户不会有系统安装时缺省的那些.bashrc等文件,又可以确保未放置主页的用户的页面的统一。
4. 文件目录的权限
Linux下,每一个文件、每一个目录都有一个属主,并对用户自己、用户所在组、其它所有帐号分别定义了读、写、执行三种权限。当用户grind建立一个新文件时test时,我们可以用ls –l filename看这个文件的属性如下:
|
和文件权限有关的分别是:第一部分表示文件权限属性,第三部分表示文件属主,第四部分文件所属组。
文件权限属性总共十位字符“-rw-rw-r--”,第一位是文件属性区分标志,如果是d的话,表示这是一个目录,是l的话表示是连接文件,-表示是普通文件,b指块设备文件,c指字符文件设备。第二到四位分别表示文件属主的读(r:read)、写(w:write)、执行(x:execute)属性,第五到七位是文件所属组的读、写、执行权限,第八到第十位则是其它用户的读、写、执行权限。如果对应的位是相应的字母,就是有这相应权限,否则为“-”,表示没有获得这个许可。具有了写权限,同时也就具有对文件修改和删除的权限。如果对目录有写权限,则可以创建、删除或修改该目录下的任何文件或子目录,甚至在该文件和子目录并不属于你的情况下都可以删除。必须同时拥有读和执行权限才可以使用ls这样的程序列出目录内容清单。对目录有只读许可的用户,还必须同时有执行许可才能用cd命令进入该目录,只对目录有执行权限的用户,想访问该目录下的文件有读权限的文件,必须知道该文件名才可以访问。上面列举的文件就是属主可读写,本组可读写,其它用户可读,所有的用户(包括自己)都不能执行它。
我们的用u、g、o分别来指代属主(user)、组(group)、其它帐户(other),就可以方便的设置文件和目录的权限了。当然,我们也可以用a来表示所有的这三项。例如,我们要对上面的test文件设定权限,对所有用户都可以读和执行,文件属主还允许写许可,那么我们可以使用如下命令:
|
我们知道,在ls -l的输出中,文件权限表示为“-rw-rw-r--”,前一位只和是否为目录有关,其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和“r--”,“-”代表无效“0”,其它字符代表有效“1”,那么这个文件的权限就是“110”、“110”、“100”,把这个2进制串转换成对应的8进制数就是6、6、4,也就是说该文件的权限为664(三位八进制数)。我们也可以使用类似这种三位八进制数来设定文件授权,如上边两个例子,就也可以写为:
|
当然,用户创建一个文件的时候,缺省的权限属性是可以自己定义的,可以执行umask来实现缺省权限,如执行了umask 022,就把相应的权限给屏蔽了,2就是写权限位,这样建立了文件缺省权限属性就是除了文件属主以外的人都不能改写文件,确保了文件的安全性。