ログイン後のシステムの環境設定(基本環境、シェルの環境設定など)について、設定ファイルの使い方の備忘も兼ねてまとめてみました。
前回の記事にてログイン成功までのログインプロセスは簡単に説明しています。
検証環境は前回と同じで以下の通りです。
環境
- AIX 7.3.0.0(TL1 SP1)
ログイン後の挙動について
ログイン成功後は様々な設定ファイルが読み込まれて環境変数やシェルの環境設定が行われていきます。
ログイン後の環境設定に関するファイルたち
AIXでログイン後に設定ファイルとして扱われるものを以下に整理してみました。
- /etc/motd
- /etc/environment
- /etc/profile
- /etc/security/environ
- /etc/security/limits
- /etc/security/user
- $HOME/.profile
- $HOME/.kshrc
考えずに分類するとわかりにくいので/etc配下と/etc/security配下、$HOME配下で分けてまとめます。
/etc配下の設定ファイル
etc配下の設定ファイルの特徴として全ユーザーで共通の設定ができます。一方でデフォルトでrootユーザーでないと書き込みできないため注意が必要です。
/etc/motd
motd(message of the day)はユーザーがシステムにログインすると表示されます。表示内容は直接/etc/motdテキストファイルに格納します。
以下、実機にて確認(デフォルト値)
*******************************************************************************
* *
* *
* Welcome to AIX Version 7.3! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
/etc/environment
すべてのプロセス用の基本的な環境を指定する変数が記述されています。
この設定ファイルはログイン後、一番初めに読み込まれます。
公式ドキュメントにも内容の説明があるため記法などの説明は割愛します。基本的な環境を構成する変数例は以下です。
変数 | 説明 |
---|---|
HOME | HOMEディレクトリ |
LANG | ロケール名(国/地域別情報) |
NLSPATH | メッセージ・カタログのパス |
LOCPATH | ロケールファイルのパス |
PATH | コマンドを探すときに検索するディレクトリ |
TZ | 時間帯情報 |
/etc/profile
ログインシェルが起動した後に実行されるスクリプトです。
すべてのユーザーから参照されます。
$HOME配下の個別ユーザー設定によって、ここで設定した変数は上書きされます。デフォルトではTERM, MAIL,MAILMSGといった変数の設定などを行っています。
以下、実機の設定値(デフォルト)
# @(#)27 1.20 src/bos/etc/profile/profile, cmdsh, bos730, initial_extract 8/9/94 12:01:38
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# bos730 src/bos/etc/profile/profile 1.20
#
# Licensed Materials - Property of IBM
#
# COPYRIGHT International Business Machines Corp. 1989,1994
# All Rights Reserved
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
# IBM_PROLOG_END_TAG
#
# COMPONENT_NAME: (CMDSH) Shell related commands
#
# FUNCTIONS:
#
# ORIGINS: 3, 26, 27
#
# (C) COPYRIGHT International Business Machines Corp. 1989, 1994
# All Rights Reserved
# Licensed Materials - Property of IBM
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
################################################################
# System wide profile. All variables set here may be overridden by
# a user's personal .profile file in their $HOME directory. However,
# all commands here will be executed at login regardless.
trap "" 1 2 3
readonly LOGNAME
# Automatic logout, include in export line if uncommented
# TMOUT=120
# The MAILMSG will be printed by the shell every MAILCHECK seconds
# (default 600) if there is mail in the MAIL system mailbox.
MAIL=/usr/spool/mail/$LOGNAME
MAILMSG="[YOU HAVE NEW MAIL]"
# If termdef command returns terminal type (i.e. a non NULL value),
# set TERM to the returned value, else set TERM to default lft.
TERM_DEFAULT=lft
TERM=`termdef`
TERM=${TERM:-$TERM_DEFAULT}
# If LC_MESSAGES is set to "C@lft" and TERM is not set to "lft",
# unset LC_MESSAGES.
if [ "$LC_MESSAGES" = "C@lft" -a "$TERM" != "lft" ]
then
unset LC_MESSAGES
fi
export LOGNAME MAIL MAILMSG TERM
trap 1 2 3
/etc/security配下の設定ファイル
/etc/security配下にはユーザーやグループに関する設定ファイルがあります。一般ユーザーからはアクセスできません。
ユーザーの個別設定をこの配下のファイルを直接編集して設定するものではないので注意が必要です。
/etc/security/.profile
ユーザー作成時に$HOME/.profileに書き込む内容を記述します。ログインには関係ありませんがprofileで検索をかけると表示されるので注意が必要です。
ちなみに、実機のデフォルトは以下の通りです
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.
export PATH
if [ -s "$MAIL" ] # This is at Shell startup. In normal
then echo "$MAILMSG" # operation, the Shell checks
fi
/etc/security/environ
ユーザーごとの環境の属性を定義するスタンザを含むファイルです。
mkuserコマンドにてユーザー・スタンザが作成されます。
以下、実機での出力です(デフォルト値)
default:
root:
daemon:
bin:
sys:
adm:
uucp:
guest:
/etc/security/limits
ユーザーごとのプロセスリソースの制限を定義するファイルです。
initプロセスから始動されるプロセスには適用されません
ログインプロセスを経て作成されるプロセスのみに適用されます。属性値の例は以下の通りです。
属性値 | 説明 |
---|---|
fsize | プロセスが生成・拡張できるファイルサイズのソフトリミット |
core | プロセスが生成するcoreファイルサイズのソフトリミット |
cpu | プロセスが使用可能なシステムユニット時間のソフトリミット(秒) |
data | プロセスデータセグメント・サイズのソフトリミット |
stack | プロセススタックセグメント・サイズのソフトリミット |
rss | プロセスに割り当て可能な物理メモリーサイズのソフトリミット |
nofiles | プロセスが一度にオープンできるファイルディスクリプターのソフトリミット |
fsize_hard | プロセスが生成・拡張できるファイルの最大サイズ |
core_hard | プロセスが生成するcoreファイルの最大サイズ |
cpu_hard | プロセスが使用可能なシステムユニット時間の最大値(秒) |
data_hard | 最大プロセスデータセグメント・サイズ |
stack_hard | 最大プロセススタックセグメント・サイズ |
rss_hard | プロセスに割り当て可能な最大の物理メモリーサイズ |
nofiles_hard | プロセスが一度にオープンできるファイルディスクリプターの最大数 |
以下、実機での出力です(検証環境の設定値)
*
* Sizes are in multiples of 512 byte blocks, CPU time is in seconds
*
* fsize - soft file size in blocks
* core - soft core file size in blocks
* cpu - soft per process CPU time limit in seconds
* data - soft data segment size in blocks
* stack - soft stack segment size in blocks
* rss - soft real memory usage in blocks
* nofiles - soft file descriptor limit
* fsize_hard - hard file size in blocks
* core_hard - hard core file size in blocks
* cpu_hard - hard per process CPU time limit in seconds
* data_hard - hard data segment size in blocks
* stack_hard - hard stack segment size in blocks
* rss_hard - hard real memory usage in blocks
* nofiles_hard - hard file descriptor limit
*
* The following table contains the default hard values if the
* hard values are not explicitly defined:
*
* Attribute Value
* ========== ============
* fsize_hard set to fsize
* cpu_hard set to cpu
* core_hard -1
* data_hard -1
* stack_hard 8388608
* rss_hard -1
* nofiles_hard -1
*
* NOTE: A value of -1 implies "unlimited"
*
default:
fsize = -1
core = 2097151
cpu = -1
data = -1
rss = 65536
stack = 65536
nofiles = 2000
root:
data = -1
fsize = -1
daemon:
bin:
sys:
adm:
uucp:
guest:
nobody:
lpd:
esaadmin:
stack = 393216
stack_hard = 393216
/etc/security/user
ユーザーごとの拡張ユーザー属性が設定されるファイルです。
mkuserでの新規ユーザー作成時にスタンザが追加されます。デフォルト軸性は/usr/lib/security/mkuser.defaultの定義に従います。
拡張ユーザー属性についての設定は今回は割愛します。
以下、実機での出力です(デフォルト値)
*******************************************************************************
* VALID USER ATTRIBUTES FOR /ETC/SECURITY/USER:
*
* account_locked Defines whether the account is locked. Locked accounts can
* not be used for login. Possible values: true or false.
*
* admin Defines the administrative status of the user.
* Possible values: true or false.
*
* admgroups Lists the groups that the user administrates. The value
* is a comma-separated list of valid group names.
*
* auth1 Defines primary authentication methods for a user. This
* attribute describes Version 3 style authentication methods.
* Commands login, telnet, rlogin, and su support these
* authentication methods.
*
* Possible values: SYSTEM,NONE,token;username.
*
* SYSTEM : Describes normal password authentication in
* Version 3. Version 4 has extended this
* definition to include loadable modules and
* an authentication grammar. See SYSTEM
* attribute description below.
*
* NONE : No authentication.
*
* token;username : A generic name for a custom
* authentication method defined in
* /etc/security/login.cfg.
*
* Example:
* If auth1 is:
* auth1 = SYSTEM,mylogin;mary
*
* And the stanza in /etc/security/login.cfg is:
* mylogin:
* program = /etc/myprogram
*
* This will do password authentication, and then
* invoke the program /etc/myprogram with "mary"
* as the first parameter.
*
* auth2 Defines the secondary authentication methods for a user.
* It is not a requirement to pass this method to login.
* See auth1 description above for examples.
*
* SYSTEM Describes Version 4 authentication requirements. This
* attribute can be used to describe multiple or alternate
* authentication methods. See authenticate() routine and
* SYSTEM grammar manual pages.
*
* Possible tokens:
*
* files : local only authentication.
* compat : local plus NIS authentication.
* Version 3 behavior.
* DCE : Distributed Computing Environment
* authentication.
*
* Example:
* SYSTEM = "DCE OR DCE[UNAVAIL] AND compat"
*
* daemon Defines whether the user can execute programs using the system
* resource controller (SRC). Possible values: true or false.
*
* default_roles Defines a user's default roles. If set to ALL, the users
* role attribute will be used as its default roles.
*
* dictionlist Defines the password dictionaries used when checking new
* passwords. The format is a comma-separated list of absolute
* path names to dictionary files. A dictionary file contains
* one word per line where each word has no leading or trailing
* white space. Words should only contain 7 bit ASCII characters.
* All dictionary files and directories should be write protected
* from everyone except root. The default is valueless, which is
* equivalent to no dictionary checking.
*
* Example dictionary: /usr/share/dict/words
* (Only available if text processing is installed.)
*
* expires Defines the expiration time for the user account.
* Possible values: a valid date in the form MMDDHHMMYY or 0.
* If 0 the account does not expire. If 0101000070 the account
* is disabled. The range for YY is:
* 00 - 38 years 2000 thru 2038
* 39 - 99 years 1939 thru 1999
*
* histexpire Defines the period of time in weeks that a user
* will not be able to reuse a password.
* Possible values: an integer value between 0 and 260.
* 26 (approximately 6 months) is the recommended value.
*
* histsize Defines the number of previous passwords which cannot be
* reused.
* Possible values: an integer value between 0 and 50.
*
* login Defines whether the user can login.
* Possible values : true or false.
*
* logintimes Defines the times a user can login. The value is a comma
* separated list of items as follows:
* [!][MMdd[-MMdd]]:hhmm-hhmm
* or
* [!]MMdd[-MMdd][:hhmm-hhmm]
* or
* [!][w[-w]]:hhmm-hhmm
* or
* [!]w[-w][:hhmm-hhmm]
* where MM is a month number (00=January, 11=December), dd is
* the day of the month, hh is the hour of the day (00 - 23), mm
* is the minute of the hour, and w is a weekday (0=Sunday, 6=
* Saturday).
*
* loginretries The number of invalid login attempts before a user is not
* allowed to login. Possible values: a positive integer or 0
* to disable this feature. (root is exempt from loginretries)
*
* maxage Defines the maximum number of weeks a password is valid. The
* default is 0, which is equivalent to unlimited. Range: 0 to 52.
*
* maxexpired Defines the maximum number of weeks after maxage that an expired
* password can be changed by a user. The default is -1, which
* is equivalent to unlimited. Range: -1 to 52. maxage must
* be greater than 0 for maxexpired to be enforced. (root is
* exempt from maxexpired.)
*
* maxrepeats Defines the maximum number of times a given character can
* appear in a password. The default is 8. Range: 0 to PW_PASSLEN.
*
* minage Defines the minimum number of weeks between password changes.
* The default is 0. Range: 0 to 52.
*
* minalpha Defines the minimum number of alphabetic characters in a
* password. The default is 0. Range: 0 to PW_PASSLEN.
*
* minloweralpha Defines the minimum number of lower case alphabetic characters
* in a password. The default is 0. Range: 0 to PW_PASSLEN.
*
* minupperalpha Defines the minimum number of uppercase alphabetic characters
* in a password. The default is 0. Range: 0 to PW_PASSLEN.
*
* Note: If the value of minloweralpha or minupperalpha attribute is
* greater than minalpha, then that attribute is reduce to minalpha
* attribute. If 'minloweralpha + minupperalpha' is greater than
* minalpha, then minupperalpha is reduce to
* 'minalpha - minloweralpha'.
*
* mindiff Defines the minimum number of characters in the new password
* that were not in the old password. The default is 0.
* Range: 0 to PW_PASSLEN. (root is exempt from mindiff)
*
* minlen Defines the minimum length of a password. The default is 0.
* Range: 0 to PW_PASSLEN.
*
* Note: PW_PASSLEN is defined in /usr/include/userpw.h. The value of
* PW_PASSLEN is determined by the system-wide password algorithm that
* is defined in /etc/security/login.cfg.
*
* The minimum length of a password is determined by minlen and/or
* 'minalpha + minother', whichever is greater. 'minalpha + minother'
* should never be greater than PW_PASSLEN. If 'minalpha + minother'
* is greater than PW_PASSLEN, then minother is reduced to
* 'PW_PASSLEN - minalpha'.
*
* minother Defines the minimum number of non-alphabetic characters in a
* password. The default is 0. Range: 0 to PW_PASSLEN.
*
* mindigit Defines the minimum number of digits in a password.
* The default is 0. Range: 0 to PW_PASSLEN.
*
* minspecialchar Defines the minimum number of special characters in a
* password. The default is 0. Range: 0 to PW_PASSLEN.
*
* Note: If the value of mindigit or minspecialchar attribute is
* greater than minother, then that attribute is reduce to
* minother attribute. If 'mindigit + minspecialchar' is
* greater than minother, then minspecialchar is reduce to
* 'minother - mindigit'.
*
* pwdchecks Defines external password restriction methods used when
* checking new passwords. The format is a comma-separated list
* of absolute path names to methods and/or method path names
* relative to /usr/lib. A password restriction method is a
* program module that is loaded by the password restrictions code
* at runtime. All password restriction methods and directories
* should be write protected from everyone except root. The
* default is valueless, which is equivalent to no external
* password restriction methods.
*
* pwdwarntime The number of days before a forced password change that a
* warning will be given to the user informing them of the
* impending password change. Possible values: a positive integer
* or 0 to disable this feature.
*
* registry Describes where this user is administered. It is used
* whenever there is a possibility of resolving a remotely
* administered user to the local administration domain.
* This can happen when network services go down or
* network databases are replicated locally.
* Possible values : files, NIS, or DCE
*
* rlogin Defines whether the user account can be accessed by remote
* logins. Commands rlogin and telnet support this attribute.
* Possible values: true or false.
*
* su Defines whether other users can switch to this user account.
* Command su supports this attribute.
* Possible values: true or false.
*
* sugroups Defines which groups can switch to this user account.
* Alternatively you may explicitly deny groups by preceding
* the group name with a ! character.
* Possible values :
* A list of valid groups separated by commas, ALL, or *.
*
* tpath Defines the user's trusted path characteristics.
* Possible values:
* nosak : The Secure Attention Key (SAK) key (^X^R)
* has no effect.
* notsh : The SAK key logs you out. You can never be
* on the trusted path.
* always : When you log in you are always on the
* trusted path.
* on : The trusted path is entered when the SAK
* key is hit.
*
* Note : This attribute only takes effect if the sak_enabled
* attribute (in /etc/security/login.cfg) is set to
* true for the port you are logging into.
*
* ttys Defines which terminals can access the user account.
* Alternatively you may explicitly deny terminals by preceding
* the terminal name with the ! character.
* Possible values:
* List of device paths separated by commas, ALL or *.
*
* umask Defines the default umask for the user.
* Possible values: three-digit octal value.
*
* Notes: Boolean values (i.e. true or false) may use any of the
* following values. These values are not case sensitive.
*
* true, false, yes, no, always, never.
*
*******************************************************************************
default:
admin = false
login = true
su = true
daemon = true
rlogin = true
sugroups = ALL
admgroups =
ttys = ALL
auth1 = SYSTEM
auth2 = NONE
tpath = nosak
umask = 022
expires = 0
SYSTEM = "compat"
logintimes =
pwdwarntime = 5
account_locked = false
loginretries = 0
histexpire = 52
histsize = 4
minage = 4
maxage = 13
maxexpired = 4
minalpha = 2
minloweralpha = 1
minupperalpha = 1
minother = 1
mindigit = 1
minspecialchar = 1
minlen = 10
mindiff = 0
maxrepeats = 8
dictionlist =
pwdchecks =
default_roles =
root:
admin = true
SYSTEM = "compat"
registry = files
loginretries = 0
account_locked = false
minlen = 8
histsize = 2
maxexpired = 52
minupperalpha = 0
daemon:
admin = true
expires = 0101000070
bin:
admin = true
expires = 0101000070
sys:
admin = true
expires = 0101000070
adm:
admin = true
uucp:
admin = true
login = false
rlogin = false
su = true
guest:
nobody:
admin = true
expires = 0101000070
lpd:
admin = true
expires = 0101000070
sshd:
admin = false
account_locked = true
login = false
rlogin = false
invscout:
admin = true
snapp:
admin = false
rlogin = false
su = false
SYSTEM = "NONE"
login = true
ttys = /dev/tty0
registry = files
dce_export = false
ipsec:
admin = false
nuucp:
admin = false
smmsp:
admin = false
su = false
login = false
rlogin = false
srvproxy:
admin = false
umask = 2
login = false
rlogin = false
esaadmin:
admin = true
login = false
rlogin = false
umask = 22
registry = files
default_roles = SysConfig
$HOME配下の設定ファイル
$HOME配下の設定ファイルはユーザーの個別設定に関するファイルです。
基本的にユーザー固有のカスタマイズはこの場所のファイルに記述します。
$HOME/.profile
ログインシェル起動後に実行されるユーザー固有の設定を記述します。
/etc/profileで設定された環境変数などは上書きして設定します。
共用システムにおいて、あるユーザーだけの設定をしたい場合にはここで変更をかけます。
以下、カスタマイズした実機での出力です。
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.
export PATH
if [ -s "$MAIL" ] # This is at Shell startup. In normal
then echo "$MAILMSG" # operation, the Shell checks
fi # periodically.
# Pronpt custmize setting
PS1="[$(uname -n)@$(whoami)]\$"
export PS1
# default shell bash
exec bash
上記ではプロンプトをカスタマイズしてノード名とユーザー名を出力しています。
またログインシェル起動後にbashに移行しています。
$HOME/.kshrc
kshを起動時に適用されるユーザー固有の設定を記述します。
シェルの環境設定を記述することが多くset -o
やset +o
を使って記述します。
また、aliasの設定もここで実施されることが多いです。
※AIXはデフォルトがKorn shell(ksh)です。AIX7.3TL1SP1の現在はksh88 シェルがデフォルトですが将来的にフォルトの AIX シェルが ksh93 シェルに置き換えられる可能性があるそうです
AIX7.3からbashも使用可能です。
以下、bash.rteがAIX7.3にてデフォルトでインストールされるようになった模様
Fileset Level State Description
----------------------------------------------------------------------------
Path: /usr/lib/objrepos
bash.rte 5.2.15.0 COMMITTED bash shell
Path: /etc/objrepos
bash.rte 5.2.15.0 COMMITTED bash shell