トップページに戻る


CentOS 初期設定
最終更新日:2014.9.6

ユーザーを登録、削除

下記例ではcentosユーザーを登録、削除してみます。

ユーザーを登録

ユーザーを登録するには、まずユーザーを作成して、そのあとそのユーザーにパスワードを設定します。
# useradd centos	←ユーザーを追加
# passwd centos  	←centosにパスワードを設定(パスワードは2回入力する)

ユーザーを削除

# userdel -r centos

ユーザーを追加するとuseradd: user "User" existsというエラーになる

-rオプションをつけないでuserdelを実行すると、ユーザーを削除してもユーザー関連のファイルが残っているのでユーザーを追加できずエラーになります。対処するには以下のように関連ファイルを削除して一旦再ログインします。削除したいユーザーがcentosの場合の例です。
# rm /var/spool/mail/centos
# cd /home
# rm -rf centos

ユーザーが所属するグループを確認

ユーザーが所属するグループを確認するにはidコマンドを実行します。
# id admin		←ユーザー"admin"が所属するグループを確認
uid=500(admin) gid=500(admin) 所属グループ=500(admin),10(wheel) context=user_u:system_r:unconfined_t
groupsコマンドでも所属グループを確認できます。
# groups admin
admin : admin wheel

コマンドの別名を設定する

長いコマンドや良く使うコマンドに対して、別名を設定できます。
ここでは例として、ipconfigを実行した場合、ifconfigコマンドが実行されるように設定してみます。

1.全ユーザー共通

# vi /etc/bashrc
:
: (最終行に追記)
alias ipconfig='ifconfig'
(2)一旦ログオフしてログインし直す。
もしくは以下のコマンドを実行して反映させる。
# source /etc/bashrc

2.ユーザーごとに設定

(1)設定追加

$ vi ~/.bashrc
:
: (最終行に追記)
alias ipconfig='ifconfig'
(2)一旦ログオフしてログインし直す。
もしくは以下のコマンドを実行して反映させる。
# source ~/.bashrc

特定のユーザーでsudoを実行できるように設定する

初期設定では、root権限のあるユーザーでないとsudoを実行できません。

$ sudo service httpd start
[sudo] password for admin:
admin is not in the sudoers file.  This incident will be reported.

CentOSでsudoを利用できるようにするには、様々な方法がありますがたとえば以下のようにユーザーadminをwheelグループに追加して、wheelグループでsudoコマンドを利用できるように設定変更する方法があります。

(1)まず、ユーザーadminをwheelグループに追加します。

# gpasswd -a admin wheel

(2)visudoを実行してwheelグループがsudoコマンドを実行できるようにします。

# visudo

(3)以下の行を検索して、コメントアウトを外す

## Same thing without a password
%wheel ALL=(ALL)       NOPASSWD: ALL

以上でCentOSでadminユーザーがsudoコマンドを利用可能になります。

動作確認

sudoが利用できるようになったかadminユーザーでログインして確認します。

$ sudo service httpd start
httpd を起動中:                                            [  OK  ]
$ sudo service httpd stop
httpd を停止中:                                            [  OK  ]

ユーザー"admin"でsudoコマンドが使えるようになりました。

root権限に切り替えられるユーザーを制限する

デフォルト設定ではrootのパスワードがわかれば、管理者権限で何でも行なえてしまいます。

ここではユーザー"admin"をwheelグループに所属させて、 wheelグループに登録されているユーザーのみ管理者権限に切り替えられるように設定します。

# gpasswd -a admin wheel

# vi /etc/pam.d/su
#auth       required     pam_wheel.so use_uid
↓コメントをはずす
auth       required     pam_wheel.so use_uid

これでwheelグループに属するユーザーのみ、管理権限に切り替えられるようになりました。

rootへの切り替えをパスワード無しで行なう

「root権限に切り替えられるユーザーを制限する」の設定を行なった後はwheelグループに所属するユーザーが「su -」コマンドを打った場合、パスワード認証が行なわれ、正しいパスワードを入れるとrootになれるようになります。ここで説明する設定を変更すると、「su -」コマンドを打った場合、パスワードなしにroot権限になれます。

# vi /etc/pam.d/su
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
↓コメントをはずす
auth           sufficient      pam_wheel.so trust use_uid

これでrootにパスワード無しで切り替えられるようになりました。

rootでSSH接続できないようにする

サーバーの不正アクセスの手段として、SSHへの辞書攻撃が良くあります。
これを防ぐために一番危険なrootでのssh接続を出来ないように設定しましょう。

# vi /etc/ssh/sshd_config
 :
 :
#PermitRootLogin yes
↓
PermitRootLogin no

# service sshd restart
sshd を再読み込み中:                                       [  OK  ]

これで、root権限でssh接続できなくなります。
ただし、root以外のユーザー権限ではssh接続可能です。

使用中の端末をロックする

作業中に少し席を外すときなどにvlockコマンドを実行すると端末をロックできて便利です。
vlockコマンドはyumコマンドを使ってインストールできます。

