在linux系统中,文件/etc/profile由系统管理员管,当初次登录时,每个用户都 source 它,所以使它保持工作状态很重要。
它也是提供给新用户的强大工具,该工具使新用户一登录进他们的新帐户,一切就正确运行。
但是,有一些您可能希望新用户作为缺省值的设置,而且允许容易地修改它们。这就是 /etc/skel 目录的用途所在。
当您用 useradd 命令来创建一个新用户帐户时,它将所有的文件从 /etc/skel 复制到用户的新的主目录中(如果按默认应该在/home下)。
这意味着可以将有帮助的 .bash_profile 和 .bashrc 文件放在 /etc/skel 中,使新用户有一个好的开始。
/etc/skel建立使用起来非常简单。它使所有在LFS系统上面的 新用户拥有一样的初始设置。 /etc/skel目录是被 /usr/sbin/useradd 使用的。
开始需要建立一个/etc/skel 目录,最好使用root用户。然后把想要新用户拥有的配置文件拷贝到/etc/skel目录。比如: .bash_profile, .bashrc, .bash_logout, dircolors, .inputrc, 和 .vimrc。
当使用 /usr/sbin/useradd建立新用户的时候使用 -m 参数,例如:
/usr/sbin/useradd使用了一系列缺省设置,位于/etc/default/useradd(如果这个文件存在的话)。如果这个文件不存在,它会使用其内部缺省设置,可以用/usr/sbin/useradd -D 来列处这些设置。
如果想对这个缺省设置作一些变动,就要建立一个 /etc/default/useradd 文件,并使用和 /usr/sbin/useradd -D输出一样的内容。例如:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel
# /etc/default/useradd 结束
所以,可以看到默认的HOME和默认的SKEL目录。
里面少了对缺省shell的设置。运行此命令添加:
#/usr/sbin/useradd -D -s/bin/bash
这样 SHELL= 那一行将被设置成 SHELL=/bin/bash。这样使得在LFS系统增加新用户更加容易。 /usr/sbin/useradd 有很多参数可以在/etc/default/useradd中设置。
可以阅读man手册来获取更多细节。
从上面的例子可以看出/etc/skel目录的作用:
skel 是 skeleton 的缩写,每当你新建一个用户的时候 (通过 useradd 命令),/etc/skel 目录下的文件,都会原封不动的复制到新建用户的家目录下,看下该目录都有什么文件:
. .. .bash_logout .bash_profile .bashrc
作为一个多用户系统的管理员,可以在 skel 目录下写个 ReadMe.txt 之类的文件,写一些使用说明,这样每个新建的用户都会在自己的目录下看到这个说明文件了。
再比如,希望新建用户可以直接 startx 就启动到 gnome 桌面环境,你可以在 skel 目录下建立一个 .xinitrc 文件,内容如下:
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"
eval `dbus-launch --exit-with-session --sh-syntax`
exec gnome-session
因为 .xinitrc 是 X 启动需要读取的用户配置文件,这样每个用户 startx 之后就直接装载 gnome 了。
甚至可以在 sekl 目录下再建立目录,总之 /etc/skel 下的所有文件都会拷贝的用户的家目录去。
在 skel 目录下的 .bashrc 文件中加入一些方便的环境变量或者命令别名,这样每个新建用户都可以使用这些功能。
不过,更好的选择是把这些设置放到全局的 /etc/profile 中,因为 skel 目录下的文件是拷贝过去的,如果你修改或者增加了新的文件,只有新建的用户才能受益。
就介绍这些了,希望对大家有所帮助。
linux中的/etc/shadow文件,保存着用户的密码信息。
形如这样:
xxx:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
以下是详细的介绍。
第一字段:用户名(也被称之为登录名),在例子中有峡谷两条记录,也表示有两个用户beinan和xxx
第二字段:被加密的密码,如果有的用户在此字段中是x,表示这个用户不能登录系统,也可以看作是虚拟用户,不过虚拟用户和真实用户都是相对的,系统管理员随时可以对任何用户操作;
第三字段:表示上次更改口令的天数(距1970年01月01日),上面的例子能说明beinan和xxx这两个用户,是在同一天更改了用户密码,当然是通过passwd 命令来更改的,更改密码的时间距1970年01月01日的天数为13072;
第四字段:禁用两次口令修改之间最小天数的功能,设置为0
第五字段:两次修改口令间隔最多的天数,在例子中都是99999天;这个值如果在添加用户时没有指定的话,是通过/etc/login.defs来获取默认值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs来查看,具体的值;
第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;在例子中的值是7 ,表示在用户口令将过期的前7天警告用户更改期口令;
第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;在例子中,此字段两个用户的都是空的,表示禁用这个功能;
第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;在例子中,我们看到beinan这个用户在此字段是空的,表示此用户永久可用;而xxx这个用户表示在距1970年01月01日后13108天后过期,算起来也就是2005年11月21号过期;哈哈,如果有兴趣的的弟兄,自己来算算,大体还是差不多的;);
第九字段:保留字段,目前为空,以备将来Linux发展之用;
1,注册名(login_name):用于区分不同的用户。在同一系统中注册名是惟一的。
该字段被限制在8个字符(字母或数字)的长度之内;
注意:通常在Linux系统中对字母大小写是敏感的。这与MSDOS/Windows是不一样的。
2,口令(passwd):系统用口令来验证用户的合法性。
超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。
现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个x来代替,将/etc/shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。
注意:如果passwd字段中的第一个字符是*的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。
3,用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用UID字段。
在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。
4,组标识号(GID):这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。
5,用户名(user_name):包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。
6,用户主目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。
在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每个用户配置了自己的主目录。个人用户的文件都放置在各自的主目录下。
7,命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名,如/bin/bash。
注意:系统管理员通常没有必要直接修改passwd文件,Linux提供一些账号管理工具帮助系统管理员来创建和维护用户账号。