| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import errno |
| import grp |
| import logging |
| import os |
| import pwd |
| import stat |
| |
| from autotest_lib.client.bin import test, utils |
| from autotest_lib.client.common_lib import error |
| |
| class security_SysLogPermissions(test.test): |
| version = 1 |
| |
| def run_once(self, baseline='suid'): |
| syslog_uid = pwd.getpwnam('syslog').pw_uid |
| syslog_gid = grp.getgrnam('syslog').gr_gid |
| st = os.stat('/var/log') |
| if not (st.st_mode & stat.S_ISVTX): |
| raise error.TestFail('/var/log is not sticky') |
| if st.st_gid != syslog_gid: |
| raise error.TestFail('/var/log is not group syslog') |
| |
| # The /var/log/messages file might be rotated while this test runs. |
| # Be a bit forgiving when it comes to slightly-off settings. |
| try: |
| st = os.stat('/var/log/messages') |
| except OSError as e: |
| # Ignore missing (middle of rotation) files. |
| if e.errno == errno.ENOENT: |
| return |
| raise |
| if st.st_uid == 0 and st.st_size == 0: |
| # Ignore freshly created files. |
| pass |
| elif st.st_uid != syslog_uid: |
| raise error.TestFail('/var/log/messages is not user syslog') |