使い方は簡単。vlockコマンドを実行するだけです。vlockコマンドを実行したユーザーのパスワードを入力するとロックが解除されます。

# vlock
This TTY is now locked.
Use Alt-function keys to switch to other virtual consoles.
Please enter the password to unlock.
root's Password:
#

サービス一覧を表示する

CentOSのサービス一覧を表示するにはUpstart(CentOS 6 etc..)ではservice --status-all
Systemd(Fedora 17以降,CentOS7)ではsystemctl -t serviceなどを利用できます。

Upstart

# service --status-all
auditd (pid  1019) is running...
crond (pid  1190) is running...
...
rsyslogd (pid  1035) is running...
sandbox is stopped
saslauthd is stopped
openssh-daemon (pid  1102) is running...

Systemd

# systemctl -t service
UNIT                              LOAD   ACTIVE SUB     DESCRIPTION
auditd.service                    loaded active running Security Auditing Service
avahi-daemon.service     loaded active running Avahi mDNS/DNS-SD Stack
crond.service                     loaded active running Command Scheduler
dbus.service                      loaded active running D-Bus System Message Bus
firewalld.service                loaded active running firewalld - dynamic firewall daem
getty@tty1.service            loaded active running Getty on tty1
...

SSH接続認証の制限時間を短くする

ssh接続はデフォルトで120秒以内に認証に成功しない場合、接続をシャットダウンします。
これを自分のタイプスピードに合わせて可能な限り短く設定することで、より安全にサーバーを運用できます。

# vi /etc/ssh/sshd_config
 :
 :
#LoginGraceTime 2m (デフォルトは120秒)
↓
LoginGraceTime 20

# service sshd restart
sshd を再読み込み中:                                       [  OK  ]

これで、制限時間(例では20秒)以内にssh接続の認証に成功しないと接続を切断されるようになり、若干安全になりました。

SSHの待ち受けポート番号を変更する

SSHの待ち受けポートは通常TCP/22番ポートが使われますが、サーバーを外部公開している場合、22番ポートへの不正な接続が行われることが多く、その対策としてポート番号の変更があげられます。

SELinuxを利用していない場合は、SSHDのポート設定とiptablesの設定を行うと、新しいポート番号が有効になります。

srv# vi /etc/ssh/sshd_config
..
#Port 22
Port 50022
(ポートを変更)
srv# service sshd restart
(変更を反映させるためにサービス再起動)
srv# vi /etc/sysconfig/iptables
..
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT         #削除
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50022 -j ACCEPT  #追記
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
(許可するポートを追加)

srv# service iptables restart
(iptablesを再起動)

SELinuxを有効化している環境ではSSHDのポート番号を設定変更する前に、semanageコマンドで利用したいポート番号を事前に定義しておく必要があります。コマンド実行後、SSHDのポート設定とiptablesの設定を行ってください。

srv# yum install -y policycoreutils-python
(semanageコマンドを利用するためにインストール)
srv# semanage port -l | grep ssh
ssh_port_t                     tcp      22
(現在許可されているポートを確認)
srv# semanage port -a -t ssh_port_t -p tcp 50022
(利用したいポート番号を設定)
※自由に利用できるポート49152-65535の範囲で決定

srv# semanage port -l | grep ssh
ssh_port_t                     tcp      50022, 22
(ポートが追加されたことを確認)
以上の設定を行い、外部PCからアクセスしてみましょう。ポート番号を標準と異なるものを利用するため、オプション-pを使って50022ポートを指定しています。
client# ssh root@192.168.135.154 -p 50022
root@192.168.135.154's password:
Last login: Wed Aug 27 20:40:30 2014
srv#
(接続できた)

バッファオーバーフロー対策「Exec-Shield」を有効化する

CentOSにはExec-Shieldというバッファオーバーフロー対策機能が備わっています。
デフォルトの設定では1(基本的に有効と明示しない限り無効)に設定されています。

これを有効にします。

# echo 2 > /proc/sys/kernel/exec-shield

元の設定に戻すには1をechoします。

# echo 1 > /proc/sys/kernel/exec-shield

echo 2しただけでは次回再起動時に設定が元に戻ってしまいます。
以下のファイルに設定を書き込んで、常に有効になるように設定します。

# vi /etc/sysctl.conf
最終行に下記を追記
kernel.exec-shield = 2

設定が終わったら、一旦再起動します。

実行ファイル毎のExec-Shieldの有効化、無効化

例として、ここではApacheサーバーでの設定を例にあげます。

(1)実行ファイルのパス確認

# which httpd
/usr/sbin/httpd

(2)有効に設定

# execstack -c /usr/sbin/httpd

(3)無効に設定

# execstack -s /usr/sbin/httpd

(4)確認

# execstack -q /usr/sbin/httpd

パスの頭に"X"がついていれば無効、"-"がついていれば有効に設定されているのがわかります